2012-04-29 86 views
2

我有一個應用程序,它使用x264 x264_encoder_encode實時發送從編碼中生成的原始h264 NALU。我通過普通的TCP獲取它們,所以我不會丟失任何幀。 我需要能夠在Windows(DXVA2)中使用硬件加速在客戶端解碼這樣的流。我一直在努力尋找一種方法來使用FFMPEG來實現它。試試Media Foundation或DirectShow可能會更容易,但他們不會採用原始​​的H264。 我要麼需要:將原始H264 NALU流包裝成類似MP4的容器

  1. 改變來自服務器應用程序的代碼給回的MP4流。我對x264沒有那種經驗。我可以通過調用x264_encoder_encode得到原H264,通過遵循這個問題的答案:How does one encode a series of images into H264 using the x264 C API?如何從這個去的東西,被包裹在MP4,同時仍然能夠以流其在實時

  2. 我可以在接收器用mp4標頭包裝它,並將它饋送到可以使用DXVA播放的東西。我不知道如何去做

  3. 我可以找到另一種方法來使用帶有FFMPEG或其他原始格式的DXVA加速它。

一個重要的限制是,我需要能夠顯示它之前預先處理每個解碼幀。任何沒有在一個單一的步驟解碼並顯示解決方案是行不通的,我

我會被罰款與任何一個解決方案

+1

'DXVA'的美麗和速度基本上假定視頻呈現給用戶,而不是從視頻內存回讀到RAM中。準備好從視頻內存中讀取數據可能會出現意想不到的速度,並且爲演示之外的目的而消除快速硬件輔助解碼的全部想法。 – 2012-05-01 12:05:06

+0

是啊......我想我現在就想接受這個事實。無論如何在DXVA的某個階段預處理幀。也許寫一個媒體基礎過濾器或類似的東西? – cloudraven 2012-05-02 23:07:23

回答

2

我相信你應該能夠使用H.264包了與媒體基金會的電線。本書http://www.docstoc.com/docs/109589628/Developing-Microsoft-Media-Foundation-Applications#的第298頁上有一個示例,它在Media Foundation中使用HTTP流。

我只學習媒體基金會自己,我試圖做類似的事情給你,在我的情況下,我想使用H.264有效載荷從一個RTP數據包,並從我的理解,這將需要定製IMFSourceReader。訪問解碼幀也應該可以從我讀過的內容中看到,因爲在將組件鏈接到拓撲中似乎具有完全的靈活性。

+0

感謝您的鏈接。那本書很不錯。我非常確定,如果我建立媒體基礎改造,我將能夠做我想做的事。我還沒有完成,但看起來很有希望 – cloudraven 2012-06-02 01:14:26