web-dev-qa-db-ja.com

AVAssetをNSDataに変換またはファイルマネージャーに保存する方法

私はAVAssetを使用してオーディオファイルを録音し、最初にNSFileManagerに保存した後、それをnsdataに変換してAPIを呼び出して保存します。

AVAsset記録ファイルを作成し、SCPlayerであるサードパーティのクラスを使用して再生することに成功しました。

今問題は、ファイルマネージャに保存するためにAVAssetファイルを使用する方法がわからないことです。次にAPIを呼び出した後、NSDataに変換して送信します。

AVAssetNSDataに変換する方法はありますか???

助けてください...

14

次のことができます。

  1. AVAssetExportSessionを使用して、AVAssetオブジェクトをファイルパスURLにエクスポートします。
  2. 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.");
    }];
    
  3. 必要なことをすべて実行した後は、出力ファイルをクリーンアップすることを忘れないでください;)

23
itsprof

スウィフト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
                }
            })
6

あなたは 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
}];
3
Ivan Golub