2011-04-18 74 views
0

我在編寫自定義DS源過濾器以播放轉儲到多個文件的TS流時遇到問題。 [編輯:重點從這些單獨的文件重新播放連續流]DirectShow的自定義TS多文件源過濾器

首先,我試着修改異步文件示例:沒有去 - 數據'拉'模型似乎把所有的控制邏輯放在分離器過濾器,所以我不能欺騙它相信我有一個'連續'的流。

因此,然後嘗試修改PushSource桌面示例:它似乎我們必須通過這種方式來照顧MPEG demuxer來創建它的輸出引腳,自己解析數據以獲取ID等。我設法讓GraphStudio自動連接一些東西(使用奇怪的DTV-DVD解碼器),但它不會播放任何東西,儘管源濾波器向下遊推送正確的數據。

有沒有人有這方面的經驗幫助/建議任何東西?

+0

你是什麼意思「控制分離濾波器的邏輯」?爲什麼自己創建多路分離器濾波器的輸出引腳會出現問題? – wimh 2011-04-19 09:57:45

+0

我指的是分離器濾波器控制整個過程中,隨着源濾波器似乎不具有控制(所以我不能僞造的連續流那樣)。 創建引腳並不難,但其他分離器可以自己處理/數據開始流動時動態執行它? 如果我的觀念錯了,請糾正我 - 我是DShow的新手! – MGB 2011-04-19 10:42:01

+0

我創建了一個類似於過濾器的過濾器(但不是從文件中讀取數據),我必須在明天查看細節。但是,如果我記得好,如果你不提供查找接口,它應該被視爲連續流。我知道我需要的音頻和視頻的PID和格式,所以我自己在解複用濾波器上創建輸出引腳。我使用ffdshow來解碼音頻+視頻。在某些情況下,我也使用商業推送解複用器過濾器,但我不知道是否存在免費版本。希望明天有更多的信息。 – wimh 2011-04-19 16:56:01

回答

0

您現在是否找到了解決問題的方法?

我正在寫一個類似的DirectShow過濾器,目前只播放一個文件,但我認爲修改它播放幾個文件應該不成問題。

我構建了從「推送源位圖」過濾器開始的此過濾器,但我必須對其進行很多更改。

我也有使用我寫(所以不使用的GraphEdit)的應用程序來構建曲線圖中,連接「MPEG-2解複用器」到新的過濾器中,添加一個PSI輸出(映射到PID 0 = PAT)和 「MPEG-2節和表篩選」 連接到該PSI輸出。

之後,我使用的「MPEG-2節和表篩選」用於讀取PAT表和PMT 的PID裏面限定。接下來,我也映射所有PMT的PID相同的「MPEG-2節和表過濾」,和我分析的PMT表對於瞭解基本流的PID和媒體類型,接下來我創建了一個視頻輸出和基於這些信息的一個音頻輸出(可能有多個音頻+視頻流,但是在當前步驟中我僅保留第一個)。請注意,這需要以臨時運行部分圖形,以便能夠解析表,之後停止,以能夠創建視頻和音頻輸出引腳(用正確的媒體類型),並連接解碼器和渲染器。

除此之外,我有我你會發現有趣的信息:看來連通時「MPEG-2解複用器」 searchs圖的過濾器暴露了「IBDA_NetworkProvider」界面,如果找到,它使用IBDA_NetworkProvider :: RegisterDeviceFilter方法將自己註冊到它。

我認爲,你可以使用這個檢測「MPEG-2解複用器」過濾器插入圖形(通過暴露「IBDA_NetworkProvider」從你的過濾器接口),並嘗試從做上述操作源過濾器,從而允許使用過濾器內部的GraphEdit,並期望「MPEG-2解複用器」是嬰兒SAT從這個過濾器,而無需擔心圍繞構建應用程序做這些操作。

銀杏

+0

雖然它只是播放前幾秒,但我仍然設法讓一些東西在播放PID之後播放,所以現在看看原因。 這個信息很有趣 - 我會研究它。 – MGB 2011-04-26 10:50:20

+0

當然,我想你可以正確地將PCR時鐘時間戳解析到源TS流中,並使用它們來避免文件播放太快? – GingkoFr 2011-05-01 04:58:59

+0

由於銀杏 - 我MPEG2東西玩好,但肯定的:MPEG4播放愣神快什麼我符合規範的比特率/幀時間(不得不削減從GraphEdit中和粘貼MP4的GUID!)。假設我必須限制按照時間戳推送樣本? 更多內容閱讀..! – MGB 2011-05-03 10:17:03

0

我創建了一個讀取網絡流的TS源過濾器。所以這也是連續的,但是我從文件讀取的不同之處在於,網絡流自動給我提供了正確的速度。所以我認爲你應該能夠使用類似的方法。

我已經根據de dx sdk的FBall示例創建了我的過濾器。

該過濾器派生自CSource,IFileSourceFilter,IAMFilterMiscFlagsISpecifyPropertyPages。輸出引腳來自CSourceStream

如果您在解碼音頻/視頻時遇到問題,可能首先嚐試一個簡單的mpeg-2流,例如來自DVB源。並確保您安裝瞭解碼器,並且它接受該格式。 (例如ffdshow默認關閉mpeg2解碼)。

+0

啊,我看了之前的球樣,但認爲推送源更接近合適。 – MGB 2011-04-26 10:12:19