手机
当前位置:查字典教程网 >编程开发 >安卓软件开发 >android开发之调用手机的摄像头使用MediaRecorder录像并播放
android开发之调用手机的摄像头使用MediaRecorder录像并播放
摘要:我们玩玩手机的录像功能吧。做个DEMO。看看录制过程:复制代码代码如下:mediarecorder=newMediaRecorder();/...

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

}

}

提供示例代码下载

------------

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

【android开发之调用手机的摄像头使用MediaRecorder录像并播放】相关文章:

Android开发之软键盘用法实例分析

Android开发笔记 最好使用eclipse

Android笔记之:App调试的几个命令的实践与分析

Android开发之电源管理

Android编程实现图标拖动效果的方法

Android开发之动画实现方法

Android控件系列之Shape使用方法

android UI进阶之android中隐藏的layout 抽屉的使用方法

Android开发之声明周期Activity Lifecycle

Android应用开发UI控件ImageSwitcher的使用

精品推荐
分类导航