动态网站建设方面的书/seo关键词排名查询
随时随地技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)
MediaRecoder除了用于录制音频之外,还可用于录制视频,其步骤与录制音频基本相同,只是录制视频不仅要采集声音,还要采集图像,需要使用SurfaceView来预览显示图像,下面用一个简单示例来演示,代码如下:
Activity:
package com.home.recordvideo;import java.io.File;import android.app.Activity;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;public class RecordVedioActivity extends Activity implements OnClickListener {private Button recordBtn, stopBtn;// 系统的视频文件private File videoFile;private MediaRecorder mRecorder;// 显示视频预览的SurfaceViewprivate SurfaceView sView;// 记录是否正在进行录制private boolean isRecording;private SurfaceHolder sholder;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);recordBtn = (Button) findViewById(R.id.main_btn_record);stopBtn = (Button) findViewById(R.id.main_btn_stop);// 让stopBtn按钮不可用stopBtn.setEnabled(false);stopBtn.setOnClickListener(this);recordBtn.setOnClickListener(this);// 获取界面中的SurfaceViewsView = (SurfaceView) findViewById(R.id.main_sView);sholder = sView.getHolder();// 设置SurfaceView不需要自己维护缓冲区sholder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);// 设置分辨率sholder.setFixedSize(800, 480);// 设置该组件让屏幕不会自动关闭sholder.setKeepScreenOn(true);}@Overridepublic void onClick(View v) {if (v == recordBtn) {if (!Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {Toast.makeText(RecordVedioActivity.this, "SD卡不存在,请插入SD卡!",Toast.LENGTH_SHORT).show();return;}try {// 创建保存录制视频的视频文件videoFile = new File(Environment.getExternalStorageDirectory().getCanonicalFile() + "/yvideo.mp4");// 创建MediaRecorder对象mRecorder = new MediaRecorder();mRecorder.reset();// 设置从麦克风采集声音mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);// 设置从摄像头采集图像mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);// 设置视频文件的输出格式(必须在设置声音编码格式、图像编码格式之前设置)mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);// 设置声音的编码格式mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);// 设置图像的编码格式mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);mRecorder.setVideoSize(800, 480);// 每秒4帧mRecorder.setVideoFrameRate(4);mRecorder.setOutputFile(videoFile.getAbsolutePath());// 指定使用SurfaceView来预览视频mRecorder.setPreviewDisplay(sView.getHolder().getSurface());mRecorder.prepare();// 让record按钮不可用recordBtn.setEnabled(false);// 让stopBtn按钮可用stopBtn.setEnabled(true);isRecording = true;// 开始录制mRecorder.start();System.out.println("-----recording-----");} catch (Exception e) {e.printStackTrace();}}if (v == stopBtn) {// 如果正在录制视频if (isRecording) {// 停止录制mRecorder.stop();// 释放资源mRecorder.release();mRecorder = null;// 让record按钮可用recordBtn.setEnabled(true);// 让stopBtn按钮不可用stopBtn.setEnabled(false);}}}}
布局XML:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center_horizontal"android:orientation="horizontal" ><Buttonandroid:id="@+id/main_btn_record"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="录制视频" /><Buttonandroid:id="@+id/main_btn_stop"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="停止录制" /></LinearLayout><SurfaceViewandroid:id="@+id/main_sView"android:layout_width="match_parent"android:layout_height="match_parent" /></LinearLayout>
加上如下权限:
<!-- 授予该程序录制声音的权限 --><uses-permission android:name="android.permission.RECORD_AUDIO" /><!-- 授予该程序使用摄像头的权限 --><uses-permission android:name="android.permission.CAMERA" /><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /><!-- 授予该程序使用外部存储器的权限 --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />