http://blog.csdn.net/a992036795/article/details/54020491
一、目的
在Android上使用FFmpeg將攝像頭采集的YUV裸流編碼為h264。
二、環境准備
1、使用FFmpeg動態庫(這個動態庫需要有libx264的實現,否則可能會出現尋找編碼器失敗異常)。關於如何獲得這樣的一個動態庫可以參考http://blog.csdn.net/a992036795/article/details/53941436
2、android開發環境(我用的是Android Studio2.2.3) 和最新的ndk。
三、思路
1、初始化ffmpeg的一些配置。
2、調用系統攝像頭設置參數使用mCamera.setPreviewCallbackWithBuffer();設置回調接口用來接受YUV數據。
3、將攝像頭獲得的YUV數據(默認是NV21)轉化成YUV420P格式
3、將獲得的修改后的數據傳給編碼器,進行編碼
4、輸出
四、流程
這里寫圖片描述
流程基本分三大步
1、初始化(包括打開輸出文件,設置參數,尋找編碼器、寫入頭信息等。)
2、實時傳入數據進行編碼
3、刷幀,並寫入尾部信息。釋放資源
我用三個jni方法分別對應這三步:
/**
* 初始化。
*
* @param destUrl 目標url
* @param w 寬
* @param h 高
* @return 結果
*/
public static native int init(String destUrl, int w, int h);
/**
* 傳入數據。
*
* @param bytes
* @param w
* @param h
* @return
*/
public static native int push(byte[] bytes,int w,int h);
/**
* 停止
* @return
*/
public static native int stop();
五、代碼
參考原作者。