- Exception e) {
- e.printStackTrace();
- }
- }
- @Override
- public void surfaceDestroyed(SurfaceHolder holder) {
- if(mCamera != null)
- {
- mCamera.release();
- mCamera = null ;
- }
- }
- @Override
- public void onPreviewFrame(byte[] data, Camera camera) {
- // TODO Auto-generated method stub
- //get the prew frame here,the data of default is YUV420_SP
- //you should change YUV420_SP to YUV420_P
- }
- }
复制代码
1. 为了确保在所有的平台上你都能够看到画面,SurfaceCreated() SurfaceChanged() SurfaceDestory()请一定要按照上面的写法写:
SurfaceCreated中注意
mCamera.setPreviewDisplay(mHolder);//此代码必须添加视频才会显示出来
mCamera.setPreviewCallback(this);//设置预览帧的接口,就是通过这个接口,我们来获得预览帧的数据的
2.图像是倒的如何解决?
//and set the preview to landscape mode.
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
在SetContentView之前调用此代码,理由大家自己看API文档,解释的麻烦.
3.public void onPreviewFrame(byte[] data, Camera camera)
该接口为获取视频预览帧的接口,传递进来的data,默认是YUV420SP的,H264编码的源默认是YUV420的,将他们转换一下再编码图像就正常了;
转换函数:
- private byte[] changeYUV420SP2P(byte[]data,int length){
- int width = 176;
- int height = 144;
- byte[] str = new byte[length];
- System.arraycopy(data, 0, str, 0,width*height);
- int strIndex = width*height;
- for(int i = width*height+1; i < length ;i+=2)
- {
- str[strIndex++] = data[i];
- }
- for(int i = width*height;i<length;i+=2)
- {
- str[strIndex++] = data[i];
- }
- return str;
- }
复制代码
4.编解码库
关于Android的编解码库因为涉及到公司的版权问题,请大家原谅我无法给出库了,不过这些都是从X264中提取出来的,是在Windows主机上搭建了一个linux的虚拟机,然后在linux虚拟机下编写的NDK开源库,X264这块因为最近一直在弄Sipdroid的代码,暂时还无法腾出精力来管理
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。