主要用的安卓类有MediaCodec和MediaMuxer,MediaCodec负责视频数据编解码,MediaMuxer负责将编码后的数据封装成MP4文件,采集摄像头用的是camera,并且用surfaceview进行预览
1、初始化surfaceview与camera,预览摄像头的画面
private void initSurfaceHolder() {
surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder holder) {
initCamera();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
mCamera.startPreview();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
destroyCamera();
}
});
}
在surfaceview surfaceCreated中初始化摄像机配置。
private void initCamera() {
mCamera = Camera.open(1);
mCamera.setPreviewCallback(this);
mCamera.setDisplayOrientation(90);
if (parameters == null) {
parameters = mCamera.getParameters();
}
parameters.setPreviewFormat(ImageFormat.NV21);
parameters.setPreviewSize(1280, 720)
Android 摄像头画面采集与MP4编码

本文介绍了如何在Android中使用MediaCodec和MediaMuxer从摄像头采集画面并生成MP4文件。首先,通过初始化SurfaceView和Camera进行摄像头预览,然后在onPreviewFrame回调中获取YUV数据。接着,使用MediaCodec进行视频编码,调整YUV数据格式为NV12以适应编码器需求。最后,通过MediaMuxer将编码后的数据封装成MP4文件。代码实现过程中需注意时间戳设置、MediaMuxer的addTrack调用时机以及输出缓冲区的释放。
最低0.47元/天 解锁文章
1122

被折叠的 条评论
为什么被折叠?



