音视频采集流程

串联整个音视频录制流程,完成音视频的采集、编码、封包成 mp4 输出。

流程图

通过摄像头和麦克风获得实时的音视频数据;

音频采集

Android如何采集音频

Android SDK对于音频采集提供两套API:MediaRecorder和AudioRecorder

PCM(Pulse Code Modulation)也被称为脉冲编码调制。PCM音频数据是未经压缩的音频采样数据裸流,它是由模拟信号经过采样、量化、编码转换成的标准的数字音频数据。

AudioRecord

AudioRecord输出是PCM语音数据,得到原始的一帧帧PCM音频数据。如果保存成音频文件,是不能够被播放器播放的,所以必须先写代码实现数据编码以及压缩。
一般直播技术采用的就是 AudioRecorder 采集音频数据。

MediaRecorder

MediaRecorder是偏上层的一个API,可以直接把手机麦克风录入的音频数据进行编码压缩为AMR,MP3等并保存文件。

MediaRecorder和AudioRecord的区别
  • MediaRecorder和AudioRecord都可以录制音频,区别是MediaRecorder录制的音频文件是经过压缩后的,需要设置编码器。并且录制的音频文件可以用系统自带的Music播放器播放。而AudioRecord录制的是PCM格式的音频文件,需要用AudioTrack来播放,AudioTrack更接近底层,PCM经过编码压缩可以为 amr MP3 AAC。
  • 当要简单的把数据采集为音频文件,就使用MediaRecorder,如果要对音频做进一步的算法处理就使用AudioRecorder。
优缺点:

AudioRecord
主要是实现边录边播以及对音频的实时处理,这个特性让他更适合在语音方面有优势;
优点:语音的实时处理,可以用代码实现各种音频的封装
缺点:输出是PCM格式文件,如果保存成音频文件,是不能够被播放器播放的,所以必须先写代码实现数据编码以及压缩
MediaRecorder
已经集成了录音、编码、压缩等,支持少量的录音音频格式,大概有,aac,amr,3gp等
优点:集成,直接调用相关接口即可,代码量小
缺点:无法实时处理音频;输出的音频格式不是很多,例如没有输出mp3格式文件

应用:

如果只是想简单地做一个录音机,录制音频文件,就使用 MediaRecorder,而如果需要对音频做进一步的算法处理、或者采用第三方的编码库进行压缩、以及网络传输、直播等应用,则建议使用 AudioRecord。

视频采集

和音频一样,也有高层和低层的 API,高层就是Camera 和 MediaRecorder,可以快速实现编码,低层就是直接使用Camera,然后将采集的数据进行滤镜、降噪等前处理,处理完成后由 MediaCodec 进行硬件编码,最后采用 MediaMuxer 生成最终的视频文件。

在 Android 系统下有两套 API 可以进行视频采集,Camera 和 Camera2。Camera是以前老的 API ,从 Android 5.0(21)之后就已经放弃了。如今主要使用 Camera2 进行视频的采集。

直播开发中经常需要获取视频原始帧数据然后前置处理例如:美颜、水印、特效等然后通过编码在通过rtmp或者rtsp等协议方式推流出去,可以完成实时图像传递。那么如何获取原始视频帧数据?android camera api有一个设置回调的方法,可以将可以通过它来获取原始视频数据如nv21 、 nv12 、 yv12 等。

参考文章
Android 音频采集(原始音频)
音视频篇 – Android 音视频涉及到的技术
Android音视频编码基础一

文章来源于互联网,如有雷同请联系站长删除:android音视频开发之采集

发表评论