前两节我们讲了带宽的计算方式、实时视频带宽的计算方式,同时还穿插着讲了视频的码流等。今天来讲讲视频的编码、封装及视频流的协议,讲完这些,其实实时视频方面软件层的大部分概念就能串起来了,硬件方面我们可以后面慢慢开展。
1.视频编码
我们先来看看什么是视频编码,根据《实时视频带宽的计算过程》一文中的描述,1920 * 1080、24FPS的视频每秒142MB,这显然太大了,所以需要视频编码来进行压缩。
我们通常提到的视频编码的格式有如下几种:H264 , VP8, AVS, RMVB,WMV,QuickTime(mov)等。
这些不同的格式有什么区别,这个我们暂时不用太纠结,因为我们今天的目的是通过理解将概念和流程串起来,所以我们只要知道我们平时看到的这些格式是编码,目的是为了视频压缩就可以了。
2.视频封装
什么是封装?通常单一路的视频或者音频是不需要封装的,只要播放端和服务器以相同的平均速度一收一发就可以了。但是如果视频+音频就会变的复杂,这时候两者需要同步,也就是我们说的嘴和声音得对的上,这时候就需要封装。换言之,封装是按照一定的规则把编码后的视频+音频封装起来,提供容器,便于播放、同步和存储等。
我们常见的视频封装格式包括MP4、AVI等。
那这么多的编码格式和封装格式有什么区别吗?当然是有的。
封装格式对视音频编码格式的支持程度是不一样的。比如说MKV支持比较多,RMVB则主要支持Real公司的视音频编码格式。(详细的我们就不讲了,大家可以自行百度)
-
封装格式和专利是有关系的,关系到推出封装格式的公司的盈利,所以格式众多。
-
封装格式对文件体积影响比较小,但是有一点影响。比如说MPEG2-TS格式会稍微大一点。
当然除了以上区别还有很多其他的区别,我们不多赘述,因为对我们而言,我们只要从宏观上理解即可,暂时不需要纵向深入。
3.传输协议
我们不对协议本身去做深入的研究,我们先来解释一下协议是什么,协议本身就是为了约定一些规则,便于大家使用,不同的规则有不同的特点和使用方式,我们来看看常见的RTSP、RTMP、HLS这三种协议在视频传输方面的应用吧。
3.1 HLS
HLS ( HTTP Live Streaming)苹果公司提出的流媒体协议,直接把流媒体切片成一段段,信息保存到m3u列表文件中,可以将不同速率的版本切成相应的片;播放器可以直接使用http协议请求流数据,可以在不同速率的版本间自由切换,实现无缝播放;省去使用其他协议的烦恼。缺点是延迟大小受切片大小影响,不适合直播,适合视频点播。
3.2 RTSP
RTSP (Real-Time Stream Protocol)由Real Networks 和 Netscape共同提出的,基于文本的多媒体播放控制协议。RTSP定义流格式,流数据经由RTP传输;RTSP实时效果非常好,适合视频聊天,视频监控等方向。
3.3 RTMP
RTMP(Real Time Message Protocol) 有 Adobe 公司提出,用来解决多媒体数据传输流的多路复用(Multiplexing)和分包(packetizing)的问题,优势在于低延迟,稳定性高,支持所有摄像头格式,浏览器加载 flash插件就可以直接播放。
3.4 总结
RTSP、RTMP、HLS都是在应用层的协议。 理论上RTSP 、RTMP、 HLS都可以做直播和点播,但一般做直播用RTSP RTMP,做点播用HLS。做视频会议的时候原来用SIP协议,现在基本上被RTMP协议取代了。 RTMP协议是Adobe的私有协议,未完全公开,RTSP协议和HTTP协议是共有协议,并有专门机构做维护。 RTMP协议一般传输的是flv,f4v格式流,RTSP协议一般传输的是ts,mp4格式的流。 RTSP传输一般需要2-3个通道,命令和数据通道分离,HTTP和RTMP一般在TCP一个通道上传输命令和数据。 RTSP+RTP主要用于IPTV或低延迟场景,比如监控摄像头,传输数据使用的是UDP或TCP,在网络环境比较稳定的情况下,传输效率是比较高的。 RTMP主要用于互联网音视频传输,它使用的是TCP传输,因为互联网环境相对较差,采用RTMP保证了视频的传输质量,但是其传输延迟相对较高,传输效率相对较低。 HLS主要是延时比较大,RTMP主要优势在于延时低。HLS可以用在IOS系统的APP上,微信公众号、小程序等也只能使用HLS。
4.思路串联
我们再回忆一下我们在《实时视频带宽的计算过程》一文中提到的,通常一段视频从录制到播放需要经过的过程:
-
摄像机录像
-
预处理(A/D转换)
-
预处理(YUV转换等)
-
压缩编码
-
数据封装及传输
-
解码
-
图像格式变换
-
播放
在此基础上我们再解释一下,我们本文讲了编码、封装、传输,而编码之前有预处理等动作,所谓预处理其实就是把摄像机拍到的物理画面转换成数字信号,还记得我们之前提过计算视频的带宽的环节吗,通过二进制的数字将视频表示出来,这就是预处理在做的是视频。到这一步位置,视频已经封装成了可以传输的信号了,那么接下来就是解码、图像格式转换和播放了,相信大家已经初步理解了这个过程的全流程,更细致更深入的研究就交给有需要的小伙伴吧,对于我们只是偶尔接触视频或需要购买供应商视频设备的产品同学,这些了解已经非常非常足够啦。
原创文章,作者:王得宇AIPM,如若转载,请注明出处:https://www.pmtemple.com/silence/13419/