来源:Global Video Tech Meetup 主讲人:Michael Rappaport 内容整理:付一兵 作为一个主要的流媒体运营商,迪士尼流媒体服务(DSS)有他们自己的编码产品 xCoder。Michael Rappaport 向我们介绍了他们如何编写脚本,使用 ffprobe 分析所需的视频,然后以正确的方式配置 xCoder,使在家办公成为可能。
目录
- 迪士尼流媒体服务(DSS)
- 实时 OTT 工作流
- 使用 FFMPEG
- 观看流
迪士尼流媒体服务(DSS)
直播已经成为迪士尼流媒体服务(DSS)视频技术的一个组成部分。DSS 有多个团队,其主要功能是保持尽可能高的视频质量,并且内容传输技术正在全天候运作。为了做到这一点,DSS 在旧金山和纽约建立和配备了传输操作中心(TOCs),提供了最先进的视频监控系统,允许 TOC 工作人员查看和执行数千个基于 IP 的流中的任何一个的质量控制。
随着美国 2019 冠状病毒疾病的增加,DSS 劳动力被转移到家中。虽然这给我们的所有员工带来了各种各样的挑战,但 TOC 运营商面临的挑战是独一无二的。
DSS 用于源的实时视频内容往往是高比特率、广播质量的流。这些数据流拟通过卫星或光纤进行消费。其中一些流量大约为 100 Mb/s。如果人们试图以其本机格式使用这些流,那么这些流将占用 DSS V** 和用户家庭互联网连接上的大量带宽。为了让 TOC 运营商能够远程观看这些内容,我们必须生成代理流,这些代理流看起来足以监控视频,但同时还要将带宽降低到任何家庭互联网连接都可以同时消耗其中一些流的程度。除了带宽之外,提供尽可能接近实时的流也很重要,因为我们的运营商需要看到“真实的”流,而不是“30 秒前的”流。
幸运的是,DSS 拥有多年压缩高质量视频的经验,因此可以在低比特率的设备上使用。DSS 的视频转码器xCoder(迪士尼和 ESPN 的同一转码器等)为构建远程 TOC 监控平台奠定了坚实的基础。然而,使用 xCoder 带来了一系列新的挑战。
实时 OTT 工作流
对于实时和线性使用,xCoder 被构建用于消费“整理”的传输流。这些流由 DSS 的广播基础设施环境处理,该环境标准化传入的传输流,并设置数据包标识符(PID)和节目映射表(PMT)的结构,以符合公司标准。拥有此环境的优点是,它简化了任何给定转码作业的 xCoder 设置。传输流中每个 188 字节的数据包都有一个包标识符(PID),它告诉接收设备它是什么(视频、音频、元数据等)。PMT 向传输流的接收者定义这些 PID 中的每一个是什么。每个基本流都有自己的 PID 编号。有数千个流,由数千个不同的编码器组成,每个流的 PID 结构可以是唯一的。标准化广播环境中的结构允许 Xcoder 只“担心”解码和编码。TOC 运营商需要能够监控疏导和未疏导的流,以确保该基础设施正常运行。
xCoder 使用预设来确定输入的内容类型,以及要编码的内容类型。流标准化系统的目标之一是为给定的合作伙伴使用尽可能少的预设。例如,对于 ESPN ,系统只允许我们为所有赛事设置一个预设。
简单的实时OTT视频信号流
xCoder 是作为信号流的一部分构建的,该信号流在一端接收经过整理的广播贡献源,在另一端为基于 HTTP 的流媒体生成视频和音频片段。CDN 充当媒体文件的分发者,因此世界上试图访问同一媒体的每个人都不会从单个点发出请求,这肯定会造成瓶颈。xCoder 作为一个独立的程序,产生一个专有的 TCP 流。为了使远程 TOC 项目取得成功,我们需要一种方法,将这些流传输到用户家中的计算机上,并由用户解码。
远程TOC信号流
使用 FFMPEG
FFMPEG 套件的一个重要部分是它的信息工具 ffprobe。DSS 使用 ffprobe 处理各种各样的事情,从简单的事情开始 — 这个视频的分辨率是多少?到非常复杂的东西 — 流里有 PTS 异常吗?DSS 在 xCoder 中包含一个 API hook 返回流的 ffprobe 结果,作为一个快速故障排除工具,以确定帧速率、分辨率,甚至 xCoder 是否能够订阅流。这将是远程 TOC 实时预设程序的基础。
为了演示上述内容,让我们快速查看传输流的 ffprobe 结果:
代码语言:javascript复制 <RESULT>SUCCESS</RESULT>
<STREAM_INFO>
<ffprobe>
<programs>
<program nb_streams="4" pcr_pid="201" pmt_pid="198" program_id="1" program_num="1" start_pts="15786476233" start_time="15786.476233">
<streams>
<stream avg_frame_rate="60000/1001" codec_name="h264" display_aspect_ratio="16:9" height="720" id="0xc9" index="0" level="42" pix_fmt="yuv422p10le" profile="High 4:2:2" sample_aspect_ratio="1:1" width="1280" />
<stream avg_frame_rate="0/0" bit_rate="2696000" channels="2" codec_name="s302m" id="0x12e" index="1" sample_rate="48000">
<tag key="language" value="ENG" />
</stream>
<stream avg_frame_rate="0/0" bit_rate="256125" channels="2" codec_name="aac" id="0x12d" index="2" profile="LC" sample_rate="48000">
<tag key="language" value="ENG" />
</stream>
<stream avg_frame_rate="0/0" codec_name="scte_35" id="0x191" index="3" />
</streams>
</program>
</programs>
<streams>
<stream avg_frame_rate="60000/1001" codec_name="h264" display_aspect_ratio="16:9" height="720" id="0xc9" index="0" level="42" pix_fmt="yuv422p10le" profile="High 4:2:2" sample_aspect_ratio="1:1" width="1280" />
<stream avg_frame_rate="0/0" bit_rate="2696000" channels="2" codec_name="s302m" id="0x12e" index="1" sample_rate="48000"> </stream>
<stream avg_frame_rate="0/0" bit_rate="256125" channels="2" codec_name="aac" id="0x12d" index="2" profile="LC" sample_rate="48000"> </stream>
<stream avg_frame_rate="0/0" codec_name="scte_35" id="0x191" index="3" />
</streams>
</ffprobe>
</STREAM_INFO>
</Probe_Result>```
事实证明,所有需要建立的编码器预设就在这里。查看“流”部分,我们看到流的视频分辨率为 1280x720,帧速率为 59.94fps(60000/1001)。音频 PID 301(0x12d)为 AAC-LC 立体声,音频 PID 302(0x12e)为 SMPTE-302m 立体声。从这里开始,我们只需要解析 XML 以填充编码器预设,最终将向用户返回此传输流中每个基本流的属性字典。
但我们要监控的流太多了,DSS 有一个复杂的、高度扩展的编码器和资源供应系统。它的工作是设置生成实时流所需的所有资源并将其发送给客户。DSS 拥有数千个专门用于实时视频编码的资源。没有自动化,就不可能管理这些资源。在使用 DSS 居家办公的早期,为了利用前面提到的流检测算法,我们构建一个系统,以一种新的方式提供流,让远程 TOC xCoder 供应系统在用户的计算机上运行。
DSS 能够将多台服务器专用于这一新的工作流,使团队用户能够同时监控数百条流,然后进行简单的负载平衡,以保持流分布在硬件资源上。
观看流
如前所述,查看流需要一种方法。幸运的是,这个框架已经准备好了。重新调整此查看器的用途并不简单,因为远程 TOC Xcoder 生成的流略有不同;因此,需要进行大量的故障排除和测试。不过,最终还是为用户编译并打包了播放器。
在开始这个项目之前,DSS 的运营商为 TOC 配备了全天候工作人员,确保 Hulu live 和 ESPN 的直播内容看起来很棒,并且按照预期工作。这一努力帮助他们从自己家中的安全出发,继续实现全天候功能,确保 Hulu Live、ESPN 和其他内容能够在疫情期间继续使用。
附上演讲视频:
http://mpvideo.qpic.cn/0bc3vyaa2aaa2yafaf7bw5qvblwdbwxaadia.f10002.mp4?dis_k=fb23b8be1f33d616b3ed94ccd11459a8&dis_t=1645150539&vid=wxv_2224108704474464257&format_id=10002&support_redirect=0&mmversion=false