1、音视频基础
一个简单的音视频链路如下:
1)采集,音视频经过采集后分别生成音频流和视频帧,音频是流式的物理上没有帧的概念,但为了数据处理的方便实际数据处理中引入了音频帧的概念,一般中间插入静音数据。 视频是由一幅幅图像组成,可以理解为一幅图就是一帧。
2)采样/量化,声音本质上是振动产生的声波,然后通过媒介传输到达耳朵。
声音三要素:
a、响度:波的振幅体现为响度;
b、音调:波的频率体现音调,人耳能听到的声音频率范围:20Hz - 2万Hz
c、音色:波的形状体现音色;
声音强度定义为声压,用分贝为单位描述。
自然界中的声音是一个模拟信号,需要采样和量化后转化为数字信号才能被计算机处理。
3)编码:简单理解为将原始的音视频数据压缩处理并增加媒体数据描述。视频的压缩可以大量减少数据大小, 视频的原始数据 = 1像素所占大小 x 每张图像的像素数量 x 帧数。视频原始帧一般为YUV格式,见01 YUV 颜色编码 详解 。
4)封装:简单理解为将音视频合并在一起,MP4格式是一种封装格式,H264是一种视频编解码规范。
5)传输:通过网络讲媒体数据量传递到远端,涉及的协议也比较多比如HTTP、RTMP、HLS等
实际音视频的业务场景远比上面一条播放链路复杂,拿媒体播放场景来说,需要处理各种传输协议、媒体格式、封装格式、异常处理,播放状态时序管理,多端状态同步和控制,音频焦点管理等,这些都会增加复杂度。
一般的开发模式都是基于或大量借鉴开源实现,比较重要的有FFMPEG实现了大部分的音视频编解码协议, WEBRTC实现了音视频编解码处理和远程视频流以及网络管理。
2、Media3
2.1、官方简介
引用Google官网描述:
“Jetpack Media3 is the new home for media libraries that enables Android apps to