Android音视频开发:使用Camera API采集视频数据
Posted 学杰杰杰杰.
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android音视频开发:使用Camera API采集视频数据相关的知识,希望对你有一定的参考价值。
本文主要讲的是:使用Camera API采集视频数据并保存到文件,分别使用SurfaceView、TextureView来预览Camera数据,取到NV21的数据回调。
需要添加权限:
<uses-permission android:name="android.permission.CAMERA"/>
一. 预览Camera数据
1.1 使用SurfaceView预览
SurfaceView surfaceView;
Camera camera;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
surfaceView = (SurfaceView)findViewById(R.id.surface_view);
surfaceView.getHolder().addCallback(this);
//打开摄像头并将展示方向旋转90度
camera = Camera.open();
camera.setDisplayOrientation(90);
}
//------------ Surface 预览 ----------
@Override
public void surfaceCreated(SurfaceHolder surfaceHolder){
try{
camera.setPreviewDisplay(surfaceHolder);
camera.startPreview();
}catch(IOException e){
e.printStackTrace();
}
}
@Override
public void surfaceChanged(SurfaceHolder surfaceHolder,int format,int w,int h){
}
@Override
public void surfaceDestroyed(SurfaceHolder surfaceHolder){
camera.release();
}
1.2 使用TextureView预览
TextureView textureView;
Camera camera;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textureView = (TextureView) findViewById(R.id.texture_view);
textureView.setSurfaceTextureListener(this);
//打开摄像头并将展示方向旋转90度
camera = Camera.open();
camera.setDisplayOrientation(90);
}
//------------ Texture 预览 ----------
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture,int i,int i1){
try{
camera.setPreviewTexture(surfaceTexture);
camera.startPreview();
}catch(IOException e){
e.printStackTrace();
}
}
@Override
public void onSurfaceTextureSizeChanged(SurfaceTexture surfaceTexture, int i, int i1) {
}
@Override
public boolean onSurfaceTextureDestroyed(SurfaceTexture surfaceTexture) {
camera.release();
return false;
}
@Override
public void onSurfaceTextureUpdated(SurfaceTexture surfaceTexture) {
}
二. 取回NV21的数据回调
Android中Google支持的Camera Preview Callback的YUV常用格式有两种:一个是NV21,一个是YV12。Android一般默认使用YCbCr_420_SP的格式(NV21)。
我们可以配置数据回调的格式:
Camera.Parameters parameters = camera.getParameters();
parameters.setPreviewFormat(ImageFormat.NV21);
camera.setParameters(parameters);
通过setPreviewCallback方法监听预览的回调:
camera.setPreviewCallback(new Camera.PreviewCallback(){
@Override
public void onPreviewFrame(byte[] bytes,Camera camera){
}
});
这里面的Bytes的数据就是NV21格式的数据。
以上是关于Android音视频开发:使用Camera API采集视频数据的主要内容,如果未能解决你的问题,请参考以下文章
Android音视频开发:MediaRecorder录制视频