簡體   English   中英

使用MediaCodec和MediaExtractor解碼和編碼視頻

[英]Use MediaCodec and MediaExtractor to decode and code video

我需要將視頻解碼為一系列位圖,以便我能夠修改它們,然后將它們壓縮回android中的視頻文件。

我計划通過使用getFrameAtTime並將其保存到圖像序列來管理它。 然后我可以修改序列中的圖像並將其編碼回電影。 但我有兩個問題:

  • 首先,在我閱讀它時, getFrameAtTime用於創建縮略圖,並且不保證返回正確的幀。 這使視頻滯后。
  • 其次,保存圖像並將其讀回需要很長時間。

我讀到使用MediaExtractor進行解碼的正確方法,這很好,但我只有示例將它直接渲染到surfaceView 有什么方法可以將outputBuffer轉換為位圖嗎?

我需要它來使用16級及以上的api級別。

您可以在bigflake網站上找到一些有用的示例。

特別是, ExtractMpegFramesTest演示了如何將.mp4文件解碼為BitmapDecodeEditEncodeTest對H.264流進行解碼和重新編碼,使用GLES着色器修改幀。

許多示例使用API​​ 18中引入的功能,例如MediaCodec Surface輸入(避免了許多顏色格式問題)和MediaMuxer (允許您將來自MediaCodec的原始H.264基本流轉換為.mp4文件)。 某些設備允許您將視頻提取到ByteBuffer YUV數據,對其進行修改並對其進行重新編碼,但其他設備會提取為專有的YUV顏色格式,這些格式可能會被API 16版本的MediaCodec拒絕。

我建議編寫API 18(Android 4.3“Jellybean”MR2)或更高版本。

有很多人說從不調用onFrameAvailable()方法。 好吧, 監聽器應該在與主線程不同的線程中。 要設置監聽器,請執行以下操作:(這是實現SurfaceTexture.IOnFrameAvailableListener的類監聽SurfaceTexture.IOnFrameAvailableListener ):

mSurfaceTexture.SetOnFrameAvailableListener(this);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM