我能夠解碼mp4視頻。如果我使用Surface
配置解碼器,我可以在屏幕上看到視頻。現在,我想編輯框架(添加一條黃線,甚至更好地重疊一個小圖像),並將視頻編碼爲新視頻。沒有必要顯示視頻,我現在也不關心它的性能(如果我在編輯時顯示幀,如果編輯功能需要很長時間,我可能會有差距),那麼,您建議我用glSurface配置解碼器,然後使用OpenGl
(GLES),或者將它配置爲null,並以某種方式將Bytebuffer
轉換爲Bitmap
,修改它,並將位圖編碼爲字節數組?我還在Grafika頁面看到,您使用自定義Rederer的Surface
,並使用OpenGl
(GLES)。謝謝使用MediaCodec編輯幀和編碼
回答
您將不得不使用OpenGLES
。 ByteBuffer/Bitmap方法不能提供真實的性能/功能。
現在你已經能夠(使用MediaExtractor和編解碼器)視頻解碼爲Surface
,你需要使用用於創建表面的External Texture
和渲染使用GLES從MediaCodec
檢索另一個Surface
配置SurfaceTexture
作爲編碼器。
雖然Grafika
沒有一個完全相似的完整的項目,你可以用你現有的項目啓動,然後嘗試使用以下子項目的grafika Continuous Camera或Show + capture camera,目前呈現Camera
幀(輸送到表面紋理)到一個視頻(和顯示器)。 因此,本質上,唯一的變化是MediaCodec
餵養框到SurfaceTexture
而不是Camera
。
谷歌CTS DecodeEditEncodeTest完全相同,可以作爲參考,以使學習曲線更平滑。
使用這種方法,您當然可以做各種各樣的事情,如操縱視頻的播放速度(快進和慢放),在場景中添加各種疊加層,使用視頻中的顏色/像素進行播放着色器等。
結帳過濾器在Show + capture camera爲了說明相同。
解碼 - 編輯編碼流
當使用OpenGLES,幀的「編輯」經由使用GLES到編碼器的輸入面繪製發生。
如果在不同的線程中分離出解碼和渲染+編碼,那麼除非在兩個線程之間實現某種同步以保持解碼器等待渲染+編碼,否則必然會在每幀中跳過幾幀該框架發生在另一個線程上。
雖然現代硬件編解碼器支持同步視頻編碼和解碼,但我建議,do the decoding, rendering and encoding in the same thread
,尤其是在您的情況下,當時性能不是一個主要問題。這將有助於避免必須處理自己的和/或跳轉幀的同步問題。
- 1. android mediacodec編碼丟幀
- 2. 使用MediaCodec API編輯MP4元數據
- 3. MediaCodec編碼數據太大
- 4. Android MediaCodec AAC編碼器
- 5. 使用MediaCodec和MTK編解碼器編碼時選擇H264配置文件
- 6. 編輯視頻幀
- 7. 使用java編輯xml聲明編碼
- 8. 使用javascript編輯base64編碼圖像
- 9. 確實的Android MediaCodec支持RGBA編碼
- 10. 熊貓,編輯數據幀
- 11. GWT編輯和副編輯
- 12. 編輯和使用jquery
- 13. 編輯和使用laravel
- 14. 使用ffmpeg編碼原始nv12幀
- 15. 如何正確使用ImageReader與YUV_420_888和MediaCodec將視頻編碼爲h264格式?
- 16. IFrame編輯器IE編碼
- 17. 通過編碼編輯MailItem.RTFBody
- 18. 無法使用MediaCodec將解碼器輸出饋送到編碼器輸入
- 19. 使用VisualStudio 2010編輯InfoPath C#代碼
- 20. 使用Excel VBA編輯HTML代碼
- 21. 如何在使用MediaCodec和InputSurface進行錄製時丟棄幀?
- 22. WPF編輯掩碼
- 23. PHP編碼邏輯
- 24. Java代碼編輯
- 25. dm365 mpeg4編碼器P幀
- 26. 編輯使用jQuery
- 27. 使用RIDE編輯
- 28. 編輯使用PHP
- 29. 使用Coda編輯
- 30. 編輯和編譯install_name_tool
謝謝!我以前看過這些例子,我想我應該實現SurfaceTexture.OnFrameAvailableListener,但是如果我的frame-Edit函數花費很多時間,恐怕會丟失一些幀。正如我所問,我的想法是像批處理一樣執行,而不是顯示我正在解碼的內容 - 編輯 - 編碼。我想在同一個線程中進行解碼和編碼後進行編輯,而不是像捕捉相機那樣捕獲幀。 –
請檢查更新後的答案。我在解碼 - 編輯 - 編碼流程中增加了一些細節。 –