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();
五、代码
参考原作者。