2016-09-30 27 views
0

目前我正在試圖連接多個視頻文件在一起,要做到這一點最簡單的方法是使用MP4Parser。但是,使用MP4Parser必須使視頻具有相同的尺寸和幀率,因爲它僅處理容器。 fadden曾表示MP4支持可變幀頻視頻,MediaCodec可以生成這些視頻,所以我正在考慮使用MediaCodec套件來完成此任務。通過追加多MediaCodec視頻 - 關於多MediaExtractors和解碼器只是一個編碼器

假設我有3個視頻來連接,我想爲MediaExtractorsMediaCodec解碼器,每一個視頻和一個MediaCodec編碼器將會把解碼緩衝到最終的視頻文件3個實例。

提取器和解碼器將被單獨運行一前一後,他們會被饋送到相同的編碼器。但是,我關心編碼器的EOS信號標誌。

我可以保持所述信號旗關閉,直到第三解碼器的成品?我是否也應該使用循環緩衝區執行此任務?

回答

0

是的,你可以發送你想EOS信號旗隨時隨地,只要你不後發送一個新的幀的編碼器。事實上,你不應該發送EOS標誌,如果你仍然想養活更多的視頻幀

幾件事,你可能想知道:

  1. 它是安全鬆開後的第一個配置第二解碼器, 某些設備可能不允許您分配多個解碼器,尤其是在解碼高分辨率視頻時。

  2. 你應該到演示文稿時增加偏置第二和第三視頻(顯然)

  3. 是,MediaCodec支持變幀率,但我不知道它是否支持可變尺寸。您可能需要自己做一些調整大小或裁剪(通過openGL渲染)

+0

如何在開始時生成所有必需的「MediaExtractor」和解碼器「MediaCodec」對?例如,如果我必須連接4個視頻,我會爲每個視頻生成4個MediaExtractor和MediaCodec,每個視頻一對,使它們將緩衝區推入單個編碼器MediaCodec,然後依次運行。如果我走這條路線,是否會出現OutOfMemory異常等副作用? – Gensoukyou1337

+0

正如我所說的,您可能會因爲一次使用太多的MediaCodec解碼器實例而陷入麻煩,此外,您只能在完成從第一個視頻輸入幀後才能從第二個視頻中提供幀(您提供給幀的順序編碼器應該按照您希望它們出現在結果視頻中的順序)。或者是否有這樣做的好處? – jfawkes

+0

我的確如你所說,使用Extractor-Decoder對將視頻幀饋送到編碼器,然後在第一個視頻結束時迭代到下一個視頻。 mstorsjo表示,一次運行多個解碼器實例可能會有好處(例如,當您想在最終輸出中並排顯示兩個視頻時),但代碼會稍微複雜一些。 – Gensoukyou1337