В настоящее время я использую AVAssetWriter
для создания QuickTime Mov.Видеодорожка генерируется правильно.Теперь я хотел бы добавить «мусорную» звуковую дорожку mp4a.Звук может быть просто белым шумом.В основном меня интересует файл mov, содержащий и видео и аудио дорожки.
Как мне настроить CMSampleBufferRef
, который просто содержит белый шум в формате mp4a?Вот что я пробовал до сих пор:
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];
Когда передается NULL
для audioFormatDescrip, файл mov генерируется успешно, но содержит только видео дорожку (и без звуковой дорожки).Когда я фактически передаю audioFormatDescrip, файл mov кажется поврежденным.Я, вероятно, должен на самом деле передать некоторые образцы, но я не уверен, как.
Примечание: я проверил, что appendSampleBuffer
возвращает YES
(для краткости я пропустил этот код).