第一章 音视频基础知识
第一章 音视频基础知识
此为该系列第一章
目录:https://heyanle.com/archives/androidyin-shi-pin-kai-fa
1.1 视频解码
两个系列:
- MPEG:由 ISO 下属的 MPEG (运动图像专家组)开发的一系列视频编码。有 MPEG1(VCD 使用),MPEG2(DVD使用),MPEG4(DVDRIP 使用其变种 DivX、XviD 等),MPEG4 AVC(正热门)。还有音频解码方面,如 MPEG Audio Layer 1/2,MPEG Audio Layer 3(MP3)、MPEG-2 ACC、MPEG-4 ACC 等。这里 DVD 的音频没采用 MPEG。
- H.26X 系列:由 ITU(国际电传视讯联盟)主导,侧重网络传输,只有视频编码,如:H.261,H.262,H.263,H.263+,H.263++,H.264(与 MPEG4 AVC 合作的结晶)
1.2 音频编码
常见有三个,AAC、MP3、AC3
- AAC:一种专门为声音数据设计的文件压缩格式,采用全新算法进行编码,更高效,更加具有性价比。为有损压缩。同时随着 USB3.0 和 16 G 以上 大容量 MP3 的普及,AAC 小巧的优势正逐渐丧失。
- MP3:是一种音频压缩技术。利用人耳对高频信号不敏感的特性,将不同频段使用不同的压缩率,能在做到 1:10 甚至 1:12 的压缩率的前提下最大限度的保证音乐播放的效果。
- AC3:是 Dolby 实验室所发展的有损音频编码格式。被广泛应用于 5.1 声道。AC3 的普及率很高,284~448kb/s 的码率应用于激光唱片和 DVD,640kb/s 的码率广泛应用于电影院。
1.3 多媒体播放组件
Android 的多媒体播放组件包括 MediaPlayer、MediaCodec、OMX、StageFright、AudioTrack 等
- MediaPlayer:播放控制
- MediaCodec:音视频编解码
- OMX:多媒体部分采用的编解码标准
- StageFright:是一个框架,在 Android 中以共享库的形式存在(libstagefright.so),其中的 module NulPlayer/AwesomePlayer 可用来播放音视频。同时提供了许多 api 供上层(Java/JNI)调用
- AudioTrack:音频播放
IOS 的 pass
1.4 常见的多媒体框架及解决方案
常见的多媒体框架及解决方案有 VLC、FFmpeg、GStreamer 等
- VLC:Video LAN Client 是一款自由、开源的跨平台多媒体播放器及框架
- FFmpeg:多媒体解决方案,广泛用于音视频开发中
- GStreamer:一套构建流媒体应用的开源多媒体框架
1.5 相关知识点
1.5.1 帧率
Frame Rate 是用于测量显示帧数的亮度,单位为 fps 或 hz
一般来说 30fps 就可以接受,60fps 则可以显著提升交互感和逼真感,但是超过 75 fps 就不容易察觉有明显流畅度提升。如果 帧率 超过屏幕刷新率,则会浪费相关算力。
1.5.2 分辨率
视频分辨率是指视频成像产品所形成的的图像大小或尺寸
1.5.3 刷新率
分为垂直刷新率 与 水平刷新率。一般指垂直刷新率,表示屏幕上一秒钟重绘多少次,以赫兹为单位。刷新率越高,画面越稳定,图像显示越清晰,对眼镜影响小。刷新率越低,图像闪烁和抖动的就越厉害,眼睛疲劳的块。如果能达到 80hz 以上,基本上就可以完全消除闪烁和抖动。(就是有点贵)
1.5.4 编码格式
编码的目的是压缩数据量,采用编码算法压缩冗余数据
- MPEG(MPEG-2、MPEG-4)
- H.26X(H.263、H.264/AVC、H.265/HEVC)
1.5.5 封装格式
编码后的音视频数据封装到一个文件格式中,如 MKV、AVI、TS 等
1.5.6 码率
比特率,单位时间内播放连续的媒体的比特数量。
文件大小 = 码率 * 时长
这里可以看出码率单位为 b/s
1.5.7 画质与码率
码率越大,画质越好,视频越流畅?错误,与编码算法,视频质量有关
1.5.8 DTS 与 PTS
- DTS:Decode Time Stamp,标示读入内存中的比特流在什么时候开始送入解码器中进行解码
- PTS:Presentation Time Stamp,度量解码后的视频帧什么时候被显示出来
1.5.10 视频帧与音频帧
视频帧常见的分为 I、P、B 帧
- I 帧 又叫关键帧,这一帧的画面数据完整保留
- P 帧 单向差别帧,这一帧的数据表示为这一帧画面与前一个关键帧的差别,渲染时根据前一帧与差别综合渲染
- B 帧 双向差别帧,记录本帧与前后帧的差别。这种帧压缩率较高,但解码时 GPU 压力较大,因为还需要提前渲染之后的帧。
音频帧的定义与编码格式有关
- 对 PCM(未经编码的音频数据) 来说,不需要帧的概念,根据采样率和采样精度就可以播放
- 对 AMR 帧来说,所有帧都是 I 帧,它规定每 20ms 为一帧,每一帧都是独立的,有可能采用不同的编码算法与不同的编码参数
- MP3 帧比较复杂,每一帧的长度可能确定也可能不确定,由比特率决定,每一帧又分为帧头和数据两部分,帧头记录了比特率、采样率、版本等,每一帧相互独立。
1.5.11 量化精度
表示将模拟信号分成多少个等级,量化精度越高、音乐的压振幅越接近原音乐。量化精度单位是 比特,CD 标准量化精度是 16 比特,DVD 的标准量化精度是 24 比特。也可理解为一个采样点用多少 bit 表示。
1.5.12 采样率
指每秒采样点个数(8000/44100Hz),单位为 赫兹
1.5.13 声道、
常见的声道有 单声道、立体声道、4 声道、5.1 声道、7.1 声道
- 单声道
- 立体声道:左右两个单声道
- 4 声道:前左、前右、后左、后右四个声道,听众在中间。如果再加一个低音音响,则为 4.1 声道
- 5.1 声道:左右环绕、左右声道、中置声道加一个低音音响,则为 5.1 声道
- 7.1 声道:前置左右、侧边环绕左右、后置环绕左右、中置声道再加一个低音音响,为 7.1 声道