我已經成功地將一幀電影的視頻軌道逐幀加載到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
得到的原始音頻樣本的最佳方式是什麼?
你有沒有得到過這個地方? – RyanSullivan
我的解決方案是用AVAssetReader打開電影來抓取OpenGL的幀,同時用AVAudioPlayer再次打開同一個電影文件,並讓它們同時啓動。這不是一個好的解決方案,但音頻和視頻非常同步。從那時起,我沒有時間去尋找更好的解決方案。 – j00hi
我也在使用AVAudioPlayer,但音頻同步不是很好。有一個真正的解決方案會更好。 –