2015-04-30 31 views
1

我正在開發基於媒體基礎的h264播放器,以播放來自我自己的自定義媒體源的h264視頻和HE-AAC音頻。MF不播放來自我的源視頻

我的原型不播放視頻,只播放音頻。 如何解決這個問題?

這是問題所在。我打開我的網址。

該框架創建並初始化我的媒體源,該媒體源依次創建並初始化我的2個音頻和視頻流。

然後它要求視頻樣本,直到文件結束。 日誌充滿CMFTransformDetours :: ProcessOutput失敗hr = 0xC00D6D72 MF_E_TRANSFORM_NEED_MORE_INPUT

然後我的視頻流發送MEEndOfStream後,該框架要求提供一些更多的音頻採樣,最後過渡狀態,以播放,並開始僅播放音頻。

框架試圖在我的視頻流中找到不存在的內容?

如果由內置流源打開,相同的文件可以通過相同的播放器代碼進行播放。 mftrace.exe表示當內置流源播放文件時,第一個視頻示例比我的流源播放時長38個字節(所有其他示例長度完全相同)。 38字節與我的視頻MF_MT_MPEG_SEQUENCE_HEADER(即00 00 01 + SPS + 00 00 01 + PPS)的大小完全相同。我試圖將MF_MT_MPEG_SEQUENCE_HEADER值添加到我的第一幀,但沒有幫助。

系統提供的流源在視頻樣本GUID = {19124E7C-AD4B-465F-BB18-20186287B6AF}上設置未公開的屬性,值爲8個字節的二進制值,如「09 00 00 00 29 0d 00 00」,以及改變每一幀 - 這是什麼原因?

我還能試試嗎?

有沒有關於MF h264解碼器想要輸入什麼的任何文檔?

在此先感謝。

+0

不確定是否有幫助,但序列和圖片參數集通常有4個字節的起始代碼(00 00 00 01)。可能是解碼器正在尋找。 – Ralf

回答

1

我的代碼有兩個主要問題。

  1. 我流源沒有輸出,GUID這些屬性= {19124E7C-AD4B-465F-BB18-20186287B6AF} 屬性被記錄在案,只是MFTrace.exe測井儀器不知道它就會輸出GUID而不是名稱。 GUID代表MF_NALU_LENGTH_INFORMATION attruibute。

我的視頻流描述符有MF_NALU_LENGTH_SET屬性設置爲TRUE。這就是爲什麼h264解碼器跳過了我所有的視頻樣本 - 它尋找MF_NALU_LENGTH_INFORMATION屬性,並且它不在那裏。

簡單的修復方法 - 從描述符中移除MF_NALU_LENGTH_SET,解碼器沒有這些數據就可以。

  1. 對於這個原型,我從.mp4容器中讀取視頻樣本。容器中的NALU以字節長度開頭。 MS解碼器要求在NALU之前有開始碼「00 00 00 01」。 See this SO answer瞭解更多關於這方面的信息。在我送入解碼器的樣本中,我必須用「00 00 00 01」替換NALU長度。