[英]Audio Sync problems using DirectShow.NET
我在DirectShow.NET的論壇上開始了一個帖子,這里是鏈接http://sourceforge.net/projects/directshownet/forums/forum/460697/topic/5194414/index/page/1但不幸的是問題仍然存在...
我有一個應用程序捕獲來自網絡攝像頭的視頻和來自麥克風的音頻並將其保存到文件中,由於某種原因,音頻和視頻從不同步,我嘗試了以下內容:1。開始使用ffdshow編碼器並更改為AVI Mux - 問題仍然存在,音頻延遲,在視頻結束時圖像保持凍結,音頻繼續2.從AVI Mux更改為WM ASF Writer - 視頻在開始時凍結(2秒),其余視頻在-sync(但前兩個秒不可用)3。創建SampleGrabber,打印音頻和視頻的時間戳 - 看到音頻時間戳早於500毫秒,但我不知道如何處理這個事實...... 4。嘗試手動將ReferenceClock設置為其中一個捕獲過濾器(音頻/視頻),但兩者都不會轉換為IReferenceClock 5.創建一個SystemClock並設置它具有ReferenceClock - 沒有區別6.在grap上設置SyncUsingStreamOffset(true) - 時間戳現在更近了,但最終的結果是 同樣7.嘗試將音頻和視頻保存到兩個不同的文件,並使用VirtualDub查看它們是否匹配,但它們仍然不...
哦,我忘了提到我也嘗試在GraphEditPlus中構建圖形,但問題仍然存在,這里是圖表的鏈接: http : //www2.picturepush.com/photo/a/8030745/img/8030745.png
目前,我正在測試來自DirectShow.NET樣本的CapWMV樣本的所有更改。
請高度贊賞任何建議,我沒有希望:/
謝謝,
伊蘭。
更新:
似乎音頻和視頻之間有500毫秒不等的差距,如果我使用virtualDub將音頻延遲500毫秒它看起來很好,怎么能在圖中設置它?
您在音頻流上的延遲等於捕獲緩沖區的大小。 也就是說,您獲得了0.5秒后開始捕獲的完整緩沖區。 您需要使用較小的緩沖區和/或在緩沖區上應用偏移量來調整延遲。
看到:
IAMBufferNegotiation
是關鍵字。
只是想為我的情況添加解決方案,也許它會幫助某人。
我試圖將來自網絡攝像頭的視頻與來自麥克風的音頻一起錄制,視頻是HD(1080p),因此我想保存以MPEG4編碼的AVI文件,因此我使用了ffshow-tryous(免費的Mpeg4編碼器)和Avi Mux過濾,問題是我的視頻中的一些(其中大部分:))都有同步問題。
我發現Avi Mux不處理同步,它假設數據在適當的時間到達(這里寫的 - http://msdn.microsoft.com/en-us/library/dd407208(v=vs.85)。 aspx ),所以我嘗試使用WMAsfWriter來處理同步並且工作正常(我上面提到的2秒凍結只是VLC播放器的一個小問題)但它在高分辨率下效果不好而且我在使用自定義時遇到了麻煩配置文件(過濾器不會連接)。
我也嘗試過羅曼的建議,雖然鏈接非常有趣和有前途(我真的建議閱讀它們 - 不能給帖子+1但是......)它沒有任何區別:/
我的最終解決方案是放棄使用MPEG4,只使用MPEG2,我從Avi Mux切換到微軟MPEG2編碼器,效果很好,應該考慮很久以前:)
希望這會幫助別人。
謝謝,
伊蘭。
我有同樣的問題,使用Xvid MPEG-4解碼器將視頻從WMV渲染到AVI。
我沒有放棄MPEG-4的最終解決方案是配置AviMuxer設置ConfigAviMux :: SetMasterStream屬性
如從MSDN配置中捕獲視頻到AVI文件中所述:
如果要從兩個獨立的設備捕獲音頻和視頻, 最好將音頻流作為主流 。 這有助於防止兩個流之間的漂移,因為AVI Mux濾波器調整視頻流上的回放速率以匹配音頻流。
示例代碼:
IConfigAviMux _filterAVIMuxerCfg = (IConfigAviMux)_filterAVIMuxer;
_filterAVIMuxerCfg.SetMasterStream(0); // I've add first audio ;)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.