音视频前端开发基础知识(二)

415 阅读7分钟

上一讲视频的基础概念,这一讲视频的容器和编码。

image.png

采集

一般我们用手机、摄像机进行视频采集。我们采集的视频是由一帧一帧图像所组成的,连起来的越快看着越流畅,用 帧率(就是每秒播放图片的数量 FPS)来衡量视频的流畅度。那么根据图片大小的算法就能算出视频的大小。

视频的大小 = 时长(秒) x 帧率(FPS)x 图片大小

注:人眼每秒24帧就觉得是舒适的。

那么图片大小如何计算?

图片大小 = 像素数量 × 像素大小

像素大小又跟像素深度有关系,1bit就只有黑和白,而2bit中间就又多了灰,以此类推,比特越高则过度越平滑。我们使用的彩色(RGB/YUV)是8bit * 3 = 24bit

image.png

那么一张1920 x 1280分辨率 颜色模式为8bit通道的图片 大小为:1920 x 1280 x 24 / 8 / 1024 / 1024 = 7.03125 MB

  • bit(比特,1比特代表1个位)是信息的最小单位,是二进制数的一位包含的信息或2个选项中特别指定1个的需要信息量。一般来说,n比特的信息量可以表现出2的n次方种选择。
  • Byte(字节)是计算机信息技术用于计量存储容量的一种计量单位,作为一个单位来处理的一个二进制数字串,是构成信息的一个小单位。最常用的字节是八位的字节,即它包含八位的二进制数。一个位就代表一个0或1(即二进制),每8个位组成一个字节(Byte,简写为B)
  • 1 Byte = 8 bit

一般来说,数据传输大多是以“位”(bit,又名“比特”)为单位的,这也就是为什么网速的单位都是Mbps而不是MB/s了,而数据存储是则以“字节”(Byte)为单位,比如硬盘的读写速度一般就用的是MB/S。

通常,运营商说的1M宽带的M是指Mb/s,也就是Mbps,换算一下的话,1M宽带下载速度也就是125KB/s,再去掉损耗的话就是120KB/s左右。以此类推,10M宽带的最快下载速度是1.25MB/s,100M的宽带最快下载速度是12.5MB/s。

编码

视频为什么需要编码?编码其实就是为了压缩视频体积。因此就要设计各种算法,将视频数据中的冗余信息去除。

通常来说,视频里面的冗余信息包括:

  • 空间冗余:图像相邻像素之间有较强的相关性,比如一帧图像划分成多个 16x16 的块之后,相邻的块很多时候都有比较明显的相似性。
  • 时间冗余:视频序列的相邻前后帧图像之间内容相似,比如帧率为 25fps 的视频中前后两帧图像相差只有 40ms,前后两张图像的变化较小,相似性很高。
  • 视觉冗余:我们的眼睛对某些细节不敏感,对图像中高频信息的敏感度小于低频信息的。可以去除图像中的一些高频信息,人眼看起来跟不去除高频信息差别不大(有损压缩)。
  • 编码冗余(信息熵冗余):一幅图像中不同像素出现的概率是不同的。对出现次数比较多的像素,用少的位数来编码。对出现次数比较少的像素,用多的位数来编码,能够减少编码的大小。比如哈夫曼编码。

这样不在分析,大家可以看视频编码原理

常见的视频编码有:

编码格式简介
H.264H.264是由国际电信联盟和国际标准化组织/国际电工委员会运动图像专家组联合开发的视频压缩技术或编解码器(如MPEG-4 Part 10,高级视频编码或AVC)。因此,术语H.264和AVC表示同一事物,并且可以互换。
H.265HEVC代表高效视频编码。用来以替代H.264/AVC编码标准。
AV1AV1(Alliance for Open Media Video 1)是由AOM(Alliance for Open Media,开放媒体联盟)制定的一个开源、免版权费的视频编码格式,目标是解决H265昂贵的专利费用和复杂的专利授权问题并成为新一代领先的免版权费的编码标准。此外,AV1是google制定的VP9标准的继任者,也是H265强有力的竞争者。
VP9VP9是WebM Project开发的下一代视频编码格式 。VP9支持从低比特率压缩到高质量超高清的所有Web和移动用例,并额外支持10/12位编码和HDR。

封装

容器就是编码器生成的多媒体内容(视频,音频,字幕,章节信息等)混合封装在一起的标准。

容器有两个作用:

  • 一是使多媒体内容同步播放变得简单
  • 二是作为多媒体内容提供索引,如果没有容器存在的话一部影片你只能从一开始看到最后,不能拖动进度条(当然这种情况下有的播放器会话比较长的时间临时创建索引),而且如果你不自己去手动另外载入音频就没有声音

常见容器格式有:

容器格式简介
MP4MP4目前被广泛用于封装 h.264/h.265 视频和 AAC 音频,是高清视频的代表
AVI(Audio Video Interleaved)AVI文件将音频(语音)和视频(影像)数据包含在一个文件容器中,允许音视频同步回放。类似DVD视频格式,AVI文件支持多个音视频流。
FLV(Flash Video)FLV(Flash Video)是现在非常流行的流媒体格式,由于其视频文件体积轻巧、封装播放简单等特点,使其很适合在网络上进行应用,现各视频网站大多使用的是FLV格式。
TS、M3U8HLS协议包括两个重要的构建块。一种是视频文件的存储方式 (ts),另一种是M3U8索引文件,每一个 .m3u8 文件,分别对应若干个 ts 文件,这些 ts 文件才是真正存放视频的数据,m3u8 文件存放了一些 ts 文件的配置信息和相关路径,当视频播放时,.m3u8 是动态改变的,video 标签会解析这个文件,并找到对应的 ts 文件来播放。一般为了加快速度,.m3u8 放在 web 服务器上,ts 文件放在 CDN 上
WebMWebM是一种专为Web设计的开放,免版税的媒体文件格式。WebM定义文件容器结构,视频和音频格式。WebM文件包含使用VP8或VP9视频编解码器压缩的视频流和使用Vorbis或 Opus音频编解码器压缩的音频流。
OGVOGV文件格式是以Xiph.Org开源Ogg容器格式保存的视频文件。它包含可能使用一种或多种不同编解码器的视频流,例如Theora,Dirac或Daala。可以使用各种媒体播放器来播放OGV文件。
MOVMOV视频容器是Apple Quicktime中经常使用的一种常见的多媒体格式,它使用Apple Computer开发的专有压缩算法来保存电影和其他视频文件,该算法与Macintosh和Windows平台都兼容。MOV容器可以存储不同的视频数据格式,例如MPEG-4和OGG。

mp4

通过以下网址可以查看 gpac.github.io/mp4box.js/t… 解释 MP4 容器内部结构。

image.png

flv

flv parse专业工具分析了一个实际的flv文件。

m3u8

ffmpeg下载 或者 web的网络请求查找 m3u8 就可以查看。