作者:Karen Casella, Phillipa Avery, Robert Reta, Joseph Breuer
翻译:马雅狄
审校:包研
迫于用户对移动设备下载播放视频的需求,Netflix终于妥协了。如何保护版权的同时,又不影响用户观看体验?播放许可团队构建出了一套新的用于Netflix下载体验的许可发行系统。本文发布于Netflix官方博客,分为两部分,LiveVideoStack团队对其进行了摘译,点击【阅读原文】查看原博客。
2016年早些时候,Netflix的几个团队被问到:“如果让会员在手机上下载和离线观看内容,会能怎样呢?”
对于播放许可团队,这意味着我们需要提供一套内容许可系统,它将会允许会员的设备存储和解密,用于离线观看的下载内容。要想在信息安全的情况下实现,需要一个新的服务,这套新服务是需要有状态的,尽管我们当前所有的系统是无状态的。
“很好!开发这套系统需要多长时间呢?”
2016年11月末,也就是在最初问题被提出后的9个月后,Netflix成功发布了这个允许用户在移动设备上下载并播放内容的新的下载功能。多个产品和工程师团队协助设计和开发了这项新功能,这个新功能对Netflix的全球所有会员同时上线。
此次这一系列我们的发文将会提纲要领地概括出我们为什么以及如何构建出一套新的用于Netflix下载体验的许可发行系统。此系列的第一篇文章,我们将概述Netflix下载项目和这些下载变化对Netflix的内容许可团队的意义。后续文章将会深入讲解我们创建和满足这些需求的具体实现方法。
视音频流播放是如何工作的
当某会员在Netflix上下载流内容时,在他可以开始播放内容之前,我们需先从后端服务器发送数据到他的设备上。这些数据是在我们的播放服务系统中,经过了一系列的复杂的设备与服务器间交互后发送的,过程可以概括如下:
播放一段视频,会员的设备会取回内容相关的所有元数据。回复内容对象是播放上下文,同时包括这些数据,例如内容图像集,内容流下载的URL(见《Netflix如何指挥1/3的互联网流量》,实现优秀的流播放过程和系统的整体控制 https://www.infoq.com/presentations/netflix-streaming-arch)。流传输出的数据经过DRM技术加密,并且需在其可以播放前完成解密。这是通过许可流程实现的,许可流程中设备为某一视频申请一个许可,这个许可之后用于此设备上的内容解密。在流媒体播放场景中,许可是短期的,只能使用一次。当会员观看完内容后,许可就被认为使用过了并不能再用于播放了。
Netflix支持几种不同的DRM技术,对内容进行许可操作。每种技术都依靠他们自己的微服务,需要独立扩容和部署技巧。这些许可层需要尽可能的鲁棒性和可靠性;不过在失效或请求延迟的情况下,Netflix的许多服务可能会降级,而许可服务是不可能有缺陷的。如果许可失效,那就不能播放。为了降低失效和弹性的风险,并可大规模扩展,许可服务通常是无状态的。
下载
下载流程与音视频流的工程稍有不同。与流数据的过程相类似,我们触发了一个下载内容的播放上下文(元数据)。一旦我们有了内容的元数据,我们可以开始如下描述的许可流程:
在查验了视频的下载可用性后,用户的设备尝试获得一个许可。然后执行多个后端的可用性验证,看会员是否允许下载内容。如果所有的商业规则都满足了,我们返回一个许可和其它离线播放内容所需要的附加信息,从而设备可以开始下载加密后的数据字节。
用户下载内容的许可同样有别于流数据的过程——它会在设备上持续一段更长的时间,并且可以被多个播放session重复使用。
一旦标题在设备上下载了,有如下的生命周期:
当用户每次点击播放已下载的内容时,应用就将session事件排队,提供观看体验过程中的相关信息,并且当下次会员上线登录时,发送过来。然后每个标题在一定限制的时间后,最初收到的可以下载内容的许可就过期了。此时,许可依据内容的情况,可以重新再次被申请,这需要设备向后台要一个新的许可号。这个新申请的,同样需要遵循之前的下载商业规则,如果成功了,离线内容可以接着播放。一旦会员删除了内容,许可将被安全删除掉(释放掉),这样视频将不再会被离线播放。
各种限制
Netflix与全球的许多电影制作商共同工作,为我们的会员提供最好的内容。下载内容的限制项通常要比流数据更复杂,而且在电影制作商之间也有所变化。关于一个视频能观看多久的需求,我们就有许多的分类,依据是基于设备的下载次数或每个会员的下载次数,而且视频能下载几次或者在一段时期内能观看几次的限制也是不尽相同的。
我们同样有下载观看相关的内部商业限制,例如内容可以被下载的设备的数量。我们必须对Netflix会员下载的所有类别的电影,都应用这些限制。每次会员下载了一个视频或是想在最初的许可过期后延长可观看的时间,我们必须在满足合作伙伴的所有限制条件下,并考虑用户的下载交互习惯,使许可变成有效状态。如果会员无法满足任一需求,后台将回复下载请求失败的原因。
开始下载
介绍了下载功能,我们需要重新考量,我们保持状态的方法。下载功能要求我们,应使会员基于以往下载历史的播放,处于正常播放状态。我们还需要一个新的状态服务,可以让许可服务向该状态服务求证商业规则的可用性。我们设计这个新的状态服务系统的时间非常短,这个状态系统可以加强商业规则和未来可能定义的需求集。
此刻我们有一个非常好的机会,可以从最初的设计稿开始,去创建一个基于当前百亿用户量的新服务,在有限的时间内上线使用。激动人心的时刻就摆在我们面前啊!