Android中用MediaRecorder进行录影的实例代码
mediarecorder进行录影和录音没什么差别 ,就多了一个设置图像的格式
参考://www.jb51.net/article/46182.htm
实例:
<!-- 授予该程序录制声音的权限 -->
<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" />
<relativelayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".mainactivity" >
<surfaceview
android:id="@+id/dview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<linearlayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignparentbottom="true"
android:orientation="horizontal" >
<button
android:id="@+id/record"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/record" />
<button
android:id="@+id/stop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/stop" />
</linearlayout>
</relativelayout>
package com.android.xiong.videotest;
import java.io.file;
import android.app.activity;
import android.hardware.camera;
import android.media.mediarecorder;
import android.os.bundle;
import android.os.environment;
import android.view.menu;
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 mainactivity extends activity implements onclicklistener {
button record, stop;
// 系统视频文件
file viodfile;
mediarecorder mrecorder;
// 显示视频的surfaceview
surfaceview sview;
// 记录是否正在进行录制
boolean isrecording = false;
camera camera;
@override
protected void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
setcontentview(r.layout.activity_main);
record = (button) findviewbyid(r.id.record);
stop = (button) findviewbyid(r.id.stop);
sview = (surfaceview) findviewbyid(r.id.dview);
// stop按钮不可用
stop.setenabled(false);
// 设置surface不需要维护自己的缓冲区
sview.getholder().settype(surfaceholder.surface_type_push_buffers);
// 设置分辨率
sview.getholder().setfixedsize(320, 280);
// 设置该组件不会让屏幕自动关闭
sview.getholder().setkeepscreenon(true);
record.setonclicklistener(this);
stop.setonclicklistener(this);
}
@override
public boolean oncreateoptionsmenu(menu menu) {
// inflate the menu; this adds items to the action bar if it is present.
getmenuinflater().inflate(r.menu.main, menu);
return true;
}
@override
public void onclick(view v) {
switch (v.getid()) {
case r.id.record:
if (!environment.getexternalstoragestate().equals(
environment.media_mounted)) {
toast.maketext(this, "sd卡不存在,请插卡!", toast.length_short).show();
return;
}
try {
// 创建mediaplayer对象
mrecorder = new mediarecorder();
mrecorder.reset();
/* camera = camera.open();
camera.unlock();
camera.setdisplayorientation(0);
mrecorder.setcamera(camera);*/
// 创建保存录制视频的视频文件
viodfile = new file(environment.getexternalstoragedirectory()
.getcanonicalfile() + "/myvideo.mp4");
if (!viodfile.exists())
viodfile.createnewfile();
// 设置从麦克风采集声音
mrecorder.setaudiosource(mediarecorder.audiosource.mic);
// 设置从摄像头采集图像
mrecorder.setvideosource(mediarecorder.videosource.camera);
// 设置视频、音频的输出格式
mrecorder.setoutputformat(mediarecorder.outputformat.default);
// 设置音频的编码格式、
mrecorder.setaudioencoder(mediarecorder.audioencoder.default);
// 设置图像编码格式
mrecorder.setvideoencoder(mediarecorder.videoencoder.default);
mrecorder.setorientationhint(90);
//mrecorder.setvideosize(320, 280);
// mrecorder.setvideoframerate(5);
mrecorder.setoutputfile(viodfile.getabsolutepath());
// 指定surfaceview来预览视频
mrecorder.setpreviewdisplay(sview.getholder().getsurface());
mrecorder.prepare();
// 开始录制
mrecorder.start();
// 让record按钮不可用
record.setenabled(false);
// 让stop按钮可用
stop.setenabled(true);
isrecording = true;
} catch (exception e) {
e.printstacktrace();
}
break;
case r.id.stop:
// 如果正在录制
if (isrecording) {
// 停止录制
mrecorder.stop();
// 释放资源
mrecorder.release();
mrecorder = null;
// 让record按钮可用
record.setenabled(true);
// 让stop按钮不可用
stop.setenabled(false);
}
break;
default:
break;
}
}
}