安卓双摄像头录像_android开发之调用手机的摄像头使用MediaRecorder录像并播放_Android_脚本之家...
我们玩玩手机的录像功能吧。做个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_脚本之家...相关推荐
- vue实现PC端调用摄像头拍照人脸录入、移动端调用手机前置摄像头人脸录入、及图片旋转矫正、压缩上传base64格式/文件格式
PC端调用摄像头拍照上传base64格式到后台,这个没什么花里胡哨的骚操作,直接看代码 (canvas + video) <template><div><!--开启摄像头 ...
- 千千静听安卓版是百度音乐旗下一款手机音乐软件,集本地歌曲播放
千千静听安卓版是百度音乐旗下一款手机音乐软件,集本地歌曲播放 千千静听 千千静听安卓版是百度音乐旗下一款手机音乐软件,集本地歌曲播放.在线歌曲试听下载于一身.拥有自动匹配封面歌词.绚丽桌面widget ...
- HTML5调用手机前置摄像头或后置摄像头拍照,canvas显示,经过Android测试
为什么80%的码农都做不了架构师?>>> 但是navigator.getUserMediau已经从 Web 标准中删除,虽然部分浏览器可以使用,生产环境中还是要做好兼容.新的A ...
- html5 android6.0摄像头,HTML5调用手机前置摄像头或后置摄像头拍照,canvas显示,经过Android测试...
但是navigator.getUserMediau已经从 Web 标准中删除,虽然部分浏览器可以使用,生产环境中还是要做好兼容.新的API更替为MediaDevices.getUserMedia.Me ...
- 使用JS调用手机本地摄像头或者相册图片识别二维码/条形码
接着昨天的需求,不过这次不依赖微信,使用纯js唤醒手机本地摄像头或者选择手机相册图片,识别其中的二维码或者是条形码.昨天,我使用微信扫一扫识别,效果超棒的.不过如果依赖微信的话,又怎么实现呢,这里介绍 ...
- adb 安卓模拟器 进程端口_Android开发中遇到的问题(一)——Android模拟器端口被占用问题的解决办法...
一.问题描述 今天在Eclipse中运行Android项目时遇到"The connection to adb is down, and a severe error has occured& ...
- 【安卓开发】调用手机的相机进行拍照并且保存在本地的APP
官网文档 拍照功能 点击拍照后可以进行拍照,并且将得到的照片展现在屏幕上 添加相机权限 <uses-feature android:name="android.hardware.cam ...
- html调起苹果手机摄像头_iOS | H5直接调用手机的摄像头进行拍照或录像
最近公司做的一个H5项目,有个需求,就是要点击某个div,直接唤起手机的拍照或者录像功能. 这里需要注意的点是: 下面的方法在安卓手机上测试是可以的(只测试了华为手机 华为P10plus.华为 P7- ...
- android开发中调用手机的豌豆荚、应用宝等市场进行评分操作,以及分享功能
应用场景:某个手机阅读器程序,读者看到一篇 文章 ,觉得不错,想要与朋友分享 . 应用展现:按手机的Menu键,弹出"分享"菜单,点击后显示一系列Android分享功能的方式( ...
最新文章
- 大数据目标检测推理管道部署
- linux 6.8 安装教程,CentOS 6.8 7.2 安装图解详细教程
- [导入]数据库物理模型设计的其他模式之继承模式
- 微型计算机及接口技术试题,1月自考微型计算机及其接口技术试题及答案解析...
- Vivado debug异常现象
- 如何让远程数据库中的1张表导入到本地数据库中
- JDK、SDK、JRE、JVM概念详解
- 第二阶段冲刺10天 第二天
- 将IE的默认搜索引擎换成Google
- noip2013 day1
- vue学习笔记-绑定属性 绑定class及style(2)
- 计算机职业价值观测评报告,职业价值观测评—中国毕业生职业能力素质测评系统...
- Excel2010 count,countif,countifs使用
- 俄语入门难不难-大舌音难学吗-弹舌难学吗
- 名帖49 王羲之 小楷《黄庭经》
- 自然数 素数 质数_素数列表–最多20,000个素数的图表
- 图形数据库neo4j视频教程
- Unity使用Mysql(添/删/改/查)(保姆级)
- python斐波那契数列第四十项_传统文化的数学基础(四)--论八卦、五行、天干地支、二十四节气、洛书与黄金分...
- 精益生产25个必备工具!
热门文章
- python中output使用_Python output.Output方法代码示例
- php 字符串 中文,php实现中文字符串截取无乱码
- 【控制】《自动控制原理》胡寿松老师-第5章-线性系统的频域分析法
- PyTorch cat() 函数实现维度拼接
- 3.3 目标检测-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
- 3.1 调试处理-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
- STM32 基础系列教程 48 – CJSON
- LTE 中的RV版本
- 【PC工具】更新win10关闭更新工具及注意事项
- 锤子手机使用2年,聊聊锤子手机,坚果手机功能使用体验