2012-10-03 67 views
1

我正在從一些項目中接收一些輸入視頻設備的原始幀。我正在嘗試使用FFMPEG庫在視頻文件中編寫這些幀。 我無法控制從輸入源獲得的幀速率。此幀速率也隨運行時間而變化。 現在我的問題是如何在錄製的視頻和即將播放的視頻之間進行同步。根據我在FFMPEG中設置的幀速率和實際幀速率,我接收到的錄製視頻的播放速度可能比輸入視頻快或慢。 我試圖按照以下鏈接 在編碼視頻中添加時間戳(作爲numOfFrames),但這沒有幫助。如何同步錄製和輸入實況視頻流?

ffmpeg speed encoding problem

請告訴我一個方法來同步兩種。這是我第一次使用FFMPEG或任何多媒體庫,因此任何示例都將受到高度讚賞。

我正在使用directshow ISampleGrabber接口來捕獲這些幀。 謝謝

+0

你有每一幀的時間戳,還有什麼你需要 –

+0

我很抱歉,我沒有得到你。我正在爲此進行第一次。我在哪裏在每個框架上有時間戳?你指的是ISampleGrabber輸出嗎? –

+0

你有'ISampleGrabber :: SampleCB'的框架。每個媒體樣本都有一個附加的時間戳IMediaSample :: GetTime(它是可選的,但它幾乎總是存在的,或者它是一個實時饋送)。 –

回答

0

所以最後我想出瞭如何做到這一點。這是怎麼..

首先,我從源過濾器的PREVIEW引腳預覽,不給時間戳幀。所以應該從源濾波器的捕獲引腳獲取幀。在SampleCB回調函數中,我們不能使用IMediaSample::GetTime()獲得時間。但是這個函數會以100ns爲單位返回時間。 FFMPEG需要以1/time_base爲單位。這裏time_base是期望的幀速率。 所以directshow時間戳首先需要在FFMPEG單元中進行轉換。我們可以在AVFrame::pts中設置ffmpeg的變量。還有一件需要考慮的事情是視頻的第一幀在FFMPEG中具有0的時間戳,以便在從directshow時間戳轉換爲FFMPEG時需要照顧。

謝謝

相關問題