当前位置: 移动技术网 > IT编程>移动开发>Android > android开发之调用手机的摄像头使用MediaRecorder录像并播放

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

2019年07月24日  | 移动技术网IT编程  | 我要评论

杨雨婷 张书记,湖南省委书记简历,上海世博会议大酒店

我们玩玩手机的录像功能吧。做个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;
}
}


------------
感谢那些分享技术经验的人。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网