一、MediaRecorder作用
1、MediaRecorder可以实现直接录制视频,不能对每一帧数据进行处理。如果对每一帧数据都能进行处理的话,有两种选择:1.MediaCodec 2.FFMpeg_x264/openh264
二、使用到的权限

<user-permission android:name="android.permission.RECORD_AUdio"/><user-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><user-permission android:name="android.permission.CAMERA"/><user-permission android:name="android.permission.FLASHLIGHT"/><user-permission android:name="android.permission.MOUNT_UNMOUNT_FILRSYSTEMS"/><user-permission android:name="android.hardware.camera"/><user-permission android:name="android.hardware.camera.autofocus"/>

三、录制视频
1、MediaRecorder功能设置(方法/作用)

getAudioSourceMax() 获取音频信号源的最高值。
getMaxAmplitude() 最后调用这个方法采样的时候返回最大振幅的绝对值
getMetrics() 返回当前Mediacorder测量的数据
getSurface() 当使用Surface作为视频源的时候,返回Sufrace对象
pause() 暂停录制
prepare() 准备录制
resume() 恢复录制
release() 释放与此MediaRecorder对象关联的资源
reset() 重新启动mediarecorder到空闲状态
setAudioChannels(int numChannels) 设置录制的音频通道数
setAudioEncoder(int audio_encoder) 设置audio的编码格式
setAudioEncodingBitRate(int bitRate) 设置录制的音频编码比特率
setAudioSamplingRate(int samplingRate) 设置录制的音频采样率
setAudioSource(int audio_source) 设置用于录制的音源
setAuxiliaryOutputFile(String path) 辅助时间的推移视频文件的路径传递
setAuxiliaryOutputFile(FileDescriptor fd) 在文件描述符传递的辅助时间的推移视频
setCamera(Camera c) 设置一个recording的摄像头,此方法在API21被遗弃,被getSurface替代
setCaptureRate(double fps) 设置视频帧的捕获率
setInputSurface(Surface surface) 设置持续的视频数据来源
setMaxDuration(int max_duration_ms) 设置记录会话的最大持续时间(毫秒)
setMaxFileSize(long max_filesize_bytes) 设置记录会话的最大大小(以字节为单位)
setOutputFile(FileDescriptor fd) 传递要写入的文件的文件描述符
setOutputFile(String path) 设置输出文件的路径
setOutputFormat(int output_format) 设置在录制过程中产生的输出文件的格式
setPreviewDisplay(Surface sv) 表面设置显示记录媒体(视频)的预览
setVideoEncoder(int video_encoder) 设置视频编码器,用于录制
setVideoEncodingBitRate(int bitRate) 设置录制的视频编码比特率
setVideoFrameRate(int rate) 设置要捕获的视频帧速率
setVideoSize(int width, int height) 设置要捕获的视频的宽度和高度
setVideoSource(int video_source) 开始捕捉和编码数据到setOutputFile(指定的文件)
setLocation(float latitude, float longitude) 设置并存储在输出文件中的地理数据(经度和纬度)
setProfile(CamcorderProfile profile) 指定CamcorderProfile对象
setOrientationHint(int degrees) 设置输出的视频播放的方向提示
setOnErrorListener(MediaRecorder.OnErrorListener l) 注册一个用于记录录制时出现的错误的监听器
setOnInfoListener(MediaRecorder.OnInfoListener listener) 注册一个用于记录录制时出现的信息事件

2、MediaRecorder内的嵌套类

MediaRecorder.AudioEncoder
MediaRecorder.AudioSource
MediaRecorder.VideoSource
MediaRecorder.OutputFormat

3、MediaRecorder.AudioEncoder
在录音的时候都要调用setAudioEncoder()方法,这个方法里面总有不同的参数,这个类就是参数的值,这里说一下各个不同值的区别:
default: 默认值。
AAC: 高级音频编码,简单说下优缺点:

AAC优点:相对于mp3,AAC格式的音质更佳,文件更小。
AAC不足:AAC属于有损压缩的格式,与时下流行的APE、FLAC等无损格式相比音质存在”本质上”的差距。加之,传输速度更快的USB3.0和16G以上大容量MP3正在加速普及,也使得AAC头上”小巧”的光环不复存在。

HE_AAC: HE-AAC混合了AAC与SBR技术。
AAC_ELD: 低延时的AAC音频编解码器。
AMR_NB: 编码的是无视频纯声音3gp文件就是amr,他的文件比AAC的小,音乐效果没ACC的好。
AMR_WB: VMR-WB 是新型可变速率多模式宽带语音编解码器,专为无线 CDMA 2000标准而设计,目的在于在 50 至 7000 HZ 的频带上进行语音编码,采样率为 16 KHZ。VMR-WB 基于 3GPP AMR-WB (G722.2) 编解码器,在每秒速率12.65 Kbit 上可实现互操作。
VORBIS: Vorbis是一种新的音频压缩格式,类似于MP3等现有的音乐格式。但有一点不同的是,它是完全免费、开放和没有专利限制的。OGG Vorbis有一个很出众的特点,就是支持多声道,随着它的流行,以后用随身听来听DTS编码的多声道作品将不会是梦想。
4、MediaRecorder.AudioSource
这个类对应setAudioSource(int) 方法,主要用来设置音频源; MediaRecorder.AudioSource音频参数说明如下:
MediaRecorder.AudioSource.CAMCORDER 设定录音来源于同方向的相机麦克风相同,若相机无内置相机或无法识别,则使用预设的麦克风
MediaRecorder.AudioSource.DEFAULT 默认音频源
MediaRecorder.AudioSource.MIC 设定录音来源为主麦克风。
MediaRecorder.AudioSource.VOICE_CALL设定录音来源为语音拨出的语音与对方说话的声音
MediaRecorder.AudioSource.VOICE_COMMUNICATION 摄像头旁边的麦克风
MediaRecorder.AudioSource.VOICE_DOWNLINK 下行声音
MediaRecorder.AudioSource.VOICE_RECOGNITION 语音识别
MediaRecorder.AudioSource.VOICE_UPLINK 上行声音
MediaRecorder.VideoEncoder

通过setVideoEncoder(int)来设置视频编码格式。
default: 默认编码
H263: H.263 多用于视频传输,其优点是压缩后体积小,占用带宽少;
MPEG_4_SP: 码率低代表它无需高码率即可有很好的视频效果,H264就更好了
H264 也是用于网络视频传输,优点也和H263差不多;再是H264会比前两者更优秀一点,不过一般用在标清或者高清压缩比较多。
VP8: 据说比H264优秀。
HEVC: 一种新的视频压缩标准。可以替代H.264/ AVC编码标准。它将在H.264标准2至4倍的复杂度基础上,将压缩效率提升一倍以上。
5、MediaRecorder.VideoSource
通过setVideoSource(int)方法,设置视频的来源。
CAMERA: 视频数据来源摄像头
DEFAULT: 系统默认
SURFACE: 视频数据来源于Surface
6、MediaRecorder.OutputFormat
通过setOutputFormat(int)方法来控制视频输出的格式:同理列举下各个参数的说明:
AAC_ADTS: ADTS的全称是Audio Data Transport Stream。是AAC音频的传输流格式。是AAC的一种非常常见的传输格式,
AMR_NB: 编码的是无视频纯声音3gp文件就是amr,他的文件比AAC的小,他的音乐效果没ACC的好
AMR_WB: VMR-WB 是新型可变速率多模式宽带语音编解码器,专为无线 CDMA 2000标准而设计,目的在于在 50 至 7000 HZ 的频带上进行语音编码,采样率为 16 KHZ。VMR-WB 基于 3GPP AMR-WB (G722.2) 编解码器,在每秒速率12.65 Kbit 上可实现互操作。
DEFAULT: 默认输出
MPEG_4: 这将指定录制的文件为mpeg-4格式,可以保护Audio和Video
RAW_AMR: 录制原始文件,这只支持音频录制,同时要求音频编码为AMR_NB
THREE_GPP: 录制后文件是一个3gp文件,支持音频和视频录制
WEBM: 编码为VP8/VORBIS的输出格式。
输出格式,大同小异,这里也没有做特别详细的讲解,将一下基本用法就可以了。一般情况下使用输出格式为MPEG_4的即可。
上述主要介绍了MediaRecorder的方法,作用以及部分参数的定义,下面进行MediaRecorder与SurfaceView结合使用并进行录制视频,视频格式为mp4。
7、录制视频实例

/*** 开始录制视频*/public void startRecordVideo(){if(mCamera == null){Log.e(TAG,"Camera为null");return;}Camera.Parameters parameters = mCamera.getParameters();parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);mCamera.setParameters(parameters);mCamera.startPreview();if (mMediaRecorder == null){mMediaRecorder = new MediaRecorder();}else {mMediaRecorder.reset();}try {/*1.解锁相机,为MediaRecorder设置相机*/mCamera.unlock();mMediaRecorder.setCamera(mCamera);/*2.设置音频源和视频源*/mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);/*3.CamcorderProfile.QUALITY_HIGH:质量等级对应于最高可用分辨率*/mMediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_720P));/*设置视频的输出格式*/
//            mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);/*设置音频的编码格式*/
//            mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);/*设置视频的编码格式*/
//            mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);/*设置要捕获的视频的帧速率*/
//            mMediaRecorder.setVideoFrameRate(30);/*设置编码比特率*/
//            mMediaRecorder.setVideoEncodingBitRate( 5 * 1024 * 1024);//            mMediaRecorder.setVideoSize(720,1280);/*4.设置输出文件*/String dirPath = Environment.getExternalStorageDirectory()+"/DCIM/Camera/";File dirFile = new File(dirPath);if (!dirFile.exists()) dirFile.mkdirs();mVideoFilePath = dirPath +"VIDEO_"+ System.currentTimeMillis()+".mp4";mMediaRecorder.setOutputFile(mVideoFilePath);/*摄像头默认是横屏,这是拍摄的视频旋转90度*/mMediaRecorder.setOrientationHint(90);/*5.设置预览输出*/mMediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());/*6.准备配置*/mMediaRecorder.prepare();/*7.开始录制*/mMediaRecorder.start();}catch (Exception e){e.printStackTrace();}}

四、直接设置录制视频的质量

mMediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_720P));

五、视频质量的分辨率:CamcorderProfile.java

  * Quality level corresponding to the 720p (1280 x 720) resolution.*/public static final int QUALITY_720P = 5;/*** Quality level corresponding to the 1080p (1920 x 1080) resolution.* Note that the vertical resolution for 1080p can also be 1088,* instead of 1080 (used by some vendors to avoid cropping during* video playback).*/public static final int QUALITY_1080P = 6;

六、视频停止录制

/*** 结束录制*/public void stopRecordVideo(){if (mMediaRecorder != null){mediaRecorder.setOnErrorListener(null);mediaRecorder.setOnInfoListener(null);mediaRecorder.setPreviewDisplay(null);// 停止录制mediaRecorder.stop();mediaRecorder.reset();// 释放资源mediaRecorder.release();mediaRecorder = null;getContext().sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,Uri.parse(mVideoFilePath)));Toast.makeText(getContext(),"视频保存在:"+mVideoFilePath,Toast.LENGTH_SHORT).show();}}

MediaRecorder录制视频和录音相关推荐

  1. Android音视频之MediaRecorder录制视频

    1 MediaRecorder 录制视频步骤 这篇文章介绍了Android录音MediaRecorder使用和SoundPool的使用 主要讲解了音频的录制和播放,这篇AudioRecord和Audi ...

  2. 前端 mediaRecorder 录制视频源代码实例,和本地播放器无法定位进度条问题分析和解决

    问题 mediaRecorder 本质上录制的是webm 当我们使用getUserMedia.MediaRecorder等API生成的webm视频时,会发现最终的webm是无法拖动进度条的 解决方案 ...

  3. 使用MediaRecorder录制视频短片

    MediaRecorder除了可用于录制音频之外,还可用于录制视频,使用MediaRecorder录制视频与录制音频的步骤基本相同.只是录制视频时不仅需要采集声音,还需要采集图像.为了让MediaRe ...

  4. Android多媒体四:MediaRecorder录制视频短片

    Android多媒体四:MediaRecorder录制视频短片 MediaRecorder除了可用于录制音频之外,还可用于录制视频,使用MediaRecorder录制视频与录制音频的步骤基本相同. 只 ...

  5. MediaRecorder录制视频时计算文件大小

    MediaRecorder录制视频时通过音频编码率和视频编码率计算文件大小或时间 计算公式:(音频编码率(单位k)+视频编码率(单位k))/8*时间(秒) = 文件大小(kb) 例: mediaRec ...

  6. Android音视频开发:MediaRecorder录制视频

    简介 安卓api提供了Camera类控制相机捕获图像,在api21以后,安卓也提供了Camera2,Camera变得过时了,但为了兼容性,这里还是使用Camera. 对于录制视频,可以使用MediaR ...

  7. Android MediaRecorder录制视频详细步骤

    使用MediaRecorder能够编写从设备麦克风与相机捕获音视频,保存音频并(使用MediaPlayer)进行播放的应用. 1.添加权限: <uses-permission android:n ...

  8. Android MediaRecorder录制视频音量小问题解决 (音视频转码合成)

    之前写得太乱,回头看看感觉自己都有点看不懂,重新写下. 在android上需要做一个录像留言功能,需要生成MP4或者waw格式视频.但是使用MediaRecorder录制出的MP4视频格式音量太小,几 ...

  9. mediaRecorder录制视频与播放

    1.添加权限 <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-p ...

最新文章

  1. java which语句,java入门之表达式、语句、块
  2. 从寄存器看I386和x64位中函数调用中参数传递
  3. The Ultimate Guide To iPhone Resolutions
  4. 德富莱智能抹墙机器人_深圳智能制造应急生产联盟成立,大咖共探机器人行业新机遇...
  5. CentOS-7.2部署OpenLDAP服务器以及客户端
  6. 关于位运算的错误问题
  7. PWN2OWN 2017 Linux 内核提权漏洞分析
  8. vue如何取消下拉框按回车自动下拉_Web自动化测试 | Select下拉框
  9. Python基础——数据分析考核(基础版本)
  10. (开源)Flask+Vue+Bootstrap3 人力资源用Web数据库
  11. matlab中CH指标聚类评价指标,MATLAB聚类有效性评价指标(外部)
  12. vue 计算文件hash值_vue的hash值原理,也是table切换。
  13. 【 Linux 网络虚拟化 】Netns
  14. 笔记本键盘扣安装注意事项(小技巧)
  15. SnagIt 9-12 注册码
  16. 计算机共享在哪里找,电脑共享文件在哪里找
  17. 图像处理之双线性插值法
  18. among us私服搭建
  19. android 监控行为,一种针对Android系统App行为的监控方法
  20. LaTeX 数学公式大全

热门文章

  1. Airbnb 2019年纽约住房情况分析报告
  2. 对sin(x)^n dx or cos(x)^n dx的计算验证过程以及结论
  3. Problem A: 零起点学算法93——矩阵转置
  4. JMS Message消息头、消息体、消息属性
  5. DirectX的发展历程!
  6. 微麦投影仪android遥控器,投影仪遥控器如何使用 投影仪遥控器使用方法【详解】...
  7. 上海 -》 张家界 旅行 计划10.1
  8. java数组位置_java数组中如何查找元素的位置?
  9. MySQL版本号后面包含“-log”代表什么意思?
  10. 数据结构/排序/选择排序/简单选择排序