Android开发笔记(五十七)录像录音与播放

这篇博客探讨了在Android开发中如何使用MediaRecorder进行录像,以及利用MediaPlayer实现媒体播放。同时,详细讲解了录制和播放过程中的关键事件处理,并提供了具体的代码示例。
摘要由CSDN通过智能技术生成

媒体录制MediaRecorder

MediaRecorder是Android自带的录制工具,通过操纵摄像头和麦克风完成媒体录制,既可录制视频,也可单独录制音频。其中对摄像头Camera的介绍参见《 Android开发笔记(五十六)摄像头拍照》。
下面是MediaRecorder的常用方法:

reset : 重置录制资源
prepare : 准备录制
start : 开始录制
stop : 结束录制
release : 释放录制资源
以上方法用于控制录像/录音操作。

setCamera : 设置摄像头对象
setPreviewDisplay : 设置预览界面。一般使用SurfaceHolder.getSurface
setOrientationHint : 设置预览的角度。跟拍照一样一般设置90度
以上三个方法用于录制视频,如果仅是录音则不需要这三个方法。
setOnErrorListener : 设置错误监听器。可监听服务器异常以及未知错误的事件。
setOnInfoListener : 设置信息监听器。可监听录制结束事件,包括达到录制时长或者达到录制大小。
以上方法用于关联录像工具和事件。

setAudioSource : 设置音频来源。一般使用麦克风AudioSource.MIC。
setOutputFormat : 设置媒体输出格式。OutputFormat.AMR_NB表示窄带格式,OutputFormat.AMR_WB表示宽带格式,AAC_ADTS表示高级的音频传输流格式。该方法要在setVideoEncoder之前调用,不然调用setAudioEncoder时会报错“java.lang.IllegalStateException”。
setAudioEncoder : 设置音频编码器。AudioEncoder.AMR_NB表示窄带编码,AudioEncoder.AMR_WB表示宽带编码,AudioEncoder.AAC表示低复杂度的高级编码,AudioEncoder.HE_AAC表示高效率的高级编码,AudioEncoder.AAC_ELD表示增强型低延迟的高级编码。
注意:setAudioEncoder应在setOutputFormat之后执行,否则会出现“setAudioEncoder called in an invalid state(2)”的异常。
setAudioSamplingRate : 设置音频的采样率,单位赫兹(Hz)。该方法为可选,AMRNB默认8khz,AMRWB默认16khz。
setAudioChannels : 设置音频的声道数。1表示单声道,2表示双声道。该方法为可选
setAudioEncodingBitRate : 设置音频每秒录制的字节数。越大则音频越清晰。该方法为可选
以上六个方法用于录制音频。
setVideoSource : 设置视频来源。一般使用摄像头VideoSource.CAMERA。
setOutputFormat : 设置媒体输出格式。OutputFormat.MPEG_4表示MPEG4格式,OutputFormat.THREE_GPP表示3GP格式。该方法要在setVideoEncoder之前调用。
setVideoEncoder : 设置视频编码器。VideoEncoder.MPEG_4_SP表示MPEG4编码,H263表示h263编码,H264表示h264编码。
setVideoSize : 设置视频的分辨率。
setVideoEncodingBitRate : 设置视频每秒录制的字节数。越大则视频越清晰。该方法为可选
setVideoFrameRate : 设置视频每秒录制的帧数。越大则视频越连贯,当然大小也越大。该方法为可选
以上六个方法用于录制视频,如果仅是录音则不需要这五个方法。
setMaxDuration : 设置录制时长。单位毫秒。
setMaxFileSize : 设置录制的媒体大小。单位字节。
setOutputFile : 设置输出文件的路径。
以上方法用于设置录像/录音参数。


媒体播放MediaPlayer

MediaPlayer是Android自带的播放器,可用于播放视频与音频。下面是MediaPlayer的常用方法:
reset : 重置播放器
prepare : 准备播放
start : 开始播放
pause : 暂停播放
stop : 停止播放
以上方法用于控制播放操作。

setOnPreparedListener : 设置准备播放监听器。
setOnCompletionListener : 设置结束播放监听器。
setOnSeekCompleteListener : 设置播放拖动监听器。
setOnVideoSizeChangedListener : 设置视频缩放监听器。
以上方法用于关联播放事件。

create : 创建指定Uri的播放器。
setDataSource : 设置播放数据来源。create与setDataSource只需设置其一。
setVolume : 设置音量。第一个参数是左声道,第二个参数是右声道,取值在0-1之间。
setAudioStreamType : 设置音频流的类型。AudioManager.STREAM_MUSIC表示音乐,AudioManager.STREAM_RING表示铃声,AudioManager.STREAM_ALARM表示闹钟,AudioManager.STREAM_NOTIFICATION表示通知。
setDisplay : 设置播放界面,参数为SurfaceHolder类型。该方法为视频播放专用,播放音频不需要该方法。
setSurface : 设置播放表层,一般使用SurfaceHolder.getSurface。setDisplay与setSurface只需设置其一。
setLooping : 设置是否循环播放。
isPlaying : 判断是否正在播放。
seekTo : 拖动播放进度到指定位置。
getCurrentPosition : 获取当前播放进度所在的位置。
getDuration : 获取播放时长。
以上方法用于设置播放参数。


录制/播放事件

下面是几个媒体录制/播放用到的回调事件接口:

录制异常事件
监听器类名 : MediaRecorder.OnErrorListener
设置监听器的方法 : MediaRecorder.setOnErrorListener
监听器需要重写的方法 : onError

录制完毕事件
监听器类名 : MediaRecorder.OnInfoListener
设置监听器的方法 : MediaRecorder.setOnInfoListener
监听器需要重写的方法 : onInfo,其中what值为MEDIA_RECORDER_INFO_MAX_DURATION
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值