在安逸的知识领域待久了,人就变得迷茫的。接触了音视频开发,打算一步步学起。Android预备的知识有音视频的基础知识、openGl的知识和最主要的Ffmeng知识。
音视频的基础
AndioRecord是Android系统提供的用于实现录音的功能类
AudioTrack可以完成Android平台上音频数据的输出任务
- MODE_STREAM:在这种模式下,通过write一次次把音频数据写到AudioTrack中。
- MODE_STATIC:这种模式下,在play之前只需要把所有数据通过一次write调用传递到AudioTrack中的内部缓冲区,后续就不必再传递数据了。
Camera采集视频数据并保存到文件,分别使用 SurfaceView、TextureView 来预览 Camera 数据
MediaExtractor的作用是把音频和视频的数据进行分离。
MediaMuxer的作用是生成音频或视频文件;还可以把音频与视频混合成一个音视频文件
MediaCodec类可以用于使用一些基本的多媒体编解码器
- 编解码器能处理的数据类型为:压缩数据、原始音频数据和原始视频数据。你可以通过ByteBuffers能够处理这三种数据,但是需要你提供一个Surface,用于对原始的视频数据进行展示,这样也能提高编解码的性能。Surface使用的是本地的视频缓冲区,这个缓冲区不映射或拷贝到ByteBuffers。这样的机制让编解码器的效率更高。通常在使用Surface的时候,无法访问原始的视频数据,但是你可以使用ImageReader访问解码后的原始视频帧。在使用ByteBuffer的模式下,您可以使用Image类和getInput/OutputImage(int)访问原始视频帧
PCM采集:
音频:模拟信号->采样->量化->编码->数字信号
视频编码中H264是目前最主流的视频编码标准
在H264中,三种类型的帧数据分别为
I帧:帧内编码帧。就是一个完整帧。
P帧:前向预测编码帧。是一个非完整帧,通过参考前面的I帧或P帧生成。
B帧:双向预测内插编码帧。参考前后图像帧编码生成。B帧依赖其前最近的一个I帧或P帧及其后最近的一个P帧
音频编码以AAC编码为主
AAC格式主要分为两种:ADIF、ADTS。
ADIF:Audio Data Interchange Format。 音频数据交换格式。这种格式的特征是可以确定的找到这个音频数据的开始,不需进行在音频数据流中间开始的解码,即它的解码必须在明确定义的开始处进行。这种格式常用在磁盘文件中。
ADTS:Audio Data Transport Stream。 音频数据传输流。这种格式的特征是它是一个有同步字的比特流,解码可以在这个流中任何位置开始。它的特征类似于mp3数据流格式。
做个简单的音视频播放器
未完待续~