2011-10-31 81 views
4

我目前使用AVAssetWriter来生成Quicktime mov。视频轨道正确生成。现在我想添加一个“垃圾”mp4a音轨。音频可能只是白噪声。我主要关心的是包含这两个视频和音频轨道的mov文件。使用AVAssetWriter创建白噪声音轨

如何设置仅包含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]; 

NULL针对audioFormatDescrip通过成功生成的MOV文件,但只包含一个视频轨道(无音频轨道)。当我真正传递audioFormatDescrip时,mov文件似乎已损坏。我可能不得不通过一些样品,但我不知道如何。

注意:我已验证appendSampleBuffer返回YES(为简洁起见,我省略了该代码)。

回答

3

有一堆代码中的问题:

  1. 白噪声具有统计定义,你要创建不确定噪音。
  2. 你没有通过audioFormatDescription到CMSampleBufferCreate
  3. 你使用的不是CMAudioSampleBufferCreateWithPacketDescriptions CMSampleBufferCreate你的生活变得复杂(你没有数据包的描述,让刚刚过去的空& 0)
  4. 你需要说您的音频缓冲区带有演示时间戳
  5. 您的音频缓冲区长度为0帧。太短了。
  6. 最后,你需要不断添加音频缓冲,足以让你的电影的整个过程中,因为有数百个需要恰到好处参数

CoreMedia代码可能会非常棘手。出于您的目的,它可能有点过于笼统,为什么不使用白色噪声的可循环片段并使用AVMutableComposition进行组装?这会给你一个电影&和一个音频文件,然后你可以使用另一个AVMutableComposition和AVAssetExportSession一起压缩。

+0

好点!我会解决这些问题。 'CMAudioSampleBufferCreateWithPacketDescriptions'听起来很有希望。 – MrDatabase

+0

你有没有设法通过写入多个带有音频的缓冲区来工作?我有这个问题:http://stackoverflow.com/questions/12187124/writing-video-generated-audio-to-avassetwriterinput-audio-stuttering – Pete