2

AVAudioRecorderを使用してAACでエンコードされた.m4aファイルを作成して保存しています。これにより、再生可能な.m4aファイルが正常に生成されます。次に、AVAssetExportSessionを使用してファイルを処理し、ファイルにメタデータを追加します。以下のコードは、同様のサイズ(ソースより1 KB小さい)の.m4aファイルを生成していますが、再生すると、無音になります。

NSURL* url = [NSURL fileURLWithPath:self.m4aPath];
AVURLAsset* asset = [AVAsset assetWithURL:url];
AVMutableMetadataItem* t = [AVMutableMetadataItem metadataItem];
t.key = AVMetadataCommonKeyTitle;
t.keySpace = AVMetadataKeySpaceCommon;
t.value = @"Unit Test";
NSArray* metadata = [NSArray arrayWithObject:t];

AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:asset presetName:AVAssetExportPresetAppleM4A];

exportSession.outputURL = [NSURL fileURLWithPath:[[NSFileManager  rawRecordingsDirectory] stringByAppendingPathComponent:@"test.m4a"]];
exportSession.outputFileType = AVFileTypeAppleM4A;
exportSession.metadata = metadata;

[exportSession exportAsynchronouslyWithCompletionHandler:^{....}];

もう1つの情報:Finderでソースファイルとエクスポートされたファイルを見ると、ソースファイルには黒いiTunesアイコンがあり、エクスポートされたファイルには白いiTunesアイコンがあります。これが実際に何を意味するのかはわかりませんが、役立つことを願っています。さらに、ソースをダブルクリックするとiTunesに追加されて再生が開始され、エクスポートされたソースをダブルクリックするとiTunesが開きますが、何も実行されません。

4

1 に答える 1

1

出力 m4a ファイルに (黒ではなく) 白のアイコンが表示され、再生されないという同様の問題がありました。それは生のサンプル データから元のソース ファイルを作成していたときであり、メタデータを追加するときではありませんでした。

私の問題は、コードでエクスポートされたファイルを閉じていなかったことです (閉じる関数を呼び出す前にアプリを終了していました)。close 関数を呼び出すと、機能し始めました。あなたはそれを確認したいかもしれません。

また、ファイルが破損している場合はエラーが発生し、そうでない場合は正常に再生されるため、「open with->Quicktime」が便利であることがわかりました。エラーを黙って無視する iTunes よりも便利です。

于 2013-01-09T12:56:30.027 に答える