簡體   English   中英

如何在Android上將相機幀編碼為mp4

[英]How to encode camera frames into mp4 on android

我從640x480的 Android相機中取出相機預覽幀(對我來說足夠了)並對它們進行一些修改。 但現在我需要將它們編碼為新的MP4文件(帶音頻)。

這有些可能嗎? 我不能使用ffmpeg因為它沒有那么好的許可證,但是我發現了Stagefright框架應該可以做到這一點。 但我沒有找到任何官方文檔或教程來做我需要做的事情。

有沒有辦法用這個框架來做呢? 我不需要代碼,只要指出正確的方向,我會很高興。

有一種情況可以實現所描述的用例。 考慮將Camera輸出饋送到OpenGL庫的情況,其中一些效果應用於需要記錄的預覽幀。

那么在這種情況下,您可以使用傳統的MediaRecorderGrallocSource而不是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.

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