![](/img/trans.png)
[英]Android MediaCodec & MediaExtractor For video and audio playing
[英]Use MediaCodec and MediaExtractor to decode and code video
我需要將視頻解碼為一系列位圖,以便我能夠修改它們,然后將它們壓縮回android中的視頻文件。
我計划通過使用getFrameAtTime
並將其保存到圖像序列來管理它。 然后我可以修改序列中的圖像並將其編碼回電影。 但我有兩個問題:
getFrameAtTime
用於創建縮略圖,並且不保證返回正確的幀。 這使視頻滯后。 我讀到使用MediaExtractor進行解碼的正確方法,這很好,但我只有示例將它直接渲染到surfaceView
。 有什么方法可以將outputBuffer
轉換為位圖嗎?
我需要它來使用16級及以上的api級別。
您可以在bigflake網站上找到一些有用的示例。
特別是, ExtractMpegFramesTest
演示了如何將.mp4文件解碼為Bitmap
, DecodeEditEncodeTest
對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.