文档章节

android开发笔记之多媒体—音频和视频的录制

Mr_Nice
 Mr_Nice
发布于 2016/05/22 20:01
字数 794
阅读 30
收藏 0

使用MediaRecorder录制音频

手机一般都提供麦克风硬件,而Android系统可以利用该硬件来录制音频了。

使用MediaRecorder录制音频的步骤:

     1)创建MediaRecorder对象
     mediaRecorder = new MediaRecorder();

     2)调用MediaRecorder对象的setAudioSource()方法设置声音来源,一般传入MediaRecorder.AudioSource.MIC参数指定录制来自麦克风的声音
                        mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);

     3)调用MediaRecorder对象的setOutputFormat()设置录制音频文件的格式。
                recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);

     4)调用MediaRecorder对象的
setAudioEncoder,setAudioEncodingBitRate(int),setAudioSamplingRate(int)设置录制的声音的编码格式,编码位率,采样率等。

    这些参数将可以控制所录制的声音的品质,文件的大小,一般声音品质越好,声音文件越大。
    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

    5)调用MediaRecorder对象的setOutputFile(String)设置录制文件的保存的位置。
     mediaRecorder.setOutputFile(Environment.
            getExternalStorageDirectory().
            getAbsolutePath()+"/huadong.amr");

    6)调用MediaRecorder的prepare()方法准备录制
    mediaRecorder.prepare();

    7)调用MediaRecorder对象的start()方法开始录制
    mediaRecorder.start();

    8)录制完成,调用MediaRecorder对象的stop()方法停止录制,并调用release()方法释放资源。
    mediaRecorder.stop();
    //释放资源
    mediaRecorder.release();

**注意:a)第三步和第四步不能搞反,否则会引发异常。
b)需要的权限**

android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:name="android.permission.RECORD_AUDIO"
android:name="android.permission.READ_EXTERNAL_STORAGE"

使用MediaRecorder和SurfaceView录制视频

手机一般都提供麦克风和摄像头硬件,而Android系统可以利用该硬件来录制视频了。

使用MediaRecorder录制音频的步骤:

 1)创建MediaRecorder对象
    mediaRecorder = new MediaRecorder();

 2)调用MediaRecorder对象的setVideoSource()方法设置视频的来源,一般传入MediaRecorder.VideoSource.CAMERA参数指定录制来自摄像头的图像
 mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);

 3)调用MediaRecorder对象的setAudioSource()方法设置声音来源,一般传入MediaRecorder.AudioSource.MIC参数指定录制来自麦克风的声音
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);

 4)调用MediaRecorder对象的setOutputFormat()设置录制音频文件的格式。

 recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);

 5)调用MediaRecorder对象的setVideoEncoder设置录制的视频的编码格式等。这些参数将可以控制所录制的视频的品质,文件的大小,一般视频品质越好,视频文件越大。
        recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);

6)调用MediaRecorder对象的setAudioEncoder,setAudioEncodingBitRate(int),setAudioSamplingRate(int)设置录制的声音的编码格式,编码位率,采样率等。

   这些参数将可以控制所录制的声音的品质,文件的大小,一般声音品质越好,声音文件越大。
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

 7)调用setVideoFrameRate(20)设置录制的视频帧率。必须放在设置编码和格式的后面,否则报错。

 8)调用setVideoSize(176, 144);设置视频录制的分辨率。必须放在设置编码和格式的后面,否则报错。

 9)调用setPreviewDisplay(sv.getHolder().getSurface());这是视频的预览效果。

 10)调用MediaRecorder对象的setOutputFile(String)设置录制文件的保存的位置。

 11)调用MediaRecorder的prepare()方法准备录制。

 12)调用MediaRecorder对象的start()方法开始录制。

 13)录制完成,调用MediaRecorder对象的stop()方法停止录制,并调用release()方法释放资源。

注意:需要的权限:

相比录制音频文件多了一个相机的权限

android.permission.CAMERA

© 著作权归作者所有

共有 人打赏支持
Mr_Nice
粉丝 0
博文 47
码字总数 39947
作品 0
广州
私信 提问
直播,音视频编码器和解码器(EasyDarwin)-Android

使用摄像头采集视频数据,并通过MediaCodec进行H264编码,之后打包成RTSP格式并上传的。 TextuewView也提供了一个setTransform方法,该方法接收一个matrix参数,使用该参数对当前的渲染内容进...

shareus
05/18
0
0
【android学习之十四】——多媒体1:音乐播放

声明:学习的书籍《Android应用开发揭秘》,这里记录学习该书籍的日志,引用的相关代码与总结描述,没有商业的用途,完全是自我学习的一个记录,刚刚学习不可避免会出现很多问题,若是有错误...

晨曦之光
2012/03/08
2.8K
1
深入探讨 Android 传感器

Android 是一个面向应用程序开发的富平台,它拥有许多具有吸引力的用户界面元素和数据管理功能。Android 还提供了一组丰富的接口选项。在本文中,学习如何配合使用 Android 的各种传感器选项...

红薯
2009/07/20
7.9K
9
Android实现录音、播音、录制视频功能

智能手机操作系统IOS与Android平分天下(PS:WP与其他的直接无视了),而Android的免费招来了一大堆厂商分分向Android示好,故Android可能会有“较好”的前景。 Android录音辅助类 需要添加的...

vga
2017/01/09
0
3
关于ios录制的视频怎么在安卓上也能播放

想在安卓手机上播放苹果录制的视频, 好像是因为音频编码的关系无法播放。 安卓那边在录制视频设置了音频编码的类型所以苹果这边可以播放。 所以来求问一下苹果录制视频有没设置音频编码的方...

-fang
2014/08/20
1K
1

没有更多内容

加载失败,请刷新页面

加载更多

docker快速搭建几个常用的第三方服务

本次和大家分享的内容是使用docker快速搭建工作中常用的第三方的服务,对于有一些互联网背景的公司来说,以下几个服务都是很需要的:redis,rabbit,elasticsearch; 如果想学习Java工程化、...

编程SHA
22分钟前
2
0
我的Linux系统九阴真经

在今天,互联网的迅猛发展,科技技术也日新月异,各种编程技术也如雨后春笋一样,冒出尖来了。各种创业公司也百花齐放百家争鸣,特别是针对服务行业,新型互联网服务行业,共享经济等概念的公...

linuxprobe16
31分钟前
5
0
Dubbo标签解析详解

在Spring继承dubbo时,会使用dubbo自定义的标签来定义相关的属性,常见的标签有<dubbo:application/>,<dubbo:registry/>,<dubbo:service/>等。对于这些标签的解析,dubbo都是使用的统一的方...

爱宝贝丶
36分钟前
3
0
网站彩蛋

图形类彩蛋 知乎 https://www.zhihu.com/ 想来知乎工作?请发送邮件到 jobs@zhihu.com 天猫 https://www.tmall.com/ 喵~ 加入我们吧 http://tb.cn/iS8NBOy 超级课程表 http://www.super.cn/...

临江仙卜算子
43分钟前
9
0
ThreadLocal父子线程之间的数据传递问题

一、问题的提出 在系统开发过程中常使用ThreadLocal进行传递日志的RequestId,由此来获取整条请求链路。然而当线程中开启了其他的线程,此时ThreadLocal里面的数据将会出现无法获取/读取错乱...

nonnetta
52分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部