您的位置:首页 > 移动开发 > Android开发

Android视频录制从不入门到入门系列教程(二)————显示视频图像

2016-06-04 22:39 756 查看
1、创建一个空的工程,注意声明下列权限:

<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>


2、布局文件

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<SurfaceView
android:id="@+id/surfaceView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</FrameLayout>


很简单,就放了一个SurfaceView用来显示视频图像。

3、初始化摄像头

private void initCamera()
{
camera = Camera.open();
}


通过Camera的open方法开启摄像头,open方法还有一个重载方法,主要用于告诉系统我要打开哪个摄像头,现在手机一般都是两个摄像头以上。默认打开的是后置摄像头。

4、释放摄像头

private void releaseCamera()
{
if (camera != null)
{
// 释放前先停止预览
camera.setPreviewCallback(null);
camera.stopPreview();
camera.release();
camera = null;
}
}


上面是几个比较重要的方法,下面是整个Activity的代码:

public class MainActivity extends AppCompatActivity
{
private Camera camera;
private SurfaceView surfaceView;

@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

surfaceView = (SurfaceView) findViewById(R.id.surfaceView);
}

@Override
protected void onStart()
{
super.onStart();
initCamera();
surfaceView.getHolder().addCallback(new SurfaceHolder.Callback()
{
@Override
public void surfaceCreated(SurfaceHolder holder)
{
holder.removeCallback(this);
try
{
camera.setPreviewDisplay(holder);
camera.startPreview();
}
catch (IOException e)
{
e.printStackTrace();
}
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height)
{

}

@Override
public void surfaceDestroyed(SurfaceHolder holder)
{

}
});
}

@Override
protected void onStop()
{
super.onStop();
releaseCamera();
}

private void initCamera() { camera = Camera.open(); }

private void releaseCamera() { if (camera != null) { // 释放前先停止预览 camera.setPreviewCallback(null); camera.stopPreview(); camera.release(); camera = null; } }
}


值得一提的是,需要在SurfaceViewHolder创建之后,才能调用Camera的startPreview方法,否则视频图像是不会显示到SurfaceView中去的。

本篇文章DEMO下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: