抖音技术能力大揭密!钜惠大礼、深度体验,尽在火山引擎增长沙龙,就等你来! 立即报名>> 了解详情
写点什么

Netflix 如何利用开源软件打包视频流

2021 年 6 月 01 日

Netflix如何利用开源软件打包视频流

本文最初发布于 Netflix 技术博客,经授权由 InfoQ 中文站翻译并分享。


在之前的博文中,我们在 Netflix 的同事解释了如何优化4K视频流如何改进传统视频流,以及最近的,如何使用新的音频编解码器为我们的会员提供更好的听觉体验。在所有这些情况下,在通过内容分发网络 Open Connect 传送之前,我们需要对那些屡获殊荣的电视节目、电影和纪录片(如《王冠》)进行打包,以便可以为我们的会员提供一些关键特性。在这篇文章中,我们将解释这些特性以及我们如何依靠获奖的标准格式和开源软件来实现它们。


关键打包特性

在典型的流管道中,打包是在编码之后进行的步骤,如下图所示。编码器的输出是一个字节序列,称为基本流,要对它进行解析需要了解基本的流语法。例如,检测 AV1 视频流中的帧边界需要能够解析所谓的开放比特流单元(OBU)并识别时间分隔符 OBU。但是,在客户端设备上执行的高级操作,例如搜索,则不需要了解基本语法,并且可以从编解码器无关的格式中受益。打包步骤旨在产生这样一种与编解码器无关的字节序列,称为打包格式或容器格式,在某种程度上,无需深入了解编码格式就可以对其进行操作。



图 1:流预备管道的简化架构


在播放音频、视频和定时文本时,我们应该为会员提供的一个关键功能是同步。在 Netflix,我们努力提供一种体验,让你永远不会在听到《王冠》中相应的对话之前,看到英国女王的嘴唇在动。同步是通过信号的基本元素来实现的,比如在打包内容中提供的时钟或时间线、时间戳和时间刻度。


会员不是简单地从头到尾观看节目。当继续观看《布里奇顿》时,他们会搜索。他们在观看《女王的棋局》时会重放他们最喜欢的棋局。当他们迫不及待地观看《亚森·罗宾》时,他们会跳过介绍和回顾。他们会在观看互动节目《你与荒野》时回放。由于音频或视频压缩技术的性质,播放器不可能从会员想要的地方开始解码流。其底层机制是,播放器必须在流中找到可以开始解码的点,并尽可能快地解码,找到用户的搜索点之开始播放。这是打包的另一个基本特性:信号帧类型,特别是随机接入点。


当会员的孩子在父母的汽车后座上观看《神偷卡门》时,或者更一般的来说,当网络吞吐量变化时,我们运用了自适应流媒体技术来提供这种网络条件下最佳的观看体验。自适应流媒体技术要求在对各种质量的流进行编码时遵循共同的约束条件,但它们也依赖于打包的另一个关键特性“索引”来提供无缝的质量切换。索引让播放器可以只获取新流的相应片段。


我们在打包的内容中提供了许多其他的信号元素,以期让会员可以尽快开始观看。解密模块需要用合适的方案和初始化向量进行初始化。硬件视频解码器需要提前知道视频流的分辨率和位深,以便分配解码缓冲区。渲染管道需要提前知道音频流的扬声器配置,或者视频流是 HDR 还是 SDR。能够标记所有这些元素也是现代打包格式的一个关键特性。


标准和开源软件的作用

我们的 2 亿多会员在各种各样的设备上观看 Netflix,从智能手机到笔记本电脑,再到电视和由大量合作伙伴开发的许多其他设备。我们要减少在新设备上播放的阻力,并确保我们的内容在很长一段时间内可以在旧设备上播放,这非常重要。标准在这里发挥了关键性的作用。ISO 基本媒体文件格式(ISOBMFF)是娱乐行业的关键打包标准,最近获得了美国国家电视艺术与科学学院(NATAS)颁发的技术与工程艾美奖®


ISOBMFF 提供了上面提到的所有关键打包特性,而且历史已经证明,它是通用且可扩展的,它具备添加新信号特性和编解码器支持的能力。使用成熟编解码器(如 AVC 和 AAC)编码的流可以通过 ISOBMFF 文件传输,但该规范也会定期扩展,以支持最新的编解码器。Netflix 的媒体系统团队积极致力于 ISOBMFF 的开发、维护和采用。例如,Netflix 主导了ISOBMFF中AOM AV1视频流的传输规范


经过 20 多年的发展,ISOBMFF 为各种用例积累了大量的技术工具。图 2 通过“brand”的概念说明了现如今 ISOBMFF 的复杂性,这个概念类似于音频或视频标准中的配置文件。最初,该标准有限且可以良好地嵌套,但现在已经非常广泛,并向各个方向发展。



图 2:说明 ISOBMFF 第 6 版的复杂性。每个矩形代表一个“brand”(由粗体的四字符代码表示)和它所需的工具集(由“+”号行表示)。Brand 是嵌套的。所有内层 brand 的工具都是外层 brand 所需要的。


对于 Netflix 的流媒体服务,我们依赖于由公共媒体应用程序格式(CMAF)标准确定的这些工具的一个子集,以及公共加密(CENC)标准中定义的内容保护工具。


像 ISOBMFF、CMAF 和 CENC 这样的多媒体标准都有相应的开源软件实现。开源软件可以示范该标准的特性,使行业了解其好处并扩大其采用范围。开源软件还可以通过中立的参考实现来突出可能存在的歧义条款,从而帮助提高标准的质量。Netflix 的媒体系统团队为 SMPTE IMF 标准维护了一个名为Photon的开源参考实现。对于 ISOBMFF, Netflix 使用了来自GPAC团队的开源参考实现MP4Box


在这个由标准和开源软件组成的打包生态系统中,媒体系统团队的工作包括从现有标准中找出工具来解决新的流媒体用例。当这样的工具不存在时,我们就定义新的标准或扩展现有的标准,包括 ISOBMFF 和 CMAF,并支持开源软件来匹配这些标准。例如,当我们的视频编码同事设计了动态优化的编码方案,用于制作具有可变时长的流片段,我们修改了工作流程,以确保具有不同比特率的视频流段在时间上保持一致。类似地,当我们的音频编码同事引入 xHE-AAC 时(这就打破了以前每个音频帧都可解码的假设),也就保证了音频/视频片段的一致性。最后,当我们希望帮助业界汇聚到一种用于新视频编解码器(如 AV1)的通用加密方案时,我们就协调讨论选出方案,这里是基于模式的子样本加密(简称“cbcs”),并通过提供参考位流作出示范。当然,我们的工作也包括在在没有适当标准支持的领域处理许多类型的设备。


小结

我们希望这篇文章能让你更好地了解 Netflix 媒体系统团队的部分工作,希望下次你观看我们的获奖节目时,会发现 ISOBMFF 所发挥的作用,这是一项关键的获奖技术。感兴趣的话,你可以了解下这个团队其他方面的工作,看看其他获奖的技术,比如TTML我们用它来制作日语字幕


查看英文原文:

Packaging award-winning shows with award-winning technology

2021 年 6 月 01 日 16:551328

评论

发布
暂无评论
发现更多内容

科学的互联网思想 指引我国网络强国建设稳步前行

CECBC区块链专委会

网络安全

12.手写迷你react(短小精悍就是我)

全栈潇晨

源码分析 React React Hooks

10.scheduler&lane模型(来看看react是暂停、继续和插队的)

全栈潇晨

源码分析 React React Hooks

【回溯算法】经典题:求目标和的组合方案 ...

宫水三叶的刷题日记

LeetCode 数据结构与算法 面试数据结构与算法

(28DW-S8-Day13) 在线教育班型和角色

mtfelix

28天写作

Wireshark数据包分析学习笔记Day1

穿过生命散发芬芳

Wireshark 数据包分析 3月日更

2021抖音面经分享:Java进阶核心知识集/算法刷题宝典(金三银四必备)

比伯

Java 编程 架构 面试 程序人生

Elasticsearch Index Management 索引管理

escray

elastic 七日更 28天写作 死磕Elasticsearch 60天通过Elastic认证考试 3月日更

一桶食用油的数字化

吴俊宇

数字化转型 鲁花

2021程序员春招必备:Java面试知识点+答案(7大分类 5000字解析)

比伯

Java 编程 架构 面试 程序人生

区块链电子合同--电子合同区块链签约平台

13530558032

一场关于代码注释的争执,引发的三点思考

架构精进之路

编码 经验分享 七日更 3月日更

迎战大厂!“金三银四”和春招通过率达95%的Java面试要点集锦

云流

Java 程序员 架构 面试

Kubelet从入门到放弃系列:GPU加持

DCOS

AI gpu Kubernetes 云原生

11.react concurrent mode(并发模式是什么样的)

全栈潇晨

React React Hooks

windows 搭建ftp服务

xiezhr

vsftpd ftp ftp服务 文件服务 3月日更

无线网络的用户隔离功能

程序员成长第十九篇:要不要转管理岗?

石云升

程序员成长 28天写作 职场经验 管理经验 3月日更

dubbo 源码 v2.7 分析:通信过程及序列化协议

程序员架构进阶

架构 RPC 七日更 dubbo源码 3月日更

白话Go内存模型&Happen-Before

Gopher指北

go

Docker的三言两语-基础篇

一个大红包

Docker 28天挑战 3月日更

git 教程 --git cherry-pick 命令

生之欢愉,时间同行

git 程序员 git cherry-pick

真香!Github一夜爆火,阿里性能优化不传之秘终于开源

程序员小毕

Java 程序员 架构 面试 性能优化

MySQL数据库的安装与使用

若尘

MySQL 数据库

区块链产业革命:解决融资租赁之谜

CECBC区块链专委会

区块链

通俗易懂!看了不会忘的网络面试知识点

云流

编程 架构 面试

三十而已

ES_her0

28天写作 3月日更

Mysql安装

Sakura

9.hooks源码(想知道Function Component是怎样保存状态的嘛)

全栈潇晨

源码分析 React React Hooks

项目汇报会复盘

Geek_XOXO

科技强国梦的百度式注脚:扎根土壤、拥抱变局、眺望星空

脑极体

Study Go: From Zero to Hero

Study Go: From Zero to Hero

Netflix如何利用开源软件打包视频流-InfoQ