2012-01-16 60 views
1

一些背景DirectShow過濾器圖結果使用Async_reader和波分析器:在視頻尋求問題

我試圖創建一個基於從DirectShow的SDK中的pushsource例如一個DirectShow源過濾器。這基本上輸出一組位圖,每個位圖可以持續很長時間(例如30秒)。我已經設置了一個過濾器圖形,它使用AsyncReader和一個Wave Parser作爲音頻,我的新過濾器用於推送視頻(過濾器是一個CSourceStream,並且我在FillBuffer函數中填充框架)。這些都連接到WMASFWriter輸出WMV。

問題:

當我試圖通過所產生的視頻去追求,我要等到其顯示之前發生了位圖的開始時間。例如,如果我當前正在看到位圖4並跳回到顯示位圖2的時間,則在第三個位圖開始之前,視頻輸出不會改變。最初我想知道我是否不允許FillBuffer被調用到足夠的程度(因爲目前它只有每個位圖一次),但是我已經注意到,當音軌非常短(也許只有一秒)時,我可以通過視頻如預期。是否有另一種方法可以將音頻引入過濾器圖形中?當WMV被渲染時,我是否需要執行某種索引?我有點不知所措......

+0

也就是說,你可以獲得一個精心打造的WMV文件(無需搜索回放),然後用*尋找來播放*尋求引入問題? – 2012-01-16 17:11:37

+0

是的,WMV播放良好,但只要我試圖尋找就是當我遇到問題時。一旦下一幀的時間在我尋求發生的地方,視頻的播放就會正常恢復(音頻總是正確地尋找)。 – Andrew 2012-01-16 22:03:56

回答

1

您可能需要將索引編制爲後處理步驟。嘗試使用Windows Media Encoder SDK中的Windows Media文件編輯器對其進行索引,然後查看這是否改善了搜索。

減少編碼器配置文件中的關鍵幀間隔可以改善搜索。這可以在SDK中的Windows Media Profile Editor中完成。請注意,這會導致文件大小增加。

+0

我試過索引,這似乎沒有任何區別。我已經使用ASF查看器對照正在運行的WMV(我使用相同的代碼輸出,生成的幀序列以50fps運行)檢查了該文件。我也嘗試過輸出更多的樣本(即重複使用同一幀),但除非幀數正在改變,否則這種方法也不起作用。 – Andrew 2012-01-17 10:25:05

+0

您是否嘗試更改關鍵幀間隔? – 2012-01-19 19:10:14

+0

我剛剛嘗試過(通過在定義的時間間隔將WM_SampleExtensionGUID_OutputCleanPoint屬性設置爲true),並解決了問題。謝謝! – Andrew 2012-01-20 08:40:40