2011-08-27 85 views
16

我已經成功地將一幀電影的視頻軌道逐幀加載到AVFoundation的OpenGL紋理中。我也跟着在這裏的答案中描述的步驟:iOS4: how do I use video file as an OpenGL texture? 並採取了一些代碼從WWDC2010的GLVideoFrame樣品可以在這裏下載:http://bit.ly/cEf0rMAVFoundation:視頻到OpenGL紋理工作 - 如何播放和同步音頻?

如何播放音頻軌的電影同步到視頻。我認爲在單獨的播放器中播放它不是一個好主意,但要使用相同的AVAsset的音軌。

AVAssetTrack* audioTrack = [[asset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0]; 

我檢索videoframe並通過

CMSampleBufferRef sampleBuffer = [self.readerOutput copyNextSampleBuffer]; 
CMTime timestamp = CMSampleBufferGetPresentationTimeStamp(sampleBuffer); 

的時間戳在CADisplayLink回調,其中readerOutput類型爲AVAssetReaderTrackOutput*

如何獲得相應的音頻樣本的? 以及如何發揮他們?


編輯:

我四處張望了一下,我認爲,最好是使用這裏介紹的方法使用AudioQueue從AudioToolbox.framework:AVAssetReader and Audio Queue streaming problem

還有一個AVFoundation中的音頻播放器:AVAudioPlayer。但我不知道我應該如何將數據傳遞給initWithData - 初始化程序,它需要NSData。此外,我不認爲這是我的情況的最佳選擇,因爲我知道每個新音頻樣本都需要創建一個新的AVAudioPlayer - 實例。

其他建議? 播放從AVAssetReaderTrackOutput得到的原始音頻樣本的最佳方式是什麼?

+0

你有沒有得到過這個地方? – RyanSullivan

+0

我的解決方案是用AVAssetReader打開電影來抓取OpenGL的幀,同時用AVAudioPlayer再次打開同一個電影文件,並讓它們同時啓動。這不是一個好的解決方案,但音頻和視頻非常同步。從那時起,我沒有時間去尋找更好的解決方案。 – j00hi

+0

我也在使用AVAudioPlayer,但音頻同步不是很好。有一個真正的解決方案會更好。 –

回答