本文解释了Netflix建立专门的媒体数据库的原因,包括精准的用户推荐,极致的编码以及更高效的实现创意。

文 / Rohit Puri

译 / 王月美

原文:https://medium.com/netflix-techblog/the-netflix-media-database-nmdb-9bf8e6d0944d

想象一下,我们正在研究下一代自适应视频流算法。我们的目标是最大限度地缩短全球数百万Netflix会员的播放启动时间。为此,我们需要收集ISO BMFF(基本媒体文件格式)格式化比特流的标题的聚合统计数据(包括最小值,最大值,中值,平均值,任意百分数)。Netflix转码集群为大量内容提供服务,并为每个内容生成大量的比特流(具有不同的编解码器+质量组合)。在过去,我们需要编写一次性脚本,以便在我们分析数据之前,以艰难的方式从比特流中抓取头部信息。很显然这种方法无法扩展——我们脚本中的软件错误会将导致重置整个工作。

此外,当分析我们的媒体数据的另一个完全不同的维度时,还需要一个新的“一次性”脚本来处理。对于来自不同域的问题多次重复这种方法使我们意识到这里存在一种模式,并让我们建立一个以可扩展的方式来解决这个问题的系统。

这篇博客文章介绍了Netflix媒体数据库(NMDB)——一种基于Netflix微服务平台构建的高度可查询的数据系统。NMDB用于在Netflix上持久保存有关各种媒体资产的技术元数据,并使用查找和运行时计算的组合近乎实时地提供查询。NMDB使得开发人员(如视频流研究人员)能够将时间集中在对媒体数据洞察的开发上,并制定出令人惊叹的数据驱动算法,而不用操心收集和组织数据的任务。

为何选择媒体数据库?

优化的用户界面,有意义的个性化推荐,高效的流媒体和大量内容是定义终端用户在Netflix体验效果的主要因素。需要将各种复杂程度的业务工作流程聚集在一起,以实现这种体验。

与故事相关的艺术品图像和标题概要(见上图),以及富有洞察力的视频预览在帮助用户找到相关的节目和电影方面有很长的路要走。Netflix不断扩大的内容摄取量规模,要求开发能够帮助我们的创意团队及时合成高质量数字商品资产的系统。例如,这可以通过向它们提供有意义的原始图像和从源视频资产中自动(或通过算法)提取视频剪辑完成。这可以作为创建引人入胜的数字媒体资产的起点。

如下所示,内容推荐系统经济地表达了针对最终用户的内容偏好和品味。Netflix目录中内容紧凑且有效的特征表示对此功能是至关重要。例如,可以通过构建使用媒体文件(音频,定时文本,视频)以及标题元数据(类型标签,概要)作为其输入的机器学习模型。

高效的音频和视频编码方式可以更有效的利用比特流。对视频时间和空间分析(例如,检测镜头时刻和场景变化)以及识别视频帧中的显著的部分和对象有助于为视频编码系统生成关键信息。

最后,在Netflix上保持对源内容质量的高标准对于终端用户的体验非常重要。上图说明了一个这样的用例。该图像对应于来自西方古典类型的标题的视频帧。这种情况下,在视频中可以看到用于制作标题的相机。我们非常希望具有一种自动分析系统,该系统将检测和定位(可能通过矩形边界框)相机的存在。另一种这样的情况如下图所示。在该种情况下,字幕文本被放置在视频呈现的文本顶部,导致这两个文本都是不可读的。而视频文本检测算法以及字幕的定时和定位知识可以用于自动解决该问题。

我们需要注意的是,以上说明的看似完全不同的用例实际上与核心组件算法的使用重叠。例如,镜头变化数据对视频编码用例起着至关重要的作用。不同的镜头具有不同的视觉特性并且具有不同的比特预算。出于同样的原因,镜头变化数据也是从源视频资产中生成各种原始图像和视频剪辑的基本要素。通过从每个镜头中选择最优秀的候选者,可以获得高质量的原始艺术品候选者的集合。同样,可以通过组合每个镜头表示来构造视频媒体的有意义的潜在表示。

作为另一个示例,虽然视频文本检测数据在内容质量控制中起着非常宝贵的作用,但是对于视频编码和艺术品自动化用例也是有益的—包含大量文本的视频帧通常不用作良好的艺术品图像候选者。

此外,许多这些分析在计算上代价往往非常昂贵——在处理不同的业务用例时重复相同的计算是非常低效的。总之,这些原因共同构成了一个数据系统的论据,该数据系统可以作为与媒体时间轴相关的任何分析的通用存储。换句话说,我们需要一个“媒体数据库”。

媒体数据库的特征

媒体数据库容纳对应于不同模态媒体的媒体分析数据——这些媒体分析数据包括音频,视频,图像和文本(例如:字幕)。期望在媒体时间轴上提供任意查询。例如,音轨的时间线中的什么时间间隔包含音乐,或者包含文本的视频中的视频帧列表,或者对应于对话的字幕文件中的时间间隔的集合。 鉴于其范围的广度,我们认为以下是媒体数据库的重要特征:

1、对结构化数据的亲和力:具有模式的数据适用于基于机器的处理,因此可用于大规模分析和消费。在我们的案例中,架构合规性允许我们索引数据,这反过来又可以实现数据搜索和挖掘机会。此外,这就把数据的创造者从需要高端服务的消费者中解脱出来了。

2、有效的媒体时间线建模:服务从周期性的面向样本的(例如,视频帧)到基于事件的(例如,定时文本间隔)的各种类型的媒体时间线数据的能力是媒体数据库的基本特征。

3、时空查询能力:媒体数据库本地支持媒体数据的时间(例如,音频轨道中的时间间隔)以及空间(例如,图像的部分)特征,并且在这些维度上提供高效查询能力。作为示例,媒体数据库使得检查连续的视频帧序列是否包含视频帧的特定空间区域(如左上角)中的文本变得容易。这样的查询可以用于检测视频和字幕中存在的文本之间的冲突。

4、多租户:精心设计的媒体数据库可以用作支持来自多个应用的多个分析数据的平台。 因此,它允许存储任意数据,只要它是结构化的。另外,如果该数据也可以与媒体资源的特定时间间隔相关联,则每个租户可以从我们系统的有效查询能力中受益。

5、可扩展性:可扩展的基于微服务的模型至关重要。这意味着系统必须解决各种负载情况下的可用性和一致性的相关问题。

NMDB介绍

上面概述的用例激发了我们构建NMDB——一种通用存储,用于与媒体时间轴相关的任何分析,可用于在媒体时间轴上大规模回答时空查询。Netflix目录包含大量不同形式的媒体资产——静态资产的示例包括图像,可播放资产的示例包括音频,文本和视频。如上所述,无数业务应用程序可以从访问与这些资产相关的深入语义信息中受益。 NMDB的主要目标是提供这些应用程序所需的必要数据—我们将NMDB视为构成各种Netflix媒体处理系统主干的数据系统。

媒体时间轴数据的高效建模是NMDB的核心特征。媒体时间轴的规范表示可以支持大量用例,同时有效地解决用户查询模式。这构成了本系列下一篇文章的主题。

Netflix:为什么建立专门的媒体数据库?相关推荐

  1. Netflix媒体数据库:媒体时间线数据模型

    如何设计高效的视频数据库,Netflix的NMDB给出了答案.本文是系列文章的第二篇,感谢Hulu的小伙伴们的技术审校. 文 / Subbu Venkatrav, Arsen Kostenko, Sh ...

  2. 建立新闻内容的数据库_使用数据新闻学产生内容创意

    建立新闻内容的数据库 Photo: justgrimes 照片:justgrimes Strictly speaking, data journalism is about telling stori ...

  3. 建立新闻内容的数据库_建立在线新闻发布系统的方法

    建立新闻内容的数据库 News has always been a very significant part of our society. In the past, we mostly depen ...

  4. 建立“图书_读者”数据库及如下 3 个表,并输入实验数据,用 SQL 语句实现如下五个查询(opengauss)

    建立"图书_读者"数据库及如下 3 个表,并输入实验数据,用 SQL 语句实现如下五个查询(opengauss) 题目所涉及的表如下 注:使用opengauss与HeidiSQL: ...

  5. 博图WINCC报表(SQL数据库的建立,TIA_wincc在数据库中保存和查询数据,调用Excel模板把数据保存到指定的位置)

    这里写目录标题 目录 一.概述 1.1 前言 1.2 主要功能 1.3 使用的软件 二. SQL server建库和建表 2.1.SQL server建库 2.2SQL server建表 三.建立wi ...

  6. SQL建表语句(建立学生_课程数据库)

    SQL建表语句(建立学生_课程数据库) (1)建立学生_课程数据库 (2)创建学生表Student 包含Sno(学号),Sname(姓名),Ssex(性别),Sage(年龄),Sdapt(所在系)属性 ...

  7. 如何建立数据库模型并且导入数据库

    开发工具与关键技术:PowerDesigner 数据库基础 作者:卢雅婷 撰写时间:2019/05/27 通常我们拿到项目方案书的第一步是分析数据,并建立数据表,接着就是建立数据库,而数据库模型是建立 ...

  8. (E2)ENVI-met模型建立——创建项目及数据库的使用

    上一篇我们介绍了ENVI-met免费版本的下载及安装,这篇我们介绍如何创建项目,以及Database Manager(数据库)的使用以及如何自定义创建用户自定义的数据库. 1 创建项目 打开桌面上或者 ...

  9. powerpovit oracle,用powerpivot建立数据模型中的数据库在哪

    下面是用JAVA 通过JDBC连接 Oracle的步骤 希望对你有帮助 (1)装载并注册数据库的JDBC驱动程序 载入JDBC驱动: Class.forName("oracle.jdbc.d ...

最新文章

  1. python爬虫网络请求超时_6、web爬虫讲解2—urllib库爬虫—基础使用—超时设置—自动模拟http请求...
  2. snmp验证方式总结
  3. pyscripter与python的关系_【转】PyScripter启动出错:Python could not be properly initialized. We must quit....
  4. DotNet(C#)自定义运行时窗体设计器 一
  5. python计算余弦距离_在Python中计算余弦距离的优化方法
  6. Jenkins自动编译库并上传服务器
  7. 与虚拟现实技术相关联的计算机技术,虚拟现实技术与其他技术的关系是什么?-VR-形象思维VR...
  8. Inno Setup 打包安裝判斷是否安裝.net freamework 3.5 和 access2007的數據連接
  9. C++类继承 函数调用顺序
  10. Hash碰撞的解决方案
  11. Linux学习笔记之(2)~linux目录树概览和说明
  12. 批量数据替换助手V2.0版发布,欢迎使用
  13. python隐藏窗口_python怎么隐藏界面?
  14. 怎样把mysql表转换为hbase表_导出table数据库表
  15. 音频基础概念及常见编码格式
  16. 【Django】基于PythonWeb的Django框架设计实现天天生鲜系统-7首页界面
  17. 十分钟实现灭霸打响指灰飞烟灭的效果,android路由器app
  18. foreign key() references 字段名(字段名)详细用法
  19. 统计学习方法李航版第十章部分课后习题python答案
  20. ESP32学习记录 OLED u8g2库

热门文章

  1. Effective C++:unio
  2. LeetCode OJ:Construct Binary Tree from Preorder and Inorder Traversal(从前序以及中序遍历结果中构造二叉树)...
  3. java.lang.UnsatisfiedLinkError: com.jacob.com.D...
  4. 如何监控和提高IIS的性能
  5. 2021牛客多校5 - Double Strings(dp+组合数学)
  6. CodeForces - 987E Petr and Permutations(树状数组+逆序对定理)
  7. HDU - 3605 Escape(二分图多重匹配-网络流最大流+思维建边+状态压缩)
  8. HDU - 5877 Weak Pair(离散化+树状数组+dfs序)
  9. pythonrequests解析_Python requests获取网页常用方法解析
  10. NEFU704(AC自动机+状态压缩)