我目前正在使用AVAssetWriter
来生成Quicktime mov。视频轨道正确生成。现在我想添加一个“垃圾”mp4a音轨。音频可能只是白噪声。我主要关注的是包含两个视频和音轨的mov文件。
如何设置仅包含mp4a格式的白噪声的CMSampleBufferRef
?这是我到目前为止所尝试的内容:
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];
当为audioFormatDescrip传递NULL
时,mov文件成功生成但仅包含视频轨道(并且没有音频轨道)。当我实际传递audioFormatDescrip时,mov文件似乎已损坏。我可能不得不实际传递一些样本,但我不确定如何。
注意:我已经确认appendSampleBuffer
返回YES
(为简洁起见,我省略了该代码)。
答案 0 :(得分:3)
您的代码中存在许多问题:
CoreMedia代码可能很棘手,因为有数百个参数需要恰到好处。为了你的目的,它可能有点过于笼统,那么为什么不得到一个可循环的白噪声片段并使用AVMutableComposition组装它?这将给你一个电影&和一个音频文件,然后您可以使用另一个AVMutableComposition和AVAssetExportSession压缩在一起。