Hulu是一家2007年在美国上市的在线视频公司,提供会员制付费视频服务。其商业模式类似于中国的爱奇艺和优酷。今年5月,Hulu发布了最新的OTTTV直播应用——HuluLiveTV,目标是取代传统的有线电视服务,国内最近兴起的直播应用如YY、映客等。本文主要分享Hulu现有的视频系统、HuluOTT直播应用和基于DASH的直播系统三个方面,会涉及到在搭建基于点播的直播过程中的一些难点和经验。Hulu现有的视频系统Hulu终端和视频内容Hulu应用可以在电视、电脑、各种移动设备,甚至游戏机上访问,如下图:Hulu最开始也是做网站起家的,随着时间的推移,尤其是在美国家庭的客厅是用户经常看视频的地方,因此Hulu不断研发适配可以播放视频的硬件。点播内容主要是电视、电影、自制剧、少儿节目等专业制作的内容。Hulu商业模式Hulu主要有两种商业模式,一种是通过视频广告获取利润,另一种是通过注册会员获取利润。下图是电影广告的示例。不仅有常见的视频广告,还有可以直接与用户互动的部分,提示用户点击购买电影票。多年来,Hulu尝试了很多广告模式,包括很多在客厅设备上的互动形式。除了广告,会员也是Hulu赚钱的主要方式。用户通过注册成为会员并支付会员费,即可享受到最新最全的电视节目。点播系统面临的挑战和关键技术数字视频供应链视频供应链部分虽然用户不能直接看到,但对用户的影响是直接的。Hulu在美国市场最大的卖点是电视台播出的节目可以隔天同步上线。在这个看似简单的需求背后,对整个之前的处理周期有着很高的要求,比如上线速度、用户观看时间的管理等等,每个环节都要做好。面对供应链带来的挑战,Hulu建立了一套完整的视频转码系统,由这个分布式集群处理。多平台视频服务面对多平台播放的挑战,Hulu搭建了多平台视频服务,并制作了自己的播放器,以保证各平台的正常播放。统一的视频流可以支持所有平台。还有基于DASH的统一视频格式,在扩展性和打包效率上也表现不错。内容保护Hulu构建了基于DASH和CENC的多DRM视频系统,确保不同平台即使使用不同的DRM系统也可以使用统一的加密视频源。在广告插播网络不好的情况下,广告插播可能会导致视频重新缓冲,对用户造成不好的影响。Hulu的做法是基于DASHXLINK的动态广告插播机制,可以在流上将两者结合起来,播放器可以实时预加载,无需切换播放器、流等操作。视频播放质量保障为保证视频播放质量,Hulu建立了视频播放质量保障体系,包括客户端自适应动态码流切换、多CDN自动切换、实时视频QOS监控和响应系统等。现有的视频点播系统架构如下图所示,是围绕点播产品的系统架构:目前很多在线视频的架构基本类似,但Hulu的特殊之处在于:美国的内容厂商对内容安全的要求很高,要求所有的内容都有DRM加密模式,所以这里建立了比较完善的DRM许可,保证所有的内容都能安全播放。在广告的重要部分,单独设置广告服务器,保证用户有良好的广告体验,杜绝超长重复的广告。HuluOTT直播应用OTT是Hulu新推出的直播应用。直播在点播的基础上增加了很多模块,但还有很多困难需要克服。直播系统的要求如下:高清、高帧率直播。尝试尽可能接近IPTV体验:低延迟、快速启动和切换。24x7不间断直播服务。直播内容接近点播体验。基于DASH的直播系统为了满足OTT直播应用的需求,Hulu开发了基于DASH的直播系统。下面是一个简单的架构图:CP接入流通过TSOverRTP将内容发送到多码率直播编码器,编码器输出6~8种不同码率,最大128K,满足低带宽要求下的强度用户的使用。之后进入封装加密环节,封装成Apple和DASH格式。一方面,时间信息和元数据存储在实时数据库中用于MPD生成。另一方面,将实际的数据文件封装后,按照时间切割成小块,上传到源站,再上传到CDN。当客户端播放器准备好开始播放时,会从MDP服务器上获知哪些视频可以播放,同时通过CDN获取实际的视频文件。搭建直播系统的挑战在搭建直播系统的过程中,Hulu克服了各种困难。下面将主要分享“点播式”直播、瞬间用户激增、用户观看质量等挑战。“点播”直播Hulu希望在直播的时候达到点播的效果。在直播的同时,可以随意观看之前的视频,如下图:为了实现这种点播使用模式,Hulu采用了DASH视频格式进行处理。它主要做了以下几件事:时间和时间信息存储在Manifest中。MPD不仅要描述视频本身,还要描述发生了什么,比如现在有没有播放广告等等,这些都保存在Manifest中。使用视频分割、短段传输和分割音频。这样就可以在多个码率之间切换,同时调谐到任意播放位置。全平台覆盖。它可以支持几乎所有的客户端设备,例如网页、客厅设备和移动设备。如下图,是DASH格式:瞬时用户暴增应对瞬时用户直播暴增是大多数直播平台都会遇到的事情,Hulu也不例外。这样的事情在网上很常见。一个热门节目发布,比如HBO的新权力游戏,流量会呈现十倍的增长。应对这种情况最有效的方法是提高系统的弹性和可扩展性。解决方案是构建微服务架构,主要方法有以下几种:负载均衡。在全球建立三个数据中心节点,每个节点之间可以进行负载均衡。微服务框架。下面是一个基于Docker的可伸缩微服务框架的简单示意图:使用公有云来抗负载。当发现数据中心的负载无法承受时,就会溢出到公有云上。全服务状态监测和报警系统。当任何服务发现RPS发生变化时,都会发出告警,运维人员会第一时间处理。还有多CDN自动分流机制。底层是人工规则,比例根据目前国内的使用情况进行调整。当实际CDN访问失败时,会使用Fallback到另一个CDN,其他客户端也有自动分流算法调整。用户观看质量我们如何保证用户观看视频的质量?比如如何保证屏幕不会黑屏?Hulu建立了一套实时的视频质量监控系统,相关模块埋藏在各个客户端,模块会采集关键指标。下图是实时视频质量监控的流程图:一部分使用SBAK实时事件处理进入QOS进行下一步处理。此外,实时处理模块最终也会加入ElasticSearch。这样就可以观察到缓冲率、平均码率、直播时延等。如上图,不同的颜色其实是不同团队的职责。下图是对整个链路所有SLA的监控,以及对某项服务的监控。绿色表示情况比较好,红色表示有问题。当数字变大时,必须引起注意。这里有各种各样的指标,基本上所有的系统都有这样一个对应的监控系统,每个团队都可以看到自己团队的整体状态。以上内容根据李斌老师在WOTA2017《高性能直播系统架构》的演讲内容整理而成。专注于架构、算法、运维等技术领域,有兴趣投稿或寻求报道请联系wangxy@51cto.com。主导Hulu视频核心技术研发,参与并主导Hulu多平台DASH播放器、视频播放质量监控与分析系统、OTTMVPD系统。清华大学博士期间,一直从事互联网视频相关领域的研发工作。曾任北京闪动科技有限公司技术总监,公司出品的“Dopool手机电视”客户端累计激活下载量超过1亿。
