2016-06-14 12 views
2

AVPlayerを使用しているプレーヤー(URLを使用している)であるmp3ファイルをエクスポートしようとしていますので、2回ダウンロードする必要はありません。AVAslayerExportSessionを使用してAVPlayerオーディオmp3ファイルをエクスポートするにはどうすればよいですか?

これは私のサンプルコードです:

私はすべてのoutputFileTypeを試してみた...

self.exporter = [[AVAssetExportSession alloc] initWithAsset:self.asset presetName:AVAssetExportPresetPassthrough]; 
     } 

     NSError *error; 

     NSLog(@"export.supportedFileTypes : %@",self.exporter.supportedFileTypes); 
     //  "com.apple.quicktime-movie", 
//  "com.apple.m4a-audio", 
//  "public.mpeg-4", 
//  "com.apple.m4v-video", 
//  "public.3gpp", 
//  "org.3gpp.adaptive-multi-rate-audio", 
//  "com.microsoft.waveform-audio", 
//  "public.aiff-audio", 
//  "public.aifc-audio", 
//  "com.apple.coreaudio-format" 

     self.exporter.outputFileType = @"public.aiff-audio"; 
     self.exporter.shouldOptimizeForNetworkUse = YES; 

     NSURL *a = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:YES error:&error]; 

     NSURL *url = [a URLByAppendingPathComponent:@"filename.mp3"]; 

     NSString *filePath = [url absoluteString]; 

     self.exporter.outputURL = url; 

     if (![[NSFileManager defaultManager] fileExistsAtPath:filePath]){ 
      [self.exporter exportAsynchronouslyWithCompletionHandler:^{ 

       if (self.exporter.status == AVAssetExportSessionStatusCompleted) 
       { 

        if (![[NSFileManager defaultManager] fileExistsAtPath:filePath]){ 
         NSLog(@"File doesn't exist at path"); 
        }else { 
         [email protected]"File saved!"); 
}      
       } 
       else if(self.exporter.status == AVAssetExportSessionStatusFailed){ 
        NSLog(@"Failed"); 
       }else if(self.exporter.status == AVAssetExportSessionStatusUnknown){ 
        NSLog(@"Unknown"); 
       }else if(self.exporter.status == AVAssetExportSessionStatusCancelled){ 
        NSLog(@"Cancelled"); 
       }else if(self.exporter.status == AVAssetExportSessionStatusWaiting){ 
        NSLog(@"Waiting"); 
       }else if(self.exporter.status == AVAssetExportSessionStatusExporting){ 
        NSLog(@"Exporting"); 
       } 

       NSLog(@"Exporter error! : %@",self.exporter.error); 

       }]; 

     }}else{ 
      NSLog(@"File already exists at path"); 
     } 

これを達成することができない場合には、周りにどんな仕事があるのでしょうか?

また、オーディオファイルの形式を変更することもできます。 AVAudioPlayerで動作するのに理想的なタイプは何ですか?

+0

はい、でもAppleの独自のAVFoundationExporterのサンプルプロジェクトは、mp3で動作するようには思えませんファイルとAVAssetExportPresetPassthroughプリセットを設定します。 – Dalmazio

+0

こちらの回答を参考にしてください。 https://stackoverflow.com/a/47327516/1682312 –

答えて

4

AVAssetExportSessionだけAVAssetExportPresetPassthroughプリセットを使用してcom.apple.quicktime-映画(.MOV)とcom.apple.coreaudio形式(.caf)とmp3のトランスコーディングのためのファイルタイプをサポートして表示されます。また、出力ファイルを書き込むときにこれらのファイル拡張子の1つを使用する必要があります。それ以外の場合は保存されません。

mp3入力ファイルの出力ファイルタイプと拡張であるサポート(OS X 10.11.6上でテスト)太字:

  • com.apple.quicktime-映画(.MOV)
  • コム.apple.m4aオーディオ(.M4A)
  • public.mpeg-4(.MP4)(.m4v)
  • org.3gpp.adaptive-マルチレート音声
  • com.apple.m4vビデオ(.amr)
  • com.microsoft.waveformオーディオ(.WAV)
  • public.aiffオーディオ(.AIFF)
  • public.aifcオーディオ(.aifc)
  • com.apple.coreaudioフォーマット(。 CAF)

あなたが別の形式にオーディオデータの適切なトランスコードを実行する気にしないならば、あなたはAVAssetExportPresetPassthroughプリセットを使用する必要はありません。 AVAssetExportPresetLowQuality,AVAssetExportPresetMediumQuality、およびAVAssetExportPresetHighestQualityもあります。次のサンプルコードでは、出力URLは、iTunesや他のメディアプレーヤーで拡張.M4A、そして得られたトランスコードの再生を持っています

AVAsset * asset = [AVAsset assetWithURL:inputURL]; 
AVAssetExportSession * exportSession = [[AVAssetExportSession alloc] initWithAsset:asset presetName:AVAssetExportPresetHighestQuality]; 
exportSession.outputFileType = AVFileTypeMPEG4; 
exportSession.outputURL = outputURL; 
exportSession.metadata = asset.metadata;  
[exportSession exportAsynchronouslyWithCompletionHandler:^{ 

    if (exportSession.status == AVAssetExportSessionStatusCompleted) 
    { 
      NSLog(@"AV export succeeded."); 
    } 
    else if (exportSession.status == AVAssetExportSessionStatusCancelled) 
    { 
     NSLog(@"AV export cancelled."); 
    } 
    else 
    { 
     NSLog(@"AV export failed with error: %@ (%ld)", exportSession.error.localizedDescription, (long)exportSession.error.code); 
    } 
}]; 
+0

あなたのアプローチを試してみてください。私はQuickTimeで再生可能なmp3ファイルを受け取りますが、iTunesや他のプレイヤーでは再生できません。あなたはこれを修正する方法を知っていますか? –

+0

あなたは 'AVAssetExportPresetPassthrough'でそれができないようです。私は.m4aにトランスコードしていますが、実際にはオーディオデータを別のフォーマットに変換する 'AVAssetExportPresetLowQuality'プリセットを使用しています。 'AVAssetExportPresetMediumQuality'と' AVAssetExportPresetHighestQuality'を含むいくつかの他のプリセットを試すことができます。私の答えをいくつかの追加情報で更新しましょう。 – Dalmazio

+0

@Dalmazioあなたの経験では、ビデオをmp3に変換する適切な方法は何ですか? –

関連する問題