欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

android开发之调用手机的摄像头使用MediaRecorder录像并播放

程序员文章站 2023-12-13 14:04:10
我们玩玩手机的录像功能吧。做个demo。 看看录制过程: 复制代码 代码如下: mediarecorder = new mediarecorder();// 创建media...
我们玩玩手机的录像功能吧。做个demo。
看看录制过程
复制代码 代码如下:

mediarecorder = new mediarecorder();// 创建mediarecorder对象
// 设置录制视频源为camera(相机)
mediarecorder.setvideosource(mediarecorder.videosource.camera);
// 设置录制完成后视频的封装格式three_gpp为3gp.mpeg_4为mp4
mediarecorder.setoutputformat(mediarecorder.outputformat.three_gpp);
// 设置录制的视频编码h263 h264
mediarecorder.setvideoencoder(mediarecorder.videoencoder.h264);
// 设置视频录制的分辨率。必须放在设置编码和格式的后面,否则报错
mediarecorder.setvideosize(176, 144);
// 设置录制的视频帧率。必须放在设置编码和格式的后面,否则报错
mediarecorder.setvideoframerate(20);
mediarecorder.setpreviewdisplay(surfaceview.getholder().getsurface());
// 设置视频文件输出的路径
lastfilename = newfilename();
mediarecorder.setoutputfile(lastfilename);
try {
// 准备录制
mediarecorder.prepare();
// 开始录制
mediarecorder.start();
} catch (illegalstateexception e) {
// todo auto-generated catch block
e.printstacktrace();
} catch (ioexception e) {
// todo auto-generated catch block
e.printstacktrace();
}
结束拍摄:
if (mediarecorder != null) {
// 停止
mediarecorder.stop();
mediarecorder.release();
mediarecorder = null;
}

贴出我自己的封装类
复制代码 代码如下:

package zyf.demo.moviedemo;
import java.io.file;
import java.io.ioexception;
import java.util.timer;
import java.util.timertask;
import android.media.mediarecorder;
import android.view.surfaceview;
public class movierecorder {
private mediarecorder mediarecorder;
boolean isrecording;
public void startrecording(surfaceview surfaceview) {
mediarecorder = new mediarecorder();// 创建mediarecorder对象
// 设置录制视频源为camera(相机)
mediarecorder.setvideosource(mediarecorder.videosource.camera);
// 设置录制完成后视频的封装格式three_gpp为3gp.mpeg_4为mp4
mediarecorder.setoutputformat(mediarecorder.outputformat.three_gpp);
// 设置录制的视频编码h263 h264
mediarecorder.setvideoencoder(mediarecorder.videoencoder.h264);
// 设置视频录制的分辨率。必须放在设置编码和格式的后面,否则报错
mediarecorder.setvideosize(176, 144);
// 设置录制的视频帧率。必须放在设置编码和格式的后面,否则报错
mediarecorder.setvideoframerate(20);
mediarecorder.setpreviewdisplay(surfaceview.getholder().getsurface());
// 设置视频文件输出的路径
lastfilename = newfilename();
mediarecorder.setoutputfile(lastfilename);
try {
// 准备录制
mediarecorder.prepare();
// 开始录制
mediarecorder.start();
} catch (illegalstateexception e) {
// todo auto-generated catch block
e.printstacktrace();
} catch (ioexception e) {
// todo auto-generated catch block
e.printstacktrace();
}
isrecording = true;
timesize = 0;
timer = new timer();
timer.schedule(new timertask() {
@override
public void run() {
// todo auto-generated method stub
timesize++;
}
}, 0,1000);
}
timer timer;
int timesize = 0;
private string lastfilename;
public void stoprecording() {
if (mediarecorder != null) {
// 停止
mediarecorder.stop();
mediarecorder.release();
mediarecorder = null;
timer.cancel();
if (null != lastfilename && !"".equals(lastfilename)) {
file f = new file(lastfilename);
string name = f.getname().substring(0,
f.getname().lastindexof(".3gp"));
name += "_" + timesize + "s.3gp";
string newpath = f.getparentfile().getabsolutepath() + "/"
+ name;
if (f.renameto(new file(newpath))) {
int i = 0;
i++;
}
}
}
}
public string newfilename() {
try {
return file.createtempfile("/mov_", ".3gp").getabsolutepath();
} catch (ioexception e) {
// todo auto-generated catch block
e.printstacktrace();
return null;
}
}
public void release() {
if (mediarecorder != null) {
// 停止
mediarecorder.stop();
mediarecorder.release();
mediarecorder = null;
}
} }

那么同时 我们还会播放它:
复制代码 代码如下:

public void play(string filename, surfaceview view) {
mplayer = new mediaplayer();
mplayer.setaudiostreamtype(audiomanager.stream_music);
mplayer.setdisplay(view.getholder()); // 定义一个surfaceview播放它
mplayer.setoncompletionlistener(new oncompletionlistener() {
@override
public void oncompletion(mediaplayer arg0) {
stop();
// canvas.drawcolor(color.transparent,
// porterduff.mode.clear);
}
});
try {
mplayer.setdatasource(filename);
mplayer.prepare();
} catch (illegalstateexception e) {
// todo auto-generated catch block
e.printstacktrace();
} catch (ioexception e) {
// todo auto-generated catch block
e.printstacktrace();
}
mplayer.start();
}
结束播放时:
public void stop() {
if (mplayer != null) {
mplayer.release();
mplayer = null;
}
}

提供示例代码下载
------------
感谢那些分享技术经验的人。

上一篇:

下一篇: