[英]How to encode camera frames into mp4 on android
我從640x480的 Android相機中取出相機預覽幀(對我來說足夠了)並對它們進行一些修改。 但現在我需要將它們編碼為新的MP4
文件(帶音頻)。
這有些可能嗎? 我不能使用ffmpeg
因為它沒有那么好的許可證,但是我發現了Stagefright
框架應該可以做到這一點。 但我沒有找到任何官方文檔或教程來做我需要做的事情。
有沒有辦法用這個框架來做呢? 我不需要代碼,只要指出正確的方向,我會很高興。
有一種情況可以實現所描述的用例。 考慮將Camera
輸出饋送到OpenGL
庫的情況,其中一些效果應用於需要記錄的預覽幀。
那么在這種情況下,您可以使用傳統的MediaRecorder
和GrallocSource
而不是CameraSource
。 設置看起來像這樣:
MediaRecorder
設置與GrallocSource
。 用於記錄的輸入表面由Camera
+ OpenGL
組合操作提供,其實現SurfaceTextureClient
。 在SurfaceMediaSource_test
模塊中可以找到一個很好的例子。
如果你必須支持API 9及更高版本, stagefright是相當不錯的。 但正如你所看到的,這個框架不是正式的。 您可以使用platform / frameworks / av中的示例代碼,風險自負。
谷歌源包括CameraSource,它直接向編碼器提供相機幀。 雖然這種方法可能更有效(像素根本不會復制到用戶空間),但它不允許操作。 可以修改C ++源代碼,但強烈建議您使用Java訪問Camera,並將預覽幀通過JNI傳遞給stagefrght(OpenMAX)編碼器。 在某些設備上,這可能會強制您使用軟件編碼器。 您必須將視頻幀轉換為編碼器的YUV平面格式。 有關優化的轉換器,請參閱libyuv 。
如果您可以限制對API 16及更高版本的支持,則使用官方Java MediaCdec API會更安全。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.