Android自定义照相机录制视频

Android端视频的录制:
1.自定义Camera和MediaRecorder录制视频和拍摄照片,基本功能都能实现,但是也存在一定的问题。
 a.后置摄像头拍摄完成后照片自动旋转90度或者270度
 b.如果涉及到从图库中选择照片,有的手机也会涉及到照片自动旋转的问题(和Camera以及MediaRecorder无关,和照片本身的角度有关)
 c.前置摄像头拍摄的和视频照片和你拍摄时看到的照片和视频成镜面对称。

2.利用Camera.PreviewCallback接口的回调方法拿到视频元数据--一张张NV21格式的图像元素,然后经过处理获取想要的视频。
完整的流程:
 a.同时开始视频和音频的录制(AudioRecord录制音频,PreviewCallback接口回调的byte[]数据就是一帧帧的图像数据)
 b.音频编码:因为AudioRecord录制的是PCM数据,需要处理,编码成AAC音频文件
 c.视频编码:将NV21图像数据经过一系列处理(包括图像数据的旋转,镜像、以及NV21、I420、NV12图像数据的变化)变成最终的NV12,然后进行编码,将图像数据转化为H264的初始视频文件。
 d.纯视频文件H264和音频文件AAC的合成,生成最终的视频文件。
不管你采用那种方式进行录制都要经过以上几个步骤。

网上的录制和编码方式有很多种,例如利用ffmpeg进行视频和音频的编码和合成;也有利用MediaCodec进行硬编实现音视频的编码,利用ffmpeg进行合成;当然也有利用MediaCodec进行硬编,利用MP4Coder进行音视频的合成,方式可供选择,个人建议使用第三种。但是NV21图像数据的处理,一般都比较统一,就是利用libyuv库进行处理,因为这个库处理NV21数据比较快。当然你也可以自己写相关的转化方式,不过你首先得熟悉NV21、I420、NV12图像数据的格式以及这些格式图像数据的旋转和镜像翻转以及相互转化。

猜你喜欢

转载自blog.csdn.net/qq_35920289/article/details/108365122