Android视频录制从不入门到入门系列教程(二)————显示视频图像
2016-06-04 22:39
756 查看
1、创建一个空的工程,注意声明下列权限:
2、布局文件
很简单,就放了一个SurfaceView用来显示视频图像。
3、初始化摄像头
通过Camera的open方法开启摄像头,open方法还有一个重载方法,主要用于告诉系统我要打开哪个摄像头,现在手机一般都是两个摄像头以上。默认打开的是后置摄像头。
4、释放摄像头
上面是几个比较重要的方法,下面是整个Activity的代码:
值得一提的是,需要在SurfaceViewHolder创建之后,才能调用Camera的startPreview方法,否则视频图像是不会显示到SurfaceView中去的。
本篇文章DEMO下载。
<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下载。
相关文章推荐
- Android视频录制从不入门到入门系列教程(一)————简介
- 【Android框架】深入浅出理解DiskLruCache(下)
- Android_Activity(一)
- 欢迎使用CSDN-markdown编辑器
- android 屏幕适配
- android studio 遇到问题i
- Android Studio中如何编写JNI代码及编译so库
- Android中的Service:默默的奉献者 (1)
- Android Studio1.5使用和学习记录
- 在mac osx 下使用 Jenkins对Android 进行持续集成
- android屏幕适配
- In android studio,cannot load 2 facets-unknown facet type:android and android-gradle
- Android静态安全检测 -> allowBackup标志位
- Java注解在Android中使用
- 关于EventBus的基本应用(基于v3.0)
- 使用RxJava和RxAndroid封装RxBus,实现EventBus功能
- Android系统ViewGroup事件分发
- android清除应用缓存数据
- Android 基础总结:( 十六)Android Thread
- FlowingDrawer 一个bug的解决