AVAssetWriter現在、Quicktime mov の生成に使用しています。ビデオ トラックが正しく生成されます。ここで、「ガベージ」mp4a オーディオ トラックを追加したいと思います。オーディオは単なるホワイト ノイズである可能性があります。私が主に関心を持っているのは、ビデオ トラックとオーディオ トラックの両方を含む mov ファイルです。
CMSampleBufferRefmp4a 形式のホワイト ノイズだけを含むファイルをセットアップするにはどうすればよいですか? これが私がこれまでに試したことです:
CMSampleBufferRef garbageAudioSampleBuffer = NULL;
AudioStreamBasicDescription audioFormat;
audioFormat.mSampleRate = 44100;
audioFormat.mFormatID = kAudioFormatLinearPCM;
audioFormat.mFormatFlags = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked;
audioFormat.mFramesPerPacket = 1;
audioFormat.mChannelsPerFrame = 2;
audioFormat.mBitsPerChannel = 16;
audioFormat.mBytesPerPacket = 4;
audioFormat.mBytesPerFrame = 4;
CMAudioFormatDescriptionRef audioFormatDescrip = NULL;
CMAudioFormatDescriptionCreate(kCFAllocatorDefault,
&audioFormat,
0,
NULL,
0,
NULL,
NULL,
&audioFormatDescrip
);
CMSampleBufferCreate(kCFAllocatorDefault,
NULL,
YES,
NULL,
NULL,
NULL, // audioFormatDescrip,
0,
0,
NULL,
0,
NULL,
&garbageAudioSampleBuffer
);
if(myAVAssetAudioWriterInput isReadyForMoreMediaData)
[myAVAssetAudioWriterInput appendSampleBuffer:garbageAudioSampleBuffer];
がaudioFormatDescripNULLに渡されると、mov ファイルが正常に生成されますが、ビデオ トラックのみが含まれます (オーディオ トラックは含まれません)。実際に audioFormatDescrip を渡すと、mov ファイルが壊れているようです。おそらく実際にいくつかのサンプルを渡す必要がありますが、方法がわかりません。
appendSampleBuffer注: が返されることを確認しましたYES(簡潔にするために、そのコードは省略しました)。