Подтвердить что ты не робот

Как конвертировать AVAsset в NSData или сохранять его в файловый менеджер

Я пытаюсь сделать это с помощью AVAsset для записи аудиофайла, а затем сначала сохранить его на NSFileManager, а затем преобразовать его в nsdata я Call API для его сохранения.

Мне удалось создать файл записи AVAsset и воспроизвести его с использованием стороннего класса SCPlayer.

Теперь проблема в том, что я не знаю, как использовать AVAsset файл для сохранения его в файловом менеджере, а затем после вызова API, чтобы отправить его, преобразов его в NSData.

Можно ли преобразовать AVAsset в NSData???

Пожалуйста, помогите...

4b9b3361

Ответ 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
}];