本课程主要从
- 音视频采集
- 音视频编码
- 音视频协议封装传输
- 音视频协议解封装
- 音视频解码
- 音视频播放
关于Jessibuca
- 官网地址:jessibuca.com
- Demo: Demo
- Doc:Doc
- Github地址:Github
关于JessibucaPro
- 地址:JessibucaPro
- Demo: Demo
- AI:AI
- 插件:插件
第二章:音视频编码
主要讲音频和视频在web端的几种编码格式,以及如何在web端进行编码。
音频编码
wav
WAVE是录音时用的标准的WINDOWS文件格式,文件的扩展名为“WAV”,数据本身的格式为PCM或压缩型,属于无损音乐格式的一种。
WAV是最接近无损的音乐格式,所以文件大小相对也比较大。
在web端中,可以通过编码PCM->设置WAV文件头->加入PCM数据体
方式实现 wav 文件的封装。
wav视频格式封装demo:encode-to-wav
mp3
MP3是一种音频压缩技术,其全称是动态影像专家压缩标准音频层面3(Moving Picture Experts Group Audio Layer III),简称为MP3。
它被设计用来大幅度地降低音频数据量。利用 MPEG Audio Layer 3 的技术,将音乐以1:10 甚至 1:12 的压缩率,压缩成容量较小的文件,而对于大多数用户来说重放的音质与最初的不压缩音频相比没有明显的下降。
关于MP3的编码原理非常的复杂,编码算法由混合滤波器组(子带滤波器和MDCT),心理声学模型,量化编码(比特和比特因子分配和哈夫曼编码)组成。
在web端中,可以借助lamejs实现mp3格式封装。
mp3格式封装demo:encode-to-mp3
g711a(pcma)/g711u(pcmu)
对于g711,它是国际电信联盟ITU-T定制出来的一套语音压缩标准,它代表了对数PCM(logarithmic pulse-code modulation)抽样标准,主要用于电话。它主要用脉冲编码调制对音频采样,采样率为8k每秒。它利用一个 64Kbps 未压缩通道传输语音讯号。 起压缩率为1:2, 即把16位数据压缩成8位。G711是主流的波形声音编解码器。
G711标准下面有两种压缩算法,一种是u-law algorithm(又称offien u-law ,ulaw,mu-law)
G711的内容是将14bit(uLaw)或者13bit(aLaw)采样的PCM数据编码成8bit的数据流,播放的时候在将此8bit的数据还原成14bit或者13bit进行播放。
g711a(pcma)/g711u(pcmu)格式封装的demo:encode-to-g711
Opus
Opus是一个有损音频压缩的数字音频编码格式,由Xiph.Org基金会开发,之后由互联网工程任务组(IETF)进行标准化,目标是希望用单一格式包含声音和语音,取代Speex和Vorbis,且适用于网络上低延迟的即时声音传输,标准格式定义于RFC 6716文件。 Opus格式是一个开放格式,使用上没有任何专利或限制。
在web端,需要借助于webassembly 来实现 pcm 编码成 opus
Opus格式封装的demo:encode-to-opus
aac
AAC是高级音频编码(Advanced Audio Coding)的缩写,出现于1997年,最初是基于MPEG-2的音频编码技术。由Fraunhofer IIS、Dolby Laboratories、AT&T、Sony等公司共同开发,目的是取代MP3格式。2000年,MPEG-4标准出台,AAC重新集成了其它技术(PS,SBR),为区别于传统的MPEG-2 AAC,故含有SBR或PS特性的AAC又称为MPEG-4 AAC。
音频文件格式有 ADIF(Audio Data Interchange Format) 和 ADTS(Audio Data Transport Stream)
因为我们主要传输流格式,所以主要讨论 ADTS(Audio Data Transport Stream) 格式。
如果想要把pcm的音频数据编码成aac格式的音频数据,则需要借助于ffmpeg来实现,这里就不做demo演示了。
视频编码
h264
H.264,又称为MPEG-4第10部分,高级视频编码(英語:MPEG-4 Part 10, Advanced Video Coding,缩写为MPEG-4 AVC)是一种面向块,基于运动补偿的视频编码标准 。 到2014年,它已经成为高精度视频录制、压缩和发布的最常用格式之一。
在web端可以借助VideoEncoder API 将视频编码成H264格式的视频数据。
h264格式编码的demo:encode-to-h264
h265
265(HEVC,High Efficiency Video Coding,高效率视频编码),是新一代视频编码技术。 它围绕现有视频编码标准H. 264,保留原来的某些技术,使用新技术对某些方面进行改进优化,如码流、编码质量、延时等,提高压缩效率、增强鲁棒性和错误恢复能力、减少实时的时延、降低复杂度等。
在web端可以借助VideoEncoder API 将视频编码成H265格式的视频数据。
h265格式编码的demo:encode-to-h265
VP8
VP8是一个开放的影像压缩格式,最早由On2 Technologies开发,随后由Google释出。 同时Google也释出了VP8编码的实作函式库:libvpx,以BSD授权条款的方式发行,随后也附加了专利使用权。 而在经过一些争论之后,最终VP8的授权确认为一个开放原始码授权。
在web端可以借助VideoEncoder API 将视频编码成VP8格式的视频数据。
VP8格式编码的demo:encode-to-vp8
VP9
VP9是谷歌公司为了替换老旧的VP8影像编码格式并与动态专家图像组(MPEG)主導的高效率影片编码(H. 265/HEVC)競爭所開發的免费、开源的影像編碼格式。 免费格式? VP9主要被用於Google旗下著名的影音分享網站YouTube。
在web端可以借助VideoEncoder API 将视频编码成VP9格式的视频数据。
VP9格式编码的demo:encode-to-vp9
AV1
AV1 是最先进的视频编码格式,与流行标准H. 264 相比,它提供了显著的性能提升和更高的保真度。 在NVIDIA 安培体系结构上引入的视频编解码器SDK 扩展了对AV1 解码的支持。 现在,有了视频编解码器SDK 12.0 , NVIDIA Ada 代GPU 支持AV1 编码。
在web端可以借助VideoEncoder API 将视频编码成AV1格式的视频数据。
AV1格式编码的demo:encode-to-av1