写点什么

Electric Eye:Netflix 的音视频测试框架

  • 2015-10-08
  • 本文字数:1833 字

    阅读完需:约 6 分钟

作为一家北美视频租赁供应商, Netflix 还研发了从拇指大小的电视棒到超大屏幕的曲面高清电视等各种各样的设备。如何能够更好的实现这些设备上视频、音频以及字幕的正确同步一直是 Netflix 专注的问题。近日,Netflix 推出了一个自动化的计算机视觉和音频测试框架——电眼(Electric Eye),以辅助在这些设备上进行的同步测试。

提起电眼,首先需要说到美国的二十一世纪通信和视频辅助行动(Twenty-First Century Communications and Video Accessibility Act,CCVA)。CCVA 行动由美国国会提出,主要为残疾人在通信和视频方面提供特殊的帮助。隐藏式字幕(Closed Caption,CC)就是在这种背景下诞生的一种特殊字幕。其最初设计的目的是将节目中的音频或对白等通过文字在屏幕上显示出来,为有听力障碍的人理解电视节目提供帮助。CC 一般采用 Timed Text Markup Language(TTML)进行编写,详细描述了字幕的内容、出现的时间和位置以及消失的时间等等。以往,Netflix 都是采用人工方式来将 CC 和视频结合起来,确定其内容和显示方式。但是,这种方式效率低下,且容易出错。此外,设备多样性也使得该问题不易解决。同步显示还需要考虑到各个设备的特点。由此,电眼项目诞生。

作为该项目的第一步,Netflix 采用 OpenCV 建立了一个针对平面电视的模型,并将问题切分为了两个子问题——获得一个针对电视的可以测试的框架,然后从该框架提取出字幕进行对比。OpenCV 本身已经内置了在平面上探测棋盘模式的功能,并能够产生透视角修正矩阵(perspective-correction matrix)基于该矩阵封装图像的代码。这样,大概的功能已经实现。

但是,接下来还有很多小问题。最主要的就是电视本身是会发射光线的。这就导致摄像机摄录电视中视频时容易出现模糊、鬼影等问题。而视频内容如果为全黑屏又无法显示视频和字幕是否同步。因此,Netflix 选取了一段水流的画面作为测试视频,将其亮度降低了50%,然后在其上覆盖字幕。屏幕上部显示的是应该正确出现、已经内嵌在视频中的字幕,而下部显示的是经过解析显示出的字幕。通过比较这两个字母,系统就可以知道CC 字幕是否正确显示。此外,测试环境中的灯光还容易引起水面反光太强,影响到字幕显示。针对这些问题,Netflix 结合环境矫正技术、传统的OpenCV 图像清理技术以及CV 等提出了解决方案。最终,原型系统可以在66ms 级别可靠的探测delta,从而引入第二个原型系统的创建。

在第一个系统的基础上,第二个系统加入了一些额外的要求:处理过程要实时进行和系统要能够处理音频。但是, OpenCV 并没有提供音频接口,且性能有限。为此,Netflix 团队采用了创造性的编码框架——Cinder 。作为知名的C++ 库,Cinder 还提供了能够桥接OpenCV 的CinderBlock 模块和音频DSP 库。因此,音视频同步测试也加入到了原型系统中。而测试内容也采用了 Archimedia 专门为 Netflix 设计的、用于音视频测试的 Test Pattern 。测试过程包含以下步骤:小球到达底部之前在英语 2.0 轨道播放 1250Hz 的声音,过程持续 400ms;一旦小球到达底部,声音转变为 1000Hz,持续 200ms。这些模式每 6 秒钟重复一次。

为了鉴别正在播放的声音,Netflix 采用了 Cinder 的 MonitorSpectralNode 类。这样,系统就可以抓取第一帧和最后一帧,并感知声音频率变化的时刻,从而进行简单的音视频同步测试。接下来,系统就需要识别小球的位置,实现测试过程的自动化。为了排除屏幕发光、摄像机延迟和像素反应时间等带来的影响,Netflix 采用了图像处理、直方图均衡化以及图像阈值等技术。最终,系统能够取得大约 33ms 的精度和每次测量正负 33ms 的误差。

此外,测试过程中还遇到音频频率不一致的问题。其中,电脑中音频为 44.1kHz,通过 HDMI 后变为 48kHz,而并非所有的摄像机都同时支持 44.1kHz 和 48kHz。因此,Netflix 花费了 5 个月的时间来解决这些问题,最终搭建成功了电眼系统。现在,电眼 1.0 版本正式亮相。Netflix 也在计划尽快开源其绝大部分代码。Netflix 的高级软件工程师 Michael Russel 表示,公司接下来会继续对电眼进行额外的测试,并寻找更多的应用场景。而且,Michael 透露,Netflix 开源电眼的目的则是希望更多测试者能够直接受益或者从中获得计算机视觉和音频处理的测试方面的灵感和经验。


感谢徐川对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。

2015-10-08 19:002656
用户头像

发布了 268 篇内容, 共 123.1 次阅读, 收获喜欢 24 次。

关注

评论

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

高级可视化神器Plotly绘制热力图

Peter

可视化 plotly

Hadoop 入门笔记—核心组件 YARN

恒生LIGHT云社区

大数据 hadoop YARN

vivo统一告警平台建设与实践

vivo互联网技术

软件架构设计 运维监控 告警系统

云小课 | SA基线检查---给云服务的一次全面“体检”

华为云开发者联盟

态势感知 华为云 基线检查 上云合规 全面体检

和不安全访问say goodbye,手把手教大家如何给域名申请免费SSL证书

老表

https 云服务器 SSL证书 跟老表学云服务器

架构训练营 模块四 作业

dog_brother

「架构实战营」

iOS开发:个人整理的关于UITableViewCell的常用属性的知识

三掌柜

11月日更

模块四作业提交

21°Char

最强最全面的数仓建设规范指南(二)

五分钟学大数据

11月日更

架构师实战营 - 模块四 - 作业

lucian

架构师实战营

试卷存储方案设计

zjluoyue

【架构实战营】模块四作业

liu🍊

千万级学生管理系统的考试试卷存储方案

奔奔

Android C++系列:Linux进程(二)

轻口味

c++ android jni 11月日更

在120篇系列专栏中,才能学会 python beautifulsoup4 模块,7000字博客+爬第九工场网

梦想橡皮擦

11月日更

大厂算法面试之leetcode精讲3.动态规划

全栈潇晨

LeetCode 算法面经 算法面试

openLooKeng视图详解

openLooKeng

大数据 openLooKeng

Prometheus Exporter (六)SNMP Exporter

耳东@Erdong

Prometheus snmp exporter 11月日更 snmp Exporter

dart系列之:在dart中使用生成器

程序那些事

flutter dart 程序那些事 生成器模式 11月日更

不止承上启下,带你了解工业物联网关

华为云开发者联盟

物联网 边缘计算 网关 工业物联网 工业物联网关

并发高?可能是编译优化引发有序性问题

华为云开发者联盟

Java 编译 代码 并发 指令

中科柏诚本地生活,率先发力场景金融新营销模式

联营汇聚

架构训练营 - 模块四作业

VegetableBird

架构实战营 #架构实战营 架构师实战营 「架构实战营」

模块四作业

小鹿

入驻快讯 | 欢迎TDengine正式入驻 InfoQ 写作平台!

InfoQ写作社区官方

入驻快讯

vue3 学习笔记 (二)——axios 的使用有变化吗?

码仔

axios Vue 3

Elasticsearch 倒排索引详细剖析

大数据技术指南

11月日更

040022-week4-design

InfoQ_70156470130f

架构实战营模块四作业

spark99

架构实战营

第四模块-考试试卷存储方案设计

🌾🌾🌾小麦🌾🌾🌾

架构实战营

【死磕Java并发】-----J.U.C之AQS:AQS简介

chenssy

11月日更 死磕 Java 死磕 Java 并发

Electric Eye:Netflix的音视频测试框架_语言 & 开发_张天雷_InfoQ精选文章