2012-11-12 33 views
0

我很高興地提高我的C++程序,我通過directshow閱讀視頻。現在我試着寫也很好的視頻。
然後來了一個適當的編解碼器(關於VOB/ogg)的搜索...
但是,突然間,今天突然顯示的視頻顯示緩慢。
現在,我卸載了之前安裝的任何其他編解碼器,視頻根本無法播放。
原因似乎是CComQIPtr< IMediaSeeking, &IID_IMediaSeeking > pSeeking(pGraph);hr = pSeeking->SetPositions(&Startzeit, AM_SEEKING_AbsolutePositioning,NULL, AM_SEEKING_NoPositioning);提供了一個錯誤,當時不支持SetPosition ...在任何時候都很支持。
hr=pSeeking->GetDuration(&duration)返回0和相應的AM_MEDIA_TYPE mt;我用來獲取framepersecond有一個空格式類型。 (pbFormat是Null)。

我無意中安裝/卸載了一些重要的東西嗎?
你有沒有聽說過類似的問題?
正如我所說,前幾天相同的視頻和源代碼工作正常(我現在改變了評論)。
我想給你更多的源代碼,但它有點長,但如果你認爲這會有所幫助,我當然會添加它。

問候,
朱利安

這裏是源代碼:http://pastebin.com/jMdWejH9
這當然只是整個代碼的一部分,但我認爲這是主要的一部分,這裏有插入所有過濾器。
請記住,這實際上工作,直到前幾天的!^^
第一部分是可變deklaration(所有重要變量FAS我所知道的,第二個是調用的函數)編解碼器的變化導致IMediaSeeking失敗setPosition

+0

你如何建立你的圖?在[運行對象表](http://msdn.microsoft.com/en-us/library/windows/desktop/dd390650(v = vs.85).aspx)中註冊圖形並使用GraphEdit或[ GraphStudioNext](http://code.google.com/p/graph-studio-next/)來查看加載的過濾器。 – CPlusSharp

+0

可能是錯誤的/缺少解複用器/解析器。 – wimh

+0

如果您的播放方式出現意外和/或出現問題,首先要檢查的是圖形的有效拓撲。看到意想不到的過濾器就會明白出了什麼問題。否則,你可以在這裏發佈。 –

回答

1

如果您在DirectShow中渲染文件,該框架使用系統中安裝的編解碼器/過濾器。如果你刪除了一些編解碼器,它會花費另一個或者中斷,因爲它不能渲染。要知道框架使用哪些過濾器,您可以嘗試在GraphEdit或GraphStudioNext中渲染文件。 (只需將這些文件放在這些程序中的一個上,並查看過濾器圖)。對於我們的player,我們獲得了編解碼器包ffdshow-tryoutsHaali Media Splitter的最佳結果。

+0

謝謝!說,你也知道如何解決另一個編解碼器問題嗎?我嘗試使用ffdshow視頻編解碼器(mjpg)和avi_utils庫的AVIStreamWrite函數將視頻保存到另一個程序中。使用Microsoft RLE,Video 1,Intel IYUV,Cinepak和Lagarith編解碼器,一切運行良好。只是用fdshow它告訴我,它有一個地址違規寫入掛起的過程...是否有其他的解碼器/編碼器丟失或不兼容? – Julian

+0

我不是ffdshow的專家,但ffdshow與您提到的其他編解碼器有點不同。 ffdshow內部有一堆不同的編解碼器。您使用ffdshow內的哪些編碼解碼器?也許你應該在ffdshow論壇上提出這個問題或者作爲一個問題。 – CPlusSharp