我们玩玩手机的录像功能吧。做个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提高之MediaPlayer播放网络音频的实现方法

Android提高之MediaPlayer音视频播放

深入Android MediaPlayer的使用方法详解

android使用videoview播放视频

android webvie指定视频播放器播放网站视频

android暂停或停止其他音乐播放器的播放实现代码

Android实现歌曲播放时歌词同步显示具体思路

android播放视频时在立体声与单声道之间切换无变化原因分析及解决

Android实现图片循环播放的实例方法

Android提高之MediaPlayer播放网络视频的实现方法

安卓双摄像头录像_android开发之调用手机的摄像头使用MediaRecorder录像并播放_Android_脚本之家...相关推荐

  1. vue实现PC端调用摄像头拍照人脸录入、移动端调用手机前置摄像头人脸录入、及图片旋转矫正、压缩上传base64格式/文件格式

    PC端调用摄像头拍照上传base64格式到后台,这个没什么花里胡哨的骚操作,直接看代码 (canvas + video) <template><div><!--开启摄像头 ...

  2. 千千静听安卓版是百度音乐旗下一款手机音乐软件,集本地歌曲播放

    千千静听安卓版是百度音乐旗下一款手机音乐软件,集本地歌曲播放 千千静听 千千静听安卓版是百度音乐旗下一款手机音乐软件,集本地歌曲播放.在线歌曲试听下载于一身.拥有自动匹配封面歌词.绚丽桌面widget ...

  3. HTML5调用手机前置摄像头或后置摄像头拍照,canvas显示,经过Android测试

    为什么80%的码农都做不了架构师?>>>    但是navigator.getUserMediau已经从 Web 标准中删除,虽然部分浏览器可以使用,生产环境中还是要做好兼容.新的A ...

  4. html5 android6.0摄像头,HTML5调用手机前置摄像头或后置摄像头拍照,canvas显示,经过Android测试...

    但是navigator.getUserMediau已经从 Web 标准中删除,虽然部分浏览器可以使用,生产环境中还是要做好兼容.新的API更替为MediaDevices.getUserMedia.Me ...

  5. 使用JS调用手机本地摄像头或者相册图片识别二维码/条形码

    接着昨天的需求,不过这次不依赖微信,使用纯js唤醒手机本地摄像头或者选择手机相册图片,识别其中的二维码或者是条形码.昨天,我使用微信扫一扫识别,效果超棒的.不过如果依赖微信的话,又怎么实现呢,这里介绍 ...

  6. adb 安卓模拟器 进程端口_Android开发中遇到的问题(一)——Android模拟器端口被占用问题的解决办法...

    一.问题描述 今天在Eclipse中运行Android项目时遇到"The connection to adb is down, and a severe error has occured& ...

  7. 【安卓开发】调用手机的相机进行拍照并且保存在本地的APP

    官网文档 拍照功能 点击拍照后可以进行拍照,并且将得到的照片展现在屏幕上 添加相机权限 <uses-feature android:name="android.hardware.cam ...

  8. html调起苹果手机摄像头_iOS | H5直接调用手机的摄像头进行拍照或录像

    最近公司做的一个H5项目,有个需求,就是要点击某个div,直接唤起手机的拍照或者录像功能. 这里需要注意的点是: 下面的方法在安卓手机上测试是可以的(只测试了华为手机 华为P10plus.华为 P7- ...

  9. android开发中调用手机的豌豆荚、应用宝等市场进行评分操作,以及分享功能

    应用场景:某个手机阅读器程序,读者看到一篇 文章 ,觉得不错,想要与朋友分享  .  应用展现:按手机的Menu键,弹出"分享"菜单,点击后显示一系列Android分享功能的方式( ...

最新文章

  1. 大数据目标检测推理管道部署
  2. linux 6.8 安装教程,CentOS 6.8 7.2 安装图解详细教程
  3. [导入]数据库物理模型设计的其他模式之继承模式
  4. 微型计算机及接口技术试题,1月自考微型计算机及其接口技术试题及答案解析...
  5. Vivado debug异常现象
  6. 如何让远程数据库中的1张表导入到本地数据库中
  7. JDK、SDK、JRE、JVM概念详解
  8. 第二阶段冲刺10天 第二天
  9. 将IE的默认搜索引擎换成Google
  10. noip2013 day1
  11. vue学习笔记-绑定属性 绑定class及style(2)
  12. 计算机职业价值观测评报告,职业价值观测评—中国毕业生职业能力素质测评系统...
  13. Excel2010 count,countif,countifs使用
  14. 俄语入门难不难-大舌音难学吗-弹舌难学吗
  15. 名帖49 王羲之 小楷《黄庭经》
  16. 自然数 素数 质数_素数列表–最多20,000个素数的图表
  17. 图形数据库neo4j视频教程
  18. Unity使用Mysql(添/删/改/查)(保姆级)
  19. python斐波那契数列第四十项_传统文化的数学基础(四)--论八卦、五行、天干地支、二十四节气、洛书与黄金分...
  20. 精益生产25个必备工具!

热门文章

  1. python中output使用_Python output.Output方法代码示例
  2. php 字符串 中文,php实现中文字符串截取无乱码
  3. 【控制】《自动控制原理》胡寿松老师-第5章-线性系统的频域分析法
  4. PyTorch cat() 函数实现维度拼接
  5. 3.3 目标检测-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
  6. 3.1 调试处理-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
  7. STM32 基础系列教程 48 – CJSON
  8. LTE 中的RV版本
  9. 【PC工具】更新win10关闭更新工具及注意事项
  10. 锤子手机使用2年,聊聊锤子手机,坚果手机功能使用体验