广

android开发

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

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

    2018-04-05 08:32:13 次阅读 稿源:互联网
    广告
    我们玩玩手机的录像功能吧。做个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;
    }
    }

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

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告