0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何設(shè)計高效的視頻數(shù)據(jù)庫,Netflix的NMDB給出了答案

LiveVideoStack ? 來源:未知 ? 作者:李倩 ? 2018-11-20 17:01 ? 次閱讀

如何設(shè)計高效的視頻數(shù)據(jù)庫,Netflix的NMDB給出了答案。本文是系列文章的第二篇,感謝Hulu的小伙伴們的技術(shù)審校。

在本系列的前一篇文章中,我們描述了Netflix的一些重要業(yè)務需求以及被稱為“Netflix媒體數(shù)據(jù)庫(NMDB)”的媒體數(shù)據(jù)系統(tǒng)的特點。好奇的讀者可能已經(jīng)注意到,這些特性中的大部分與NMDB管理的數(shù)據(jù)的屬性有關(guān)。具體地說,結(jié)構(gòu)化數(shù)據(jù)是圍繞媒體時間軸的概念建模的,具有額外的空間屬性。這篇博客文章詳細介紹了NMDB使用的媒體時間線數(shù)據(jù)模型的結(jié)構(gòu),稱為“媒體文檔”。

媒體文檔模型

媒體文檔模型旨在成為一種靈活的框架,可用于表示各種媒體模態(tài)的靜態(tài)和動態(tài)(隨時間和空間變化)元數(shù)據(jù)。例如,我們希望能夠表示(1)具有29.97 fps NTSC幀速率的視頻文件的每一幀的顏色和亮度信息,(2)基于“媒體時間基線”單位來描述的時序文本文件中的字幕樣式和布局信息,以及(3)由VFX藝術(shù)家生成的時變3D模型的空間屬性,所有這些都要求時間和空間維度的完全精確性。

媒體文檔模型包羅萬象,它可以用來描述大量的文檔類型,包括描述視頻流編碼分析結(jié)果和VMAF分數(shù)的文檔、描述在多個時序文本流中同時發(fā)生的事件的信息的文檔、以及描述形成電影剪輯的一系列DPX圖像的結(jié)構(gòu)化信息的文檔。為了滿足所有這些用例,媒體文檔圍繞以下詳述的一些核心原則構(gòu)建。

時間模型

我們使用媒體文檔模型來描述媒體文件 中的時序元數(shù)據(jù)。因此,我們主要圍繞時序事件的概念進行設(shè)計。時序事件可以描述本質(zhì)上屬于“周期性”以及“基于事件”的時間線。圖1顯示了連續(xù)視頻幀的周期序列。在這種情況下,感興趣的事件是在第三幀之后發(fā)生了鏡頭更改事件。

圖1:跨越鏡頭變化的一系列視頻幀

對應于圖1的媒體文檔實例片段可以如下。

{ … “events”: [ { “startTime”: T0, “endTime”: T1, “metadata”: { “shotEnvironment”: “outdoors” } }, { “startTime”: T1, “endTime”: T2, “metadata”: { “shotEnvironment”: “indoors” } }, … ]…}

時序事件類似于TTML(定時文本標記語言)字幕事件,但主要區(qū)別在于,在媒體文檔中,這些事件并不意味著向最終用戶顯示。更確切地說,這些事件是描述媒體文件中特定時間間隔內(nèi)的元數(shù)據(jù)。在我們的模型中,我們選擇將給定的媒體文檔實例中的所有事件對應一個時間線,匹配媒體文件的時間線(我們想要指出,媒體文檔時間模型相當于SMIL規(guī)范中與par相關(guān)元素的時間線)。這個選擇背后的一個目標是促進時序查詢,既可以從一個文檔實例中查詢(獲取電影中從56秒到80秒之間發(fā)生的所有事件),也可以從跨文檔實例中查詢(電影中從132秒到149秒之間的所有語言中是否有活動的字幕信息?)。

圖2:與字幕事件對應的媒體時間線

在我們的模型中,每個事件在時間線上占用一個時間間隔。我們不會對事件的相關(guān)性做出任何假設(shè)。例如,在ISO基本媒體文件格式(BMFF)文件中,樣本可能不重疊并且在軌道內(nèi)是連續(xù)的。但是,在媒體文檔模型中,事件可能會重疊。時間線中也可能存在間隙,即沒有事件的間隔。圖2顯示了基于事件的字幕時間線,其中一些間隔沒有事件。對應于圖2的媒體文檔實例片段可以如下。

{…“events”:[{“startTime”:T0,“endTime”:T1,“metadata”:{“subtitle”:“Hithere!Howareyou?”}},{“startTime”:T2,“endTime”:T3,“metadata”:{“subtitle”:“Thanksforasking—iamgood.Howareyou?”}},{“startTime”:T4,“endTime”:T5,“metadata”:{“subtitle”:“Verywell—thanksalot!”}}]…}

空間模型

與時序模型一樣,媒體文檔與單個空間坐標空間相關(guān)聯(lián),并且事件可以通過空間屬性進一步限定,提供事件在此坐標空間中發(fā)生的位置的詳細信息。這使我們能夠提供空間查詢(“獲取貫穿整個電影的媒體文件的這個區(qū)域中出現(xiàn)的所有事件”)或時空查詢(“獲取給定區(qū)域中在給定時間間隔內(nèi)發(fā)生的所有事件“)。

圖3:一系列視頻幀,其中感興趣的空間區(qū)域隨時間變化

圖3顯示了由兩個時間事件組成的視頻時間軸的可視化,這兩個時間事件由鏡頭變化分開。在每個時間事件內(nèi),不同的空間區(qū)域(對應于人臉并用彩色矩形示出)形成感興趣的區(qū)域。在本節(jié)的末尾描述了與此媒體時間線對應的完整媒體文檔實例。

嵌套結(jié)構(gòu)

受行業(yè)領(lǐng)先的媒體容器格式(例如SMPTE可互操作主格式(IMF)或ISO BMFF)的啟發(fā),媒體文檔模型將具有類似屬性的事件分組??梢允褂脙煞N嵌套級別的分組:軌道和組件。我們的模型是靈活的:在時間線上同屬于某個公共間隔的兩個事件可以放置在同一軌道的同一組件中,也可以放置在同一軌道的兩個不同組件中,還可以放置在不同軌道的各自組件中。

組件和軌道的語義可以由媒體文檔實例的作者自由定義。對于一個典型的多媒體文件的實例,媒體文檔實例會對媒體文件中的每個媒體模態(tài)都會創(chuàng)建一個軌道元素,比如說,對于一個同時包含了音頻和視頻的文件,媒體文檔實例就會創(chuàng)建兩個軌道來描述。在圖4中展示了如何描述一個包含了音頻、視頻和文本模態(tài)的文件。

圖4:包括多個軌道的媒體時間線

如上所述,對應于圖4的媒體文檔實例片段可以如下。

{..."tracks":[{"id":"1","metadata":{"type":"video"},...},{"id":"2","metadata":{"type":"audio"},...},{"id":"3","metadata":{"type":"text"},...}]}

或者,對于多聲道音頻文件,媒體文檔實例可以描述成一個軌道,但在軌道內(nèi),單獨的組件元素將為每個通道提供元數(shù)據(jù)和事件來描述它,如圖5所示。

圖5:顯示屬于單個軌道的多個組件的媒體時間軸

對應于圖5的媒體文檔片段可以如下。

{..."tracks":[{"id":"1","metadata":{"type":"stereoaudio"},"components":[{"id":"0","metadata":{"channel":"left"},...},{"id":"1","metadata":{"channel":"right"},...},]}]}

媒體文檔的整體嵌套結(jié)構(gòu)如圖6所示。每個級別都要求作者指定所有媒體文檔實例的共同(必需)信息(每個級別的id、組件級別的時間和空間解析單元、事件級別的時間間隔信息、區(qū)域級別的空間信息)。此外,每個級別允許作者提供特定于每個級別的每個媒體文檔類型的元數(shù)據(jù)(例如,事件級別的每個幀的VMAF分數(shù)或文檔級別的平均值,或者組件或軌道級別的音頻的響度信息)。

圖6:媒體文檔的數(shù)據(jù)結(jié)構(gòu)層次結(jié)構(gòu)

雖然媒體文檔實例可以用任何流行的序列化格式表示,例如JSON,Google Protocol Buffers或XML,但我們使用JSON作為首選格式。這在一定程度上源于不同web系統(tǒng)之間通常使用JSON作為有效負載格式。更重要的是,許多流行的分布式文檔索引數(shù)據(jù)庫,如Elasticsearch和MongoDB使用JSON文檔。選擇JSON作為我們的序列化格式,可以使用任何這些可伸縮文檔數(shù)據(jù)庫來索引媒體文檔實例。值得一提的是,對事件級時間間隔信息以及區(qū)域級空間信息的索引提供了開箱即用的時空查詢能力。

以下示例顯示了一個完整的媒體文檔實例,該實例通過圖3所示的視頻序列的時間軸表示人臉檢測元數(shù)據(jù)。所討論的視頻序列是高清視頻序列(1920x1080空間分辨率),幀率為23.976幀每秒。它包括兩個不同的時間事件。每一個事件都包含單個感興趣的空間區(qū)域,對應于檢測到的人臉矩形邊界框。

{"metadata":{"algorithm":"video_face_detection"},"tracks":[{"id":0,"components":[{"id":0,"eventRateNumerator":24000,"eventRateDenominator":1001,"xSize":1920,"ySize":1080,"events":[{"startTime":0,"endTime":2,"regions":[{"xmin":1152,"xmax":1536,"ymin":108,"ymax":648}]},{"startTime":3,"endTime":4,"regions":[{"xmin":576,"xmax":960,"ymin":108,"ymax":648}]}]}]}]}

媒體文檔架構(gòu)

前面的段落介紹了媒體文檔模型的基本原理。媒體文檔對象廣泛用于各種Netflix媒體處理工作流程中。以下是一個典型的生命周期:

運行在如Archer的平臺上的媒體處理算法產(chǎn)生出特定類型的媒體文檔實例,其中元數(shù)據(jù)部分包含特定域的元數(shù)據(jù)(例如,視頻幀中文本的邊界框);

媒體文檔實例被攝取,持久化并索引到NMDB中;

NMDB用戶查詢具有類似特征的一組特定媒體文檔實例。通常,這些是具有額外特定域特征的時空查詢(例如“在屏幕中間查找所有出現(xiàn)的文本”)

特定域的API用于向下游用戶公開特定的媒體文檔實例。

if(property1instanceOfString){…}elseif(property1instanceOfInteger){…}elseif(property1instanceOfBoolean){…if(property2instanceOfDouble){…}elseif(property2instanceOfList){…}…}

為了在Netflix規(guī)模上維持這個生命周期,我們意識到有必要采用一種“寫入模式”的方法。在此方法中,每個媒體文檔類型都會與對應模式相關(guān)聯(lián)。提交給NMDB的特定類型的所有媒體文檔實例都會被為該類型定義的模式進行驗證。如果媒體文檔實例不符合驗證規(guī)則,則會被拒絕。更具體地說,我們決定使用JSON Schema語法的子集來表達我們的驗證規(guī)則。因此,首先會要求媒體文檔實例的生產(chǎn)者提供描述相關(guān)媒體文檔類型結(jié)構(gòu)的JSON Schema。這種方法帶來了幾個好處:

我們可以確保與域關(guān)聯(lián)的所有媒體文檔實例的結(jié)構(gòu)類似。這允許我們編寫特定域的查詢并獲得一致的結(jié)果。例如,如果表示字幕內(nèi)容的所有媒體文檔實例遵循相同的結(jié)構(gòu)(例如,TTML body元素包含一個div元素,這個div元素包含p元素,p元素潛在包含幾個span元素),它可以使用一個請求查詢所有使用ruby注釋的TTML事件 ,這個查詢可以運行在一個媒體文檔實例里或?qū)蚶锏娜考侠铩?/p>

我們可以確保對于相同的媒體文檔類型,文檔樹中給定位置的給定名稱的屬性是精確類型而不是通用字符串。例如,這使得能夠?qū)⒈举|(zhì)上為數(shù)字的屬性的類型強制為數(shù)字類型。然后,可以對該屬性進行范圍查詢(具體來說,我們已經(jīng)仔細選擇了JSON模式的子集,以確保沒有元素可以具有不明確的定義或允許不兼容的解釋,即,每個對象都被指定為其原始類型,包括字符串,布爾值,數(shù)字和整數(shù))。在沒有模式的情況下,讀取媒體文檔實例可能會降級為類似下面的偽代碼。從軟件角度來看,這樣的實現(xiàn)難以維護,并且導致較低的讀取性能。

if(property1instanceOfString){…}elseif(property1instanceOfInteger){…}elseif(property1instanceOfBoolean){…if(property2instanceOfDouble){…}elseif(property2instanceOfList){…}…}

我們可以自動提供強類型API,以支持使用特定類型的媒體文檔實例。NMDB的用戶不必編寫代碼來解析媒體文檔實例,并且提供了強類型代碼來處理它們并提出特定于域的API。

此外,由于開發(fā)人員需要在他們的媒體文檔定義中保持靈活性,并且隨著時間發(fā)展,常常需要逐步演化其特定域的元數(shù)據(jù),或更廣泛地演化特定域的媒體文檔類型,因此我們允許更新媒體文檔模式。但是,為了保留上述優(yōu)點,我們對模式的更新進行了限制,只允許增加或更新可選字段。這可確保媒體文檔實例與媒體文檔讀取器之間的前向和后向兼容性,同時保持媒體文檔實例索引和查詢的穩(wěn)定性。簡而言之,這種設(shè)計選擇既讓NMDB系統(tǒng)易于推廣,也讓我們在運營NMBD時保持了可擴展性。最后,當必要的更新無法和現(xiàn)有模式相兼容時,也可以創(chuàng)建新的媒體文檔類型。

下一步計劃

在下一篇博文中,我們將深入探討NMDB系統(tǒng)的實現(xiàn)。我們將討論我們的設(shè)計選擇,以實現(xiàn)Netflix業(yè)務需求產(chǎn)生的服務可用性和服務規(guī)模要求。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 數(shù)據(jù)庫
    +關(guān)注

    關(guān)注

    7

    文章

    3800

    瀏覽量

    64401
  • 元數(shù)據(jù)
    +關(guān)注

    關(guān)注

    0

    文章

    32

    瀏覽量

    9135

原文標題:Netflix媒體數(shù)據(jù)庫:媒體時間線數(shù)據(jù)模型

文章出處:【微信號:livevideostack,微信公眾號:LiveVideoStack】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    labview訪問數(shù)據(jù)庫的若干種方法

    toolkit訪問數(shù)據(jù)庫的方法,給出了新建數(shù)據(jù)表,新增數(shù)據(jù),顯示表中所有數(shù)據(jù)的具體實現(xiàn)細節(jié),把數(shù)據(jù)庫
    發(fā)表于 02-24 10:14

    什么是時序數(shù)據(jù)庫?

    本文根據(jù)演講視頻以及PPT整理而成。本文將主要圍繞以下四個方面進行分享:時序數(shù)據(jù)與時序數(shù)據(jù)庫時序數(shù)據(jù)庫的演變時序數(shù)據(jù)庫對比總結(jié)一、時序
    發(fā)表于 07-12 08:35

    數(shù)據(jù)庫復制的設(shè)計和管理

    【摘 要】 介紹數(shù)據(jù)庫復制在分布式數(shù)據(jù)庫系統(tǒng)中的應用、設(shè)計和管理,給出了設(shè)計步驟和設(shè)計時考慮的因素。對設(shè)計和應用中出現(xiàn)的沖突問題進行了分析并給出了解決辦法。對
    發(fā)表于 05-11 19:35 ?768次閱讀

    組態(tài)王數(shù)據(jù)庫建立與連接視頻

    組態(tài)王數(shù)據(jù)庫建立與連接視頻
    發(fā)表于 09-17 10:09 ?172次下載

    數(shù)據(jù)庫教程之如何進行數(shù)據(jù)庫設(shè)計

    本文檔的主要內(nèi)容詳細介紹的是數(shù)據(jù)庫教程之如何進行數(shù)據(jù)庫設(shè)計內(nèi)容包括了:1 數(shù)據(jù)庫設(shè)計概述 ,2 數(shù)據(jù)庫需求分析 ,3 數(shù)據(jù)庫結(jié)構(gòu)設(shè)計 ,4
    發(fā)表于 10-19 10:41 ?21次下載
    <b class='flag-5'>數(shù)據(jù)庫</b>教程之如何進行<b class='flag-5'>數(shù)據(jù)庫</b>設(shè)計

    數(shù)據(jù)庫管理系統(tǒng)的功能

    視頻主要詳細介紹了數(shù)據(jù)庫管理系統(tǒng)的功能,分別是數(shù)據(jù)定義、數(shù)據(jù)操作、數(shù)據(jù)庫的運行管理、數(shù)據(jù)組織、
    的頭像 發(fā)表于 02-22 15:52 ?5915次閱讀

    數(shù)據(jù)庫管理與應用的復習題及答案免費下載

    本文檔的主要內(nèi)容詳細介紹的是數(shù)據(jù)庫管理與應用的復習題及答案免費下載
    發(fā)表于 10-25 16:46 ?4次下載

    數(shù)據(jù)庫和自建數(shù)據(jù)庫的區(qū)別及應用

    數(shù)據(jù)庫是指優(yōu)化和部署在云端的數(shù)據(jù)庫,阿里云和騰訊云都提供云數(shù)據(jù)庫,云數(shù)據(jù)庫和自己搭建的數(shù)據(jù)庫有什么區(qū)別?有必要使用云
    的頭像 發(fā)表于 11-20 16:26 ?4642次閱讀
    云<b class='flag-5'>數(shù)據(jù)庫</b>和自建<b class='flag-5'>數(shù)據(jù)庫</b>的區(qū)別及應用

    ACS數(shù)據(jù)庫與RSC數(shù)據(jù)庫比較研究

    ACS數(shù)據(jù)庫與RSC數(shù)據(jù)庫比較研究(開關(guān)電源技術(shù)與設(shè)計pdf百度云)-ACS數(shù)據(jù)庫與RSC數(shù)據(jù)庫比較研究? ? ? ? ? ? ? ? ?
    發(fā)表于 09-15 11:35 ?5次下載
    ACS<b class='flag-5'>數(shù)據(jù)庫</b>與RSC<b class='flag-5'>數(shù)據(jù)庫</b>比較研究

    數(shù)據(jù)庫技術(shù)與數(shù)據(jù)庫學習筆記

    數(shù)據(jù)庫技術(shù)是貫穿信息技術(shù)發(fā)展的核心技術(shù)。數(shù)據(jù)庫技術(shù)可為大數(shù)據(jù)的應用提供高效的存儲和查詢服務,可為大數(shù)據(jù)的應用提供可靠和安全的大容量信息。
    的頭像 發(fā)表于 02-14 09:41 ?861次閱讀

    上位機開發(fā)——數(shù)據(jù)庫系列問題

    前言 前面已經(jīng)給大家總結(jié)了一些關(guān)于數(shù)據(jù)庫的問題,基本上大家遇到的數(shù)據(jù)庫問題,都能從下面的文章中找到答案,希望大家可以收藏一下,遇到問題,可以一一對照去查找原因。 數(shù)據(jù)庫系列之特定實例錯
    發(fā)表于 05-10 10:34 ?0次下載
    上位機開發(fā)——<b class='flag-5'>數(shù)據(jù)庫</b>系列問題

    數(shù)據(jù)庫建立|數(shù)據(jù)庫創(chuàng)建的方法?

    數(shù)據(jù)庫是一個存儲關(guān)鍵數(shù)據(jù)的文件系統(tǒng)。利用數(shù)據(jù)庫管理系統(tǒng)建立每個人的數(shù)據(jù)庫可以更好地提供安全。 數(shù)據(jù)庫建立|
    的頭像 發(fā)表于 07-14 11:15 ?1264次閱讀

    數(shù)據(jù)庫和普通數(shù)據(jù)庫區(qū)別?|PetaExpress云端數(shù)據(jù)庫

    和持久性有四個特點。 云數(shù)據(jù)庫和普通數(shù)據(jù)庫相比都具備哪些優(yōu)勢? 1)安全穩(wěn)定 云端數(shù)據(jù)庫服務,能夠幫助用戶將危險的操作收縮起來,避免數(shù)據(jù)庫管理員的誤操作,從而更安全、更穩(wěn)定的為用戶提供
    的頭像 發(fā)表于 08-01 17:13 ?1134次閱讀

    python讀取數(shù)據(jù)庫數(shù)據(jù) python查詢數(shù)據(jù)庫 python數(shù)據(jù)庫連接

    python讀取數(shù)據(jù)庫數(shù)據(jù) python查詢數(shù)據(jù)庫 python數(shù)據(jù)庫連接 Python是一門高級編程語言,廣泛應用于各種領(lǐng)域。其中,Python在
    的頭像 發(fā)表于 08-28 17:09 ?1832次閱讀

    數(shù)據(jù)庫數(shù)據(jù)恢復—通過拼接數(shù)據(jù)庫碎片恢復SQLserver數(shù)據(jù)庫

    一個運行在存儲上的SQLServer數(shù)據(jù)庫,有1000多個文件,大小幾十TB。數(shù)據(jù)庫每10天生成一個NDF文件,每個NDF幾百GB大小。數(shù)據(jù)庫包含兩個LDF文件。 存儲損壞,數(shù)據(jù)庫
    的頭像 發(fā)表于 10-31 13:21 ?228次閱讀
    <b class='flag-5'>數(shù)據(jù)庫</b><b class='flag-5'>數(shù)據(jù)</b>恢復—通過拼接<b class='flag-5'>數(shù)據(jù)庫</b>碎片恢復SQLserver<b class='flag-5'>數(shù)據(jù)庫</b>