2011-10-31 82 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