编者按:作为一个历经了21个年头的播放器,VLC旺盛的生命力使其在今天仍然有着一席之地。但是21年前的定位所带来的与当今主流媒体播放器的差距依然不可小觑。LiveVideoStackCon上海站大会我们邀请到了腾讯云客户端开发工程师赵志立,为我们分享他们是如何让VLC走进低延迟的大门的以及VLC的未来是怎样的。
文/赵志立
整理/LiveVideoStack
大家好,我是来自腾讯云音视频的赵志立。本次为大家带来的分享的主要内容是我与VLC以及低延时直播之间的一些故事。
低延时直播是当下大热的话题,一提到VLC,许多人第一反应都是与低延时直播不沾边,确切的说,VLC是低延时直播的对立面。这样的观点无疑是正确的,不过今天我就来为大家介绍下VLC与VideoLan社区是如何将不沾边的VLC做到低延时“及格分数”的。
下面主要从VLC简介、全链路低延时直播以及VideoLan开源社区三个方面进行介绍。
一、VLC简介VCL是具有悠久历史的播放器。从年起,到年以GPL协议发布,直到现在已经走过21个年头。VLC几乎支持了所有能用的系统,从广为人知的Windows到鲜为人知的OS2,时至今日仍有开发者在持续不断更新维护着。
虽然VLC通常被作为播放器使用,但历史上的VLC其实是由两个部分组成的。一个是VLC客户端,另一个是VideoLanServer(VLS),在发展的过程中两个部分逐渐合并,才有了今天的VLC。在国外VLC经常用于投屏,例如VLC支持Chromecast投屏协议。
VLC的架构建立在插件化的基础上,其核心很小,仅提供内存管理、网络基础操作、多线程封装和时钟同步等功能,其它例如输入设备、传输协议、封装格式、编码格式、渲染方式等都是通过插件实现的,是M*N*O*P的自由组合方式。
很多人误解VLC只是FFmpeg的简单封装,但事实上VLC诞生比FFmpeg早,所以这种观点不攻自破。VLC和FFmpeg关系十分紧密,FFmpeg是VLC的重要组成部分,但不是必须的,VLC的解码、解封装均有多种方式实现。
VLC和Gstreamer也有着千丝万缕的联系。VLC可以使用Gstreamer的codec进行解码,VLC和Gstreamer都具有插件化的特性,但相比之下,VLC的插件化刚刚好,Gstreamer的插件化就有一些“走火入魔”了。
这是VLC版本演进的过程。现在广泛使用的是3.0稳定版,3.0版本已经可以支持如VR、HDR和AV1等功能。并且3.0版本对移动端的硬件解码进行了全面的加速支持。
4.0开发版还未发布。对于我个人来说,最为重要的升级是重新设计了Clock时钟同步模块。另外用户较为关心的UI界面也进行了较为现代化的设计,在低延时方面也有很多的改进。
下面简单介绍一些VLC的功能。VLC可以在命令行里播放视频,用字符来显示像素;还有幻觉滤镜;还可以在播放视频时暂停,玩一个拼图游戏;VLC可以外挂多个视频同时播放。这样就可以在开发过程中进行视频的对比。下面的两张图是我们在工作时对腾讯云HDRtone-mapping效果的对比。
二、VLC与低延迟
关于VLC和低延迟直播我们主要从低延迟直播行业背景、传统播放器与在线流媒体对比、全链路低延时分析、VLC低延时优化、VLC0延迟概念验证等几个方面进行介绍。
1、低延迟直播行业背景
这是年Bitmovin做的一个调查,排在第一名的毫无疑问就是低延迟。
2、传统播放器vs在线流媒体
因为VLC诞生比较早,所以它的目标定位和现在的播放器定位略有不同。VLC支持的多样场景远超其它播放器,低延迟直播的场景仍然属于小范围内的场景。当前在线流媒体对QoS和QoE十分重视,而VLC是不考虑首帧、快进快退的速度的。VLC支持各种网络传输协议,内置就包括Samba、FTP等的支持。VLC的音视频同步时钟、缓冲设计来自早期DVB时代。又因为其属于开源驱动,在开源的前提下实现向下兼容,对于低延迟这个目标来说是十分困难的。
3、全链路低延迟分析
下面系统地介绍全链路低延迟。端到端在英文中有另一个名称——GlasstoGlass。第一个Glass指的是摄像头,第二个Glass指的是显示器。其中经过采集、编码、封装、传输到服务端,再经过传输、解封装、解码、渲染。每一个过程都有很多种技术可以选择。
我们先从两个Glass入手。CameraLatency我本人研究不太多,这里不过多赘述。播放器在进行音视频同步时,大家往往会让某一帧在到一定时间点时才渲染。但从系统拿到这一帧,再渲染输出,这里还存在一部分延迟,而这一部分延迟,往往会被人们所忽略。进行安卓系统开发的同学可以