视频封装格式与视频协议

一、概念引入

我相信音视频大家每天都会接触,从快播到爱奇艺,从B站再到抖音,我们的脚步从未停下。遇到心仪的视频,宅男们总是猥琐点击收藏或下载。突然某天手机内存告警,打开文件管理器一看,以 .MP4,.RMVB, .AVI 等知名后缀文件占据了所有内存的2/3。这里我就想问下,你还是我心目中之前那个猛男吗~.~

从上边的介绍,我们可以提取对视频的两种应用场景:

本地播放。先保存为文件,再使用本地播放器播放
在线观看。在线观看又分为 直播(直播即实时视频,只要终端接收流就从那一刻开始)和 点播(点播即编辑好的视频文件,存放在服务区或云上,被观众任意观看)
上边这两种应用场景,对于技术实现上来说有什么区别呢?

对于本地播放,每个视频都有自己的格式( .MP4,.RMVB, .AVI )等,这些格式代表的是 封装格式。简称视频格式,也称为 容器 。为了统一口径,本文统一称 视频封装格式 。何为封装格式?就是把视频数据和音频数据打包成一个文件的规范。仅仅靠看文件的后缀,很难能看出具体使用了什么视音频编码标准。总的来说,不同的封装格式之间差距不大,各有优劣。

在线观看其实是一种视频协议。也就是只有在有网络时通过浏览器或者移动端APP才能看到的视频。常见的直播流协议有:RTMP、RTSP、HTTP 等;常见的点播协议有:MP4、FLV、HLS 等。在连接视频协议时,除了音视频频流和metadata之外,可能还会携带播放的信令。

也有文章会把 视频协议 归入 视频封装格式。这么分类也有其道理:视频协议 和 视频封装格式 都同时携带了音视频和metadata,以及协议/格式需要的其他信息。以 FFMpeg 为例,并不区分视频格式和视频协议;但是 GStreamer 的话,还时需要指定 视频协议,但是不区分视频封装格式。

二、为什么会有视频编码

对于我们日常所看到的图形图像视频而言,其最终通过计算机,通过显示器呈现给我们的数据实际上是对应于屏幕上一个一个的点,我们称之为像素,而这种像素格式一般来讲就是 RGB 格式。RGB 想必大家并不陌生,其就是与自然界的三原色而对应。我们知道,红绿蓝三色的值在计算机中比较常用的表示方法是用 0-255 之间的一个数字来表示,那么表示红色在计算机中就需要 1 bytes 的空间,那么一个像素如果含有 RGB 三个分量,那么其就需要占用 3 bytes。

假设一张 1920 * 1080 大小的图片,其占用的字节数是 1920 * 1080 * 3 个 bytes,大约 5 MB。不知道大家是否知道视频的本质是什么,姑且解释一下,我们通过计算机看到的任何动态的东西,其本质就是一些静止的图片,当这些图片在单位时间内的数量比较大时,人眼将会看到其是连续动作的,一般这个临界值大概在 25 左右。那么也就是说一个视频的本质是每秒钟大于 25 的一些图片序列的集合。

动图封面
假设我们有一个 1920 * 1080 大小,时长 2 个小时的电影。我们不妨算一下其数据量的大小,每秒钟的图片张数姑且按 25 算,1920 * 1080 * 3 * 25 * 2 * 60 * 60,大约是 463 个G。而互联网的流量,是需要传播的,假设这一个视频要从 internet 内的 A 传送到 B,463 个 G 的带宽是什么概念。因此,我们便有了视频的编码,而所谓编码,其本质就是将数据压缩,进而减少带宽或存储空间的占用。

因此,他日若有人问你,编码是干什么的,你便可以回答:压缩。这也是本专栏讨论的核心内容。

三、视频播放器原理

既然有了编码,那么就会有对应的解码。视频在传输过程中经过媒体服务器可能发生再次编码和解码,但是无论如何,在用户的播放器内部还是需要解码才能观看,这里服务器编解码我们暂时不谈,主要来看看大家所熟悉的播放器编码实现原理。

视频播放器播放一个互联网上的视频文件,需要经过以下几个步骤:

解协议
解封装
解码视音频
视音频同步
如果播放本地文件则不需要解协议,为以下几个步骤:

解封装
解码视音频
视音频同步
它们的过程如图所示:
在这里插入图片描述

  1. 解协议

解协议的作用,就是将流媒体协议的数据,解析为标准的相应的封装格式数据。视音频在网络上传播的时候,常常采用各种流媒体协议,例如HTTP,RTMP,或是MMS等等。这些协议在传输视音频数据的同时,也会传输一些信令数据。这些信令数据包括对播放的控制(播放,暂停,停止),或者对网络状态的描述等。解协议的过程中会去除掉信令数据而只保留视音频数据。例如,采用RTMP协议传输的数据,经过解协议操作后,输出FLV格式的数据。

  1. 解封装

解封装的作用,就是将输入的封装格式的数据,分离成为音频流压缩编码数据和视频流压缩编码数据。封装格式种类很多,例如MP4,MKV,RMVB,TS,FLV,AVI等等,它的作用就是将已经压缩编码的视频数据和音频数据按照一定的格式放到一起。例如,FLV格式的数据,经过解封装操作后,输出H.264编码的视频码流和AAC编码的音频码流。

3.解码

解码的作用,就是将视频/音频压缩编码数据,解码成为非压缩的视频/音频原始数据。音频的压缩编码标准包含AAC,MP3,AC-3等等,视频的压缩编码标准则包含H.264,MPEG2,VC-1等等。解码是整个系统中最重要也是最复杂的一个环节。通过解码,压缩编码的视频数据输出成为非压缩的颜色数据,例如YUV420P,RGB等等;压缩编码的音频数据输出成为非压缩的音频抽样数据,例如PCM数据。

  1. 视音频同步

视音频同步的作用,就是根据解封装模块处理过程中获取到的参数信息,同步解码出来的视频和音频数据,并将视频音频数据送至系统的显卡和声卡播放出来。

四、音视频原始数据格式和编解码标准

4.1 音频的原始数据格式和编解码标准
音频的原始数据格式主要有如下几种:

PCM 格式
音频的编解码标准主要有如下几种:

MP3
AAC
AC-3
4.2 视频的原始数据格式和编解码标准
视频的原始数据格式主要有如下几种:

YUV 格式
RGB 格式
视频的编解码标准主要有如下几种:

H.264
H.265
MPEG2
这些原始数据格式和编解码标准初次看是有点陌生,但接触多了,也就逐渐熟悉了,先以掌握主流的编解码标准为主,这里也只是列出了其中一部分而已。

不过也不用着急,本节主要目的是给读者树立一个知识框架,由于内容较多,我会从下一篇文章开始慢慢拨开迷雾。

参考资料:

(1)视音频零基础技术学习方法:https://blog.csdn.net/leixiaohua1020/article/details/18893769

转载:https://zhuanlan.zhihu.com/p/115207948

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值