Как конвертировать AVAsset в NSData или сохранять его в файловый менеджер
Я пытаюсь сделать это с помощью AVAsset
для записи аудиофайла, а затем сначала сохранить его на NSFileManager
, а затем преобразовать его в nsdata я Call API для его сохранения.
Мне удалось создать файл записи AVAsset
и воспроизвести его с использованием стороннего класса SCPlayer
.
Теперь проблема в том, что я не знаю, как использовать AVAsset
файл для сохранения его в файловом менеджере, а затем после вызова API, чтобы отправить его, преобразов его в NSData
.
Можно ли преобразовать AVAsset
в NSData
???
Пожалуйста, помогите...
Ответы
Ответ 1
Вы можете сделать следующее:
- Используйте
AVAssetExportSession
для экспорта объекта AVAsset
в файл
URL пути.
-
Преобразуйте его в NSData
с помощью dataWithContentsOfURL
Метод.
NSURL *fileURL = nil;
__block NSData *assetData = nil;
// asset is you AVAsset object
AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:asset presetName:AVAssetExportPresetHighestQuality];
exportSession.outputURL = fileURL;
// e.g .mov type
exportSession.outputFileType = AVFileTypeQuickTimeMovie;
[exportSession exportAsynchronouslyWithCompletionHandler:^{
assetData = [NSData dataWithContentsOfURL:fileURL];
NSLog(@"AVAsset saved to NSData.");
}];
-
Не забудьте очистить выходной файл, выполнив все, что вам нужно сделать;)
Ответ 2
Swift 3
let manager = PHImageManager.default()
manager.requestAVAsset(forVideo: asset, options: nil, resultHandler: { (avasset, audio, info) in
if let avassetURL = avasset as? AVURLAsset {
guard let video = try? Data(contentsOf: avassetURL.url) else {
return
}
videoData = video
}
})
Ответ 3
Вы можете посмотреть AVAssetExportSession
AVAssetExportSession *exporter = [[AVAssetExportSession alloc] initWithAsset:asset presetName:AVAssetExportPresetHighestQuality];
exporter.outputURL = exportUrl;
[exporter exportAsynchronouslyWithCompletionHandler:^{
// here your file will be saved into file system at specified exportUrl
}];