Android視頻編碼器(1)——CameraYUV送給ffmpeg進行軟編碼,保存為h264


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();

五、代碼

參考原作者。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM