背景技術(shù):
工程師使用壓縮(也稱為源編解碼(coding)或源編碼(encoding))來降低數(shù)字媒體數(shù)據(jù)的比特率。壓縮通過將媒體數(shù)據(jù)轉(zhuǎn)換為較低比特率形式來減少存儲(chǔ)和傳輸媒體數(shù)據(jù)的成本。解壓縮(也稱為解碼)從壓縮形式重建原始媒體數(shù)據(jù)的版本?!熬幗獯a器”是編碼器/解碼器系統(tǒng)。在過去二十年中,已經(jīng)采用了各種視頻編解碼器標(biāo)準(zhǔn)和格式,并且已經(jīng)采用了各種音頻編解碼器標(biāo)準(zhǔn)和格式。編解碼器標(biāo)準(zhǔn)或格式典型地定義用于編碼的媒體比特流(有時(shí)稱為媒體基本比特流)的語法的選項(xiàng),以便當(dāng)在編碼和解碼中使用特定特征時(shí)詳述媒體基本比特流中的參數(shù)。在許多情況下,編解碼器標(biāo)準(zhǔn)或格式還提供關(guān)于媒體解碼器應(yīng)當(dāng)執(zhí)行以在解碼中實(shí)現(xiàn)正確結(jié)果的解碼操作的細(xì)節(jié)。
媒體容器格式或流媒體格式指定如何組織編碼的媒體數(shù)據(jù)以用于存儲(chǔ)、傳輸?shù)取C襟w容器格式或流媒體格式可以包括用于關(guān)于編碼的媒體數(shù)據(jù)的元數(shù)據(jù)的字段,元數(shù)據(jù)諸如是,用于調(diào)整解碼或呈現(xiàn)的定時(shí)的時(shí)間戳、數(shù)字權(quán)限管理數(shù)據(jù)、回放控制數(shù)據(jù)或指示如何解碼或再現(xiàn)媒體數(shù)據(jù)的其他數(shù)據(jù)。已經(jīng)發(fā)布了用于媒體數(shù)據(jù)的各種媒體容器格式,包括如在itu-th.222.0|iso/iec13818-1中定義的mpeg-2ts/ps、高級系統(tǒng)格式(“asf”)(原名高級流格式)、如在iso/iec14496-12中定義的mpeg-4(“mp4”)(iso基礎(chǔ)媒體文件格式)、14496-14(mp4文件格式)和14496-15(avc文件格式)、通用文件格式(“cff”)和matroska視頻格式(“mkv”)。此外,已經(jīng)發(fā)布了用于媒體數(shù)據(jù)的各種流媒體格式,包括mpeg-dash、http直播流(“hls”)、平滑流和實(shí)時(shí)傳輸協(xié)議(“rtp”)的變型(例如,如在ietfrfc3550或另一ietfrtp規(guī)范中定義的),其可以在容器格式文件(諸如mp4或mpeg-2ts)中或者在一個(gè)或多個(gè)媒體基本比特流中包括編碼的媒體數(shù)據(jù)。一般地,媒體源是這樣的組件,其解析媒體文件或媒體流,并且將媒體基本比特流中的編碼的媒體數(shù)據(jù)提供給媒體解碼器以用于解碼。
每天,數(shù)百萬媒體文件和媒體流被用戶通過各種活動(dòng)來運(yùn)用(consume)。在一些情況下,由于在傳輸期間的隨機(jī)比特翻轉(zhuǎn)或分組丟失,媒體文件或媒體流被破壞?;蛘撸捎诖鎯?chǔ)裝置故障,由于不適當(dāng)?shù)挠涗浕蛘叱鲇诹硪粋€(gè)原因,媒體文件或媒體流可能被破壞。當(dāng)回放媒體文件或媒體流中的媒體數(shù)據(jù)時(shí),媒體解碼器可能丟棄不能解碼的媒體樣本(例如,視頻幀)。與媒體數(shù)據(jù)相關(guān)聯(lián)的樣本元數(shù)據(jù)于是可能相對于正被解碼的媒體樣本丟失同步。元數(shù)據(jù)-媒體同步的這種丟失可能導(dǎo)致解碼或呈現(xiàn)的問題,諸如音頻/視頻同步的丟失或可能取決于復(fù)雜的重新排序規(guī)則的媒體樣本的重新排序中的錯(cuò)誤。此外,媒體文件和媒體流可以由各種各樣的源生成。將樣本元數(shù)據(jù)與媒體樣本進(jìn)行匹配可能是一種挑戰(zhàn)。將樣本元數(shù)據(jù)映射到適當(dāng)?shù)拿襟w樣本中的錯(cuò)誤會(huì)導(dǎo)致媒體解碼、媒體呈現(xiàn)或媒體編輯的問題。
技術(shù)實(shí)現(xiàn)要素:
總而言之,本文描述了樣本元數(shù)據(jù)處理的領(lǐng)域中的創(chuàng)新。例如,媒體回放工具將樣本元數(shù)據(jù)與對應(yīng)的媒體樣本進(jìn)行耦合,并且即使當(dāng)媒體樣本被丟棄,延遲,分割或重復(fù)時(shí),也在解碼和輸出處理的各個(gè)階段期間保持樣本元數(shù)據(jù)的至少一些元素與對應(yīng)的媒體樣本之間的耦合。
根據(jù)本文所描述的創(chuàng)新的一個(gè)方面,媒體回放工具在媒體基本比特流中標(biāo)識(shí)用于當(dāng)前媒體樣本的編碼數(shù)據(jù)。媒體回放工具還從媒體基本比特流的外部標(biāo)識(shí)用于當(dāng)前媒體樣本的樣本元數(shù)據(jù)。媒體回放工具將樣本元數(shù)據(jù)與當(dāng)前媒體樣本進(jìn)行耦合。媒體回放工具并發(fā)地向媒體解碼器提供用于當(dāng)前媒體樣本的樣本元數(shù)據(jù)和編碼數(shù)據(jù)。
根據(jù)本文所描述的創(chuàng)新的另一方面,媒體回放工具標(biāo)識(shí)用于當(dāng)前媒體樣本的編碼數(shù)據(jù),標(biāo)識(shí)用于當(dāng)前媒體樣本的樣本元數(shù)據(jù),并將樣本元數(shù)據(jù)與當(dāng)前媒體樣本進(jìn)行耦合。在針對當(dāng)前媒體樣本執(zhí)行的解碼的至少一個(gè)階段期間,媒體回放工具維持樣本元數(shù)據(jù)的至少一個(gè)樣本元數(shù)據(jù)元素與當(dāng)前媒體樣本的耦合。例如,媒體回放工具可以確定是否丟棄當(dāng)前媒體樣本,并且如果當(dāng)前媒體樣本被丟棄,則還丟棄與當(dāng)前媒體樣本耦合的樣本元數(shù)據(jù)。作為另一示例,媒體回放工具可以確定是否延遲當(dāng)前媒體樣本,并且如果當(dāng)前媒體樣本被延遲,則還延遲與當(dāng)前媒體樣本耦合的樣本元數(shù)據(jù)。
根據(jù)本文所描述的創(chuàng)新的另一方面,媒體回放工具包括媒體源和媒體解碼器。媒體源被配置為接收被分割成數(shù)據(jù)單元的輸入數(shù)據(jù)。根據(jù)媒體容器格式或流媒體格式組織的輸入數(shù)據(jù)包括用于媒體樣本的媒體基本比特流中的編碼數(shù)據(jù),以及用于至少一些媒體樣本的在媒體基本比特流外部的樣本元數(shù)據(jù)。媒體源將給定的樣本元數(shù)據(jù)與數(shù)據(jù)單元中的給定一個(gè)數(shù)據(jù)單元相關(guān)聯(lián),并且將給定的樣本元數(shù)據(jù)與具有在該給定數(shù)據(jù)單元中開始的編碼數(shù)據(jù)的媒體樣本中的給定一個(gè)媒體樣本進(jìn)行耦合。然后,媒體源向媒體解碼器提供用于給定媒體樣本的編碼數(shù)據(jù)和給定樣本元數(shù)據(jù)。
本文描述的創(chuàng)新可以被實(shí)現(xiàn)為方法的一部分,實(shí)現(xiàn)為被配置為執(zhí)行該方法的計(jì)算系統(tǒng)的一部分,或者實(shí)現(xiàn)為存儲(chǔ)用于使得由其編程的計(jì)算系統(tǒng)執(zhí)行該方法的計(jì)算機(jī)可執(zhí)行指令的有形計(jì)算機(jī)可讀介質(zhì)的一部分。各種創(chuàng)新可以組合或單獨(dú)使用。提供本發(fā)明內(nèi)容以便以簡化形式介紹以下將在具體實(shí)施方式中進(jìn)一步描述的概念的選擇。本發(fā)明內(nèi)容不旨在標(biāo)識(shí)所要求保護(hù)的主題的關(guān)鍵特征或必要特征,也不旨在用于限制所要求保護(hù)的主題的范圍。通過參照附圖進(jìn)行的以下詳細(xì)描述,本發(fā)明的前述和其他目的、特征和優(yōu)點(diǎn)將變得更加明顯。
附圖說明
圖1是其中可以實(shí)現(xiàn)一些所描述的實(shí)施例的示例計(jì)算系統(tǒng)的圖。
圖2a和2b是其中可以實(shí)現(xiàn)一些所描述的實(shí)施例的示例網(wǎng)絡(luò)環(huán)境的圖。
圖3是結(jié)合其可以實(shí)現(xiàn)一些所描述的實(shí)施例的示例媒體回放工具的圖。
圖4a是圖示出了由媒體解碼器暴露的功能的占用空間(footprint)的偽代碼列表,媒體解碼器接受用于媒體樣本的編碼數(shù)據(jù)以及存儲(chǔ)與媒體樣本耦合的樣本元數(shù)據(jù)的元素的結(jié)構(gòu),作為輸入。
圖4b是圖示出存儲(chǔ)樣本元數(shù)據(jù)的元素的示例結(jié)構(gòu)的偽代碼列表。
圖5是結(jié)合其可以實(shí)現(xiàn)一些所描述的實(shí)施例的示例視頻解碼器系統(tǒng)的圖。
圖6-8是圖示出用于處理與適當(dāng)?shù)拿襟w樣本耦合的樣本元數(shù)據(jù)的一般化技術(shù)的流程圖。
具體實(shí)施方式
具體實(shí)施方式呈現(xiàn)了在樣本元數(shù)據(jù)處理領(lǐng)域的創(chuàng)新。例如,根據(jù)創(chuàng)新中的一些,媒體回放工具將樣本元數(shù)據(jù)與適當(dāng)?shù)拿襟w樣本進(jìn)行耦合,并且在解碼和輸出處理的各個(gè)階段期間,甚至在媒體樣本被丟棄、延遲、分割或重復(fù)時(shí),保持樣本元數(shù)據(jù)的至少一些樣本元數(shù)據(jù)元素與對應(yīng)媒體樣本之間的耦合。以這種方式,媒體回放工具可以避免樣本元數(shù)據(jù)和媒體樣本之間的同步的丟失,該丟失可能導(dǎo)致在媒體解碼、媒體呈現(xiàn)或媒體編輯期間的問題。
盡管本文描述的操作在某些地方被描述為由視頻回放工具執(zhí)行或者結(jié)合視頻回放工具來執(zhí)行,但是在許多情況下,操作可以由另一類型的媒體回放工具(例如,音頻回放工具)執(zhí)行或者結(jié)合其來執(zhí)行。更一般地,本文描述的示例的各種替代方案是可能的。例如,本文描述的方法中的一些可以通過以下方式來改動(dòng):改變所描述的方法動(dòng)作的排序,分割、重復(fù)或省略某些方法動(dòng)作等。所公開的技術(shù)的各個(gè)方面可以組合或單獨(dú)使用。不同的實(shí)施例使用所描述的創(chuàng)新中的一個(gè)或多個(gè)創(chuàng)新。本文所述的創(chuàng)新中的一些創(chuàng)新解決了背景技術(shù)中提到的問題中的一個(gè)或多個(gè)問題。典型地,給定的技術(shù)/工具不解決所有這些問題。
i.示例計(jì)算系統(tǒng)
圖1圖示出了其中可以實(shí)現(xiàn)所描述的創(chuàng)新中的若干創(chuàng)新的合適的計(jì)算系統(tǒng)(100)的一般化示例。計(jì)算系統(tǒng)(100)不旨在就使用或功能的范圍提出任何限制,因?yàn)閯?chuàng)新可以在各種各樣的通用或?qū)S糜?jì)算系統(tǒng)中實(shí)現(xiàn)。
參考圖1,計(jì)算系統(tǒng)(100)包括一個(gè)或多個(gè)處理單元(110,115)和存儲(chǔ)器(120,125)。處理單元(110,115)執(zhí)行計(jì)算機(jī)可執(zhí)行指令。處理單元可以是中央處理單元(“cpu”)、專用集成電路(“asic”)中的處理器或任何其他類型的處理器。在多處理系統(tǒng)中,多個(gè)處理單元執(zhí)行計(jì)算機(jī)可執(zhí)行指令以增大處理能力。例如,圖1示出了中央處理單元(110)以及圖形處理單元或協(xié)處理單元(115)。有形存儲(chǔ)器(120,125)可以是可由(多個(gè))處理單元訪問的易失性存儲(chǔ)器(例如,寄存器、高速緩存器、ram)、非易失性存儲(chǔ)器(例如,rom、eeprom、閃存等)或者這兩者的某種組合。存儲(chǔ)器(120,125)存儲(chǔ)軟件(180),其實(shí)現(xiàn)用于以適合于由(多個(gè))處理單元執(zhí)行的計(jì)算機(jī)可執(zhí)行指令的形式將樣本元數(shù)據(jù)與媒體樣本進(jìn)行耦合的一個(gè)或多個(gè)創(chuàng)新。
計(jì)算系統(tǒng)可以具有附加特征。例如,計(jì)算系統(tǒng)(100)包括存儲(chǔ)裝置(140)、一個(gè)或多個(gè)輸入設(shè)備(150)、一個(gè)或多個(gè)輸出設(shè)備(160)和一個(gè)或多個(gè)通信連接(170)。諸如總線、控制器或網(wǎng)絡(luò)之類的互連機(jī)構(gòu)(未示出)互連計(jì)算系統(tǒng)(100)的組件。典型地,操作系統(tǒng)軟件(未示出)為在計(jì)算系統(tǒng)(100)中執(zhí)行的其他軟件提供操作環(huán)境,并且協(xié)調(diào)計(jì)算系統(tǒng)(100)的組件的活動(dòng)。
有形存儲(chǔ)裝置(140)可以是可移除的或不可移除的,并且包括磁盤、磁帶或磁盒、cd-rom、dvd或可以用于存儲(chǔ)信息并且可以在計(jì)算系統(tǒng)(100)內(nèi)訪問的任何其他介質(zhì)。存儲(chǔ)裝置(140)存儲(chǔ)用于軟件(180)的指令,軟件(180)實(shí)現(xiàn)用于將樣本元數(shù)據(jù)與媒體樣本進(jìn)行耦合的一個(gè)或多個(gè)創(chuàng)新。
(多個(gè))輸入設(shè)備(150)可以是諸如鍵盤、鼠標(biāo)、筆或軌跡球之類的觸摸輸入設(shè)備、語音輸入設(shè)備、掃描設(shè)備或向計(jì)算系統(tǒng)(100)提供輸入的另一設(shè)備。對于視頻,(多個(gè))輸入設(shè)備(150)可以是相機(jī)、視頻卡、tv調(diào)諧器卡、屏幕捕獲模塊或接受模擬或數(shù)字形式的視頻輸入的類似設(shè)備,或?qū)⒁曨l輸入讀取到所述計(jì)算系統(tǒng)(100)中的cd-rw或cd-rom。(多個(gè))輸出設(shè)備(160)可以是顯示器、打印機(jī)、揚(yáng)聲器、cd刻錄機(jī)或提供來自計(jì)算系統(tǒng)(100)的輸出的另一設(shè)備。
(多個(gè))通信連接(170)使得能夠通過去到另一計(jì)算實(shí)體的通信介質(zhì)進(jìn)行通信。通信介質(zhì)在調(diào)制的數(shù)據(jù)信號(hào)中傳達(dá)諸如計(jì)算機(jī)可執(zhí)行指令、音頻或視頻輸入或輸出或其他數(shù)據(jù)之類的信息。調(diào)制的數(shù)據(jù)信號(hào)是以在信號(hào)中編碼信息這樣的方式設(shè)置或改變其一個(gè)或多個(gè)特性的信號(hào)。作為示例而非限制,通信介質(zhì)可以使用電、光、rf或其他載波。
可以在計(jì)算機(jī)可讀介質(zhì)的一般上下文中描述創(chuàng)新。計(jì)算機(jī)可讀介質(zhì)是可以在計(jì)算環(huán)境內(nèi)訪問的任何可用的有形介質(zhì)。作為示例而非限制,對于計(jì)算系統(tǒng)(100),計(jì)算機(jī)可讀介質(zhì)包括存儲(chǔ)器(120,125)、存儲(chǔ)裝置(140)以及上述任一項(xiàng)的組合。
可以在計(jì)算機(jī)可執(zhí)行指令的一般上下文中描述創(chuàng)新,諸如包括在程序模塊中的那些計(jì)算機(jī)可執(zhí)行指令、在目標(biāo)真實(shí)或虛擬處理器上的計(jì)算系統(tǒng)中執(zhí)行的那些計(jì)算機(jī)可執(zhí)行指令。一般地,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、庫、對象、類、組件、數(shù)據(jù)結(jié)構(gòu)等。在各種實(shí)施例中根據(jù)需要,程序模塊的功能可以在程序模塊之間組合或分割。用于程序模塊的計(jì)算機(jī)可執(zhí)行指令可以在本地或分布式計(jì)算系統(tǒng)內(nèi)執(zhí)行。
術(shù)語“系統(tǒng)”和“設(shè)備”在本文中可互換使用。除非上下文另有明確指示,否則這兩個(gè)術(shù)語都不暗示,對計(jì)算系統(tǒng)或計(jì)算設(shè)備的類型的任何限制。一般地,計(jì)算系統(tǒng)或計(jì)算設(shè)備可以是本地的或分布式的,并且可以包括具有實(shí)現(xiàn)本文描述的功能的軟件的專用硬件和/或通用硬件的任何組合。
所公開的方法還可以使用被配置為執(zhí)行任何所公開的方法的專用計(jì)算硬件來實(shí)現(xiàn)。例如,所公開的方法可以由專門設(shè)計(jì)或配置為實(shí)現(xiàn)任何所公開的任何創(chuàng)新的集成電路(例如,諸如asic數(shù)字信號(hào)處理器(“dsp”)之類的asic、圖形處理單元(“gpu”)或可編程邏輯器件(“pld”),諸如現(xiàn)場可編程門陣列(“fpga”))來實(shí)現(xiàn)。
為了呈現(xiàn)的目的,具體實(shí)施方式使用像“確定”和“使用”一樣的術(shù)語來描述計(jì)算系統(tǒng)中的計(jì)算機(jī)操作。這些術(shù)語是用于由計(jì)算機(jī)執(zhí)行的操作的高級抽象,并且不應(yīng)該與由人類執(zhí)行的動(dòng)作相混淆。與這些術(shù)語相對應(yīng)的實(shí)際計(jì)算機(jī)操作根據(jù)實(shí)現(xiàn)而變化。
ii.示例網(wǎng)絡(luò)環(huán)境
圖2a和2b示出了包括媒體編碼器(220)和媒體解碼器(270)的示例網(wǎng)絡(luò)環(huán)境(201,202)。編碼器(220)和解碼器(270)使用適當(dāng)?shù)耐ㄐ艆f(xié)議通過網(wǎng)絡(luò)(250)連接。網(wǎng)絡(luò)(250)可以包括互連網(wǎng)或另一計(jì)算機(jī)網(wǎng)絡(luò)。
在圖2a中所示的網(wǎng)絡(luò)環(huán)境(201)中,每個(gè)實(shí)時(shí)通信(“rtc”)工具(210)包括用于雙向通信的一個(gè)或多個(gè)媒體編碼器(220)和一個(gè)或多個(gè)媒體解碼器(270),以及媒體宿和媒體源組件(未示出)。對于視頻,給定編碼器(220)可以生成符合h.265/hevc標(biāo)準(zhǔn)、smpte421m標(biāo)準(zhǔn)、iso/iec14496-10標(biāo)準(zhǔn)(也稱為h.264/avc)、另一標(biāo)準(zhǔn)、vpx格式(例如vp6,vp8或vp9)或另一專有格式的變型或擴(kuò)展的輸出,其中對應(yīng)的解碼器(270)接受來自編碼器(220)的編碼的數(shù)據(jù)。對于音頻,給定的編碼器(220)可以生成符合aac標(biāo)準(zhǔn)(諸如核心aac或heaac)、amr標(biāo)準(zhǔn)(諸如amr-wb)、opus標(biāo)準(zhǔn)、silk標(biāo)準(zhǔn)、另一標(biāo)準(zhǔn)、windows媒體音頻(“wma”)格式或另一專有格式的變型或擴(kuò)展的輸出,其中,對應(yīng)解碼器(270)從編碼器(220)接受編碼的數(shù)據(jù)。媒體宿根據(jù)媒體容器格式或流媒體格式處理用于傳出的媒體樣本的編碼數(shù)據(jù),并且媒體源根據(jù)媒體容器格式或流媒體格式處理用于傳入的媒體樣本的編碼數(shù)據(jù)。雙向通信可以是視頻會(huì)議、視頻電話呼叫或其他雙方或多方通信場景的一部分。編碼的媒體數(shù)據(jù)可以根據(jù)rtp(例如,對于音頻、對于h.265/hevc視頻、對于h.264/avc視頻、對于vp8視頻)、rtvideo或用于媒體流的另一種格式或標(biāo)準(zhǔn)的變型來格式化。雖然圖2a中的網(wǎng)絡(luò)環(huán)境(201)包括兩個(gè)實(shí)時(shí)通信工具(210)、但是網(wǎng)絡(luò)環(huán)境(201)可以替代地包括參與多方通信的三個(gè)或更多個(gè)實(shí)時(shí)通信工具(210)。
實(shí)時(shí)通信工具(210)管理由編碼器(220)進(jìn)行的編碼,并且還管理由解碼器(270)進(jìn)行的解碼。圖3示出了可以包括在實(shí)時(shí)通信工具(210)中以用于媒體解碼和回放的示例媒體回放工具的模塊。可替換地,實(shí)時(shí)通信工具(210)使用另一媒體回放工具。圖4示出了示例視頻解碼器系統(tǒng)(400),其可以被包括在實(shí)時(shí)通信工具(210)中作為媒體回放工具的一部分??商鎿Q地,實(shí)時(shí)通信工具(210)使用另一視頻解碼器系統(tǒng)。
在圖2b中所示的網(wǎng)絡(luò)環(huán)境(202)中,編碼工具(212)包括編碼用于遞送到多個(gè)回放工具(214)的媒體的一個(gè)或多個(gè)編碼器(220),每個(gè)回放工具(214)包括一個(gè)或多個(gè)解碼器(270)。(多個(gè))編碼器(220)可以生成符合參考圖2a描述的編解碼器標(biāo)準(zhǔn)和格式中的任一個(gè)的輸出,其中,對應(yīng)的解碼器(270)接受來自編碼器(220)的編碼的數(shù)據(jù)。在編碼工具(212)中,媒體宿(未示出)根據(jù)媒體容器格式或流媒體格式處理用于傳出的媒體樣本的編碼數(shù)據(jù)。在回放工具(214)中,媒體源(未示出)根據(jù)媒體容器格式或流媒體格式處理用于傳入的媒體樣本的編碼數(shù)據(jù)??梢詾橐曨l監(jiān)控系統(tǒng)、web相機(jī)監(jiān)視系統(tǒng)、遠(yuǎn)程桌面會(huì)議演示或其中媒體被編碼并從一個(gè)位置發(fā)送到一個(gè)或多個(gè)其他位置的其他場景提供單向通信。編碼的媒體數(shù)據(jù)可以根據(jù)媒體容器格式(諸如mpeg-2ts/ps,asf,mp4,cff或mkv)來格式化?;蛘撸幋a的媒體數(shù)據(jù)可以根據(jù)流媒體格式(諸如mpeg-dash、hls或平滑流)來格式化。盡管圖2b中的網(wǎng)絡(luò)環(huán)境(202)包括兩個(gè)回放工具(214),但是網(wǎng)絡(luò)環(huán)境(202)可以包括更多或更少的回放工具(214)。
編碼工具(212)可以包括用于管理與一個(gè)或多個(gè)回放工具(214)的連接的服務(wù)器側(cè)控制器邏輯,回放工具(214)可以包括用于管理與編碼工具(212)的連接的客戶端側(cè)控制器邏輯。一般地,回放工具(214)與編碼工具(212)通信以確定回放工具(214)要接收的媒體數(shù)據(jù)的一個(gè)或多個(gè)流?;胤殴ぞ撸?14)接收(多個(gè))流,將接收到的編碼的數(shù)據(jù)緩存適當(dāng)?shù)臅r(shí)間段,并開始解碼和回放。圖3示出了可以包括在回放工具(214)中以用于媒體解碼和回放的示例媒體回放工具的模塊??商鎿Q地,回放工具(214)使用另一媒體回放工具。圖4示出了示例視頻解碼器系統(tǒng)(400),其可以被包括在回放工具(214)中作為媒體回放工具的一部分??商鎿Q地,回放工具(214)使用另一視頻解碼器系統(tǒng)。
iii.將樣本元數(shù)據(jù)與媒體樣本進(jìn)行耦合
本部分描述了在樣本元數(shù)據(jù)處理領(lǐng)域的創(chuàng)新,根據(jù)該創(chuàng)新,媒體回放工具將樣本元數(shù)據(jù)與對應(yīng)的媒體樣本進(jìn)行耦合。用于媒體樣本的樣本元數(shù)據(jù)可以包括例如呈現(xiàn)時(shí)間戳(“pts”)、解碼時(shí)間戳(“dts”)、幀呈現(xiàn)持續(xù)時(shí)間值、最大可解碼空間分辨率、前滾動(dòng)(pre-roll)值、不連續(xù)性標(biāo)志值、旋轉(zhuǎn)數(shù)據(jù)、三維顯示數(shù)據(jù)或在媒體樣本的解碼或呈現(xiàn)期間使用的其他元數(shù)據(jù)。媒體樣本可以是視頻幀、音頻幀或其他類型的媒體樣本。對于至少一些元數(shù)據(jù)元素,媒體回放工具可以在解碼和輸出處理的各種階段期間保持元數(shù)據(jù)到樣本的關(guān)聯(lián)。取決于實(shí)現(xiàn),樣本元數(shù)據(jù)處理可以向媒體回放工具提供各種優(yōu)點(diǎn)。
例如,媒體回放工具可以向媒體樣本分配從各種媒體容器格式或流媒體格式中的任一種格式的輸入數(shù)據(jù)解析的樣本元數(shù)據(jù)。通過計(jì)及要提供的樣本元數(shù)據(jù)的不同格式和不同方式,媒體回放工具可以以準(zhǔn)確和有效的方式將樣本元數(shù)據(jù)分配給適當(dāng)?shù)拿襟w樣本。
作為另一示例,媒體回放工具可以在整個(gè)解碼過程中將樣本元數(shù)據(jù)與用于媒體樣本的編碼數(shù)據(jù)緊密耦合,并且為了重新排序和其他輸出處理的目的,繼續(xù)將樣本元數(shù)據(jù)與媒體樣本的重建版本進(jìn)行耦合。如果在解碼期間(例如,由于數(shù)據(jù)丟失)丟棄媒體樣本或在解碼期間(例如,由于網(wǎng)絡(luò)擁塞)延遲媒體樣本,則樣本元數(shù)據(jù)可以類似地被丟棄或延遲,這可以幫助避免元數(shù)據(jù)處理的同步的丟失,從而使樣本元數(shù)據(jù)處理更加魯棒。
作為另一示例,媒體回放工具可以支持在各種媒體運(yùn)用場景中的樣本元數(shù)據(jù)處理,媒體運(yùn)用場景包括媒體會(huì)議、媒體電話呼叫、其他實(shí)時(shí)通信、視頻監(jiān)控系統(tǒng)、web相機(jī)監(jiān)視系統(tǒng)、遠(yuǎn)程桌面會(huì)議演示或其他媒體流。輸入數(shù)據(jù)可以根據(jù)各種媒體容器格式(諸如mp4或mpeg-2ts)或流媒體格式(諸如mpeg-dash、hls或rtp)中的任一種來格式化,并且可以通過有損網(wǎng)絡(luò)連接來接收。
作為另一示例,媒體回放工具可以標(biāo)識(shí)和替換缺失的樣本元數(shù)據(jù)元素。例如,媒體回放工具可以在樣本元數(shù)據(jù)元素(諸如時(shí)間戳)之間插值,以確定用于缺失的樣本元數(shù)據(jù)元素的替換物。以這種方式,在一些情況下,媒體回放工具可以從元數(shù)據(jù)元素的丟失、元數(shù)據(jù)元素的破壞或媒體宿或記錄系統(tǒng)提供元數(shù)據(jù)元素的故障中恢復(fù)。
作為另一示例,媒體回放工具可以使用耦合到媒體樣本的樣本元數(shù)據(jù)來驗(yàn)證對數(shù)字權(quán)限管理(“drm”)規(guī)則或其他形式的內(nèi)容保護(hù)的符合性。例如,在解碼用于媒體樣本的編碼的數(shù)據(jù)之前,媒體回放工具檢查針對媒體樣本指示的最大可解碼空間分辨率小于在drm規(guī)則下的最大可解碼空間分辨率。
a.示例媒體回放工具
圖3是結(jié)合其可以實(shí)現(xiàn)一些所描述的實(shí)施例的示例媒體回放工具(300)的框圖。媒體回放工具(300)包括媒體源(310)、媒體解碼器(320)和媒體后處理器(330)。媒體回放工具(300)可以是能夠以多種回放模式中的任一種(諸如用于實(shí)時(shí)通信的低延遲解碼模式和用于從文件或流進(jìn)行媒體回放的高延遲解碼模式)操作的通用媒體回放工具,或者它可以是適于一種這樣的解碼模式的專用解碼工具。媒體回放工具(300)的相應(yīng)組件可以被實(shí)現(xiàn)為操作系統(tǒng)模塊的一部分,實(shí)現(xiàn)為應(yīng)用庫的一部分,實(shí)現(xiàn)為獨(dú)立應(yīng)用的一部分,或者使用專用硬件來實(shí)現(xiàn)。特別地,媒體解碼器(320)可以至少部分地使用asic、gpu或用于媒體解碼的其他專用硬件來實(shí)現(xiàn)。
媒體源(310)接收并解析根據(jù)媒體容器格式或流媒體格式組織的輸入數(shù)據(jù)。媒體容器格式可以是mpeg-2ts/ps、asf、mp4、cff、mkv或另一種媒體容器格式。流媒體格式可以是mpeg-dash、hls、平滑流、rtp的變型或另一流媒體格式。如圖3中所示,輸入數(shù)據(jù)包括用于媒體樣本的編碼數(shù)據(jù)以及樣本元數(shù)據(jù),該樣本元數(shù)據(jù)可以與輸入數(shù)據(jù)中的對應(yīng)媒體樣本具有任意關(guān)聯(lián)。在一些媒體容器格式(諸如mp4)中,例如,不同的字段包括用于媒體樣本的編碼數(shù)據(jù)和用于媒體樣本的樣本元數(shù)據(jù)(諸如時(shí)間戳)。例如,除去用于相應(yīng)媒體樣本的編碼數(shù)據(jù),媒體文件中的索引將時(shí)間戳映射到媒體樣本??梢詫τ糜诿襟w樣本的至少一些編碼數(shù)據(jù)進(jìn)行加密。典型地,媒體源(310)將處置這樣的加密內(nèi)容。加密內(nèi)容的解密可以在媒體源(310)中、在媒體解碼器(320)中或在媒體回放工具(300)中的某個(gè)其他組件中發(fā)生。解密可以用軟件執(zhí)行,或者解密可以卸載到asic、gpu或用于解密的其他專用硬件。
輸入數(shù)據(jù)的塊可具有不同的大小,例如從1到n字節(jié),其中n取決于實(shí)現(xiàn)。塊可以包括樣本元數(shù)據(jù)以及用于全部媒體樣本的編碼數(shù)據(jù)?;蛘撸瑝K可以包括樣本元數(shù)據(jù)以及用于媒體樣本的一部分的編碼數(shù)據(jù)。或者,塊可以包括樣本元數(shù)據(jù)以及用于多個(gè)媒體樣本中的每一個(gè)的至少一部分的編碼數(shù)據(jù)?;蛘?,塊可以僅包括用于一個(gè)或多個(gè)媒體樣本中的至少一部分的編碼數(shù)據(jù)。可以以任意方式將編碼數(shù)據(jù)分割成塊,并且可以與編碼數(shù)據(jù)任意關(guān)聯(lián)地傳遞樣本元數(shù)據(jù)??赡芤匀我忭樞蚪邮蛰斎霐?shù)據(jù)的塊,例如,由于網(wǎng)絡(luò)延遲。在圖3中,例如,第一塊包括用于第一媒體樣本f0的樣本元數(shù)據(jù)以及用于第一媒體樣本f0的編碼數(shù)據(jù)中的一些編碼數(shù)據(jù)。第二塊包括用于第四媒體樣本f3的樣本元數(shù)據(jù),用于第一媒體樣本f0的編碼數(shù)據(jù)的其余部分和用于第四媒體樣本f3的編碼數(shù)據(jù)。第三塊包括用于第二媒體樣本f1的樣本元數(shù)據(jù),用于第二媒體樣本f1的編碼數(shù)據(jù),用于第三媒體樣本f2的樣本元數(shù)據(jù)和用于第三媒體樣本f2的編碼數(shù)據(jù)中的一些編碼數(shù)據(jù)。最后,第四塊包括用于第三媒體樣本f2的編碼數(shù)據(jù)的其余部分。
從輸入數(shù)據(jù),媒體源(310)提取用于媒體樣本的樣本元數(shù)據(jù)和編碼數(shù)據(jù)。取決于實(shí)現(xiàn),媒體源(310)可以對已經(jīng)被聚合以作為媒體流進(jìn)行傳輸或者作為文件進(jìn)行存儲(chǔ)的編碼數(shù)據(jù)和樣本元數(shù)據(jù)進(jìn)行解包,在這種情況下,媒體源(310)解析被添加為媒體文件或媒體流的語法的一部分的語法元素?;蛘撸话愕?,媒體源(310)可以實(shí)現(xiàn)一個(gè)或多個(gè)媒體解復(fù)用協(xié)議。
媒體源(310)可以在多個(gè)步驟中將從輸入數(shù)據(jù)塊提取的樣本元數(shù)據(jù)與適當(dāng)?shù)拿襟w樣本相關(guān)聯(lián)。例如,對于給定的媒體樣本,媒體源(310)首先將輸入數(shù)據(jù)塊中的樣本元數(shù)據(jù)與該塊中的正確的一個(gè)或多個(gè)數(shù)據(jù)單元相關(guān)聯(lián)。數(shù)據(jù)單元可以是用于h.264/avc視頻或h.265/hevc視頻的網(wǎng)絡(luò)抽象層單元(“nalu”)或另一類型的數(shù)據(jù)單元。然后,從該塊中的所標(biāo)識(shí)的數(shù)據(jù)單元,以及可能地從一個(gè)或多個(gè)其他塊中的(多個(gè))數(shù)據(jù)單元,媒體源(310)將樣本元數(shù)據(jù)與用于給定的媒體樣本的編碼數(shù)據(jù)耦合。以這種方式,對于各種格式中的任一種的輸入數(shù)據(jù),在逐個(gè)樣本的基礎(chǔ)上重建樣本元數(shù)據(jù)并將其耦合到適當(dāng)?shù)拿襟w樣本。
在媒體源(310)中,解析器可以例如在數(shù)據(jù)單元邊界中的一些處標(biāo)識(shí)輸入數(shù)據(jù)內(nèi)的媒體樣本邊界。在圖3中所示的示例中,用于給定的媒體樣本的編碼數(shù)據(jù)在包括用于該給定的媒體樣本的樣本元數(shù)據(jù)的塊中開始,但不需要在該塊中完成。媒體源(310)提取用于第一媒體樣本f0的樣本元數(shù)據(jù),在輸入數(shù)據(jù)的第一塊和第二塊中標(biāo)識(shí)出具有用于第一媒體樣本f0的編碼數(shù)據(jù)的數(shù)據(jù)單元,并且將樣本元數(shù)據(jù)與第一媒體樣本f0的編碼數(shù)據(jù)進(jìn)行耦合。從第二塊,媒體源(310)提取用于第四媒體樣本f3的樣本元數(shù)據(jù),并且標(biāo)識(shí)出具有用于第四媒體樣本f3的編碼數(shù)據(jù)的任何數(shù)據(jù)單元。媒體源(310)將樣本元數(shù)據(jù)與用于第四媒體樣本f3的編碼數(shù)據(jù)進(jìn)行耦合。從第三塊,媒體源(310)提取用于第二媒體樣本f1的樣本元數(shù)據(jù),標(biāo)識(shí)具有用于第二媒體樣本f1的編碼數(shù)據(jù)的任何數(shù)據(jù)單元,并將樣本元數(shù)據(jù)與用于第二媒體樣本f1的編碼數(shù)據(jù)進(jìn)行耦合。媒體源(310)還提取用于第三媒體樣本f2的樣本元數(shù)據(jù),在第三和第四塊中標(biāo)識(shí)出具有用于第三媒體樣本f2的編碼數(shù)據(jù)的數(shù)據(jù)單元,并且將樣本元數(shù)據(jù)與用于第三媒體樣品f2的編碼數(shù)據(jù)進(jìn)行耦合。
為了將樣本元數(shù)據(jù)與媒體樣本進(jìn)行耦合,在解碼之前,媒體回放工具可以創(chuàng)建包括用于樣本元數(shù)據(jù)的一個(gè)或多個(gè)字段和用于編碼數(shù)據(jù)的字段的內(nèi)部變量。在解碼期間,為了將樣本元數(shù)據(jù)與媒體樣本進(jìn)行耦合,媒體回放工具可以創(chuàng)建這樣的內(nèi)部變量,其包括用于樣本元數(shù)據(jù)的一個(gè)或多個(gè)字段以及用于解碼參數(shù)和變量的一個(gè)或多個(gè)字段。在解碼之后,為了將樣本元數(shù)據(jù)與媒體樣本進(jìn)行耦合,媒體回放工具可以創(chuàng)建這樣的內(nèi)部變量,其包括用于樣本元數(shù)據(jù)的一個(gè)或多個(gè)字段以及用于媒體樣本的重建版本的字段。還可以通過在給定功能調(diào)用中一起使用用于媒體樣本(或媒體樣本的重建版本)的編碼數(shù)據(jù)和樣本元數(shù)據(jù)來將樣本元數(shù)據(jù)與媒體樣本進(jìn)行耦合。
用于媒體樣本的編碼數(shù)據(jù)與耦合的樣本元數(shù)據(jù)按解碼順序(也稱為編碼順序或輸入順序,其用于到編碼器的輸入)來組織,解碼順序是媒體樣本被解碼的順序。在圖3中,用于媒體樣本的解碼順序是f0,f3,f1和f2,其與顯示順序f0,f1,f2和f3不同。顯示順序(也稱為輸出順序)是顯示媒體樣本的順序。更一般地,媒體樣本的解碼順序可以與顯示順序相同(在這種情況下,在解碼之后跳過重新排序)或不同于顯示順序(在這種情況下,重建的樣本在解碼之后重新排序)。特別地,當(dāng)將樣本元數(shù)據(jù)與用于最近的視頻編解碼器格式(諸如h.264/avc、h.265/hevc和vp9)的媒體樣本進(jìn)行耦合時(shí),媒體源(310)在將樣本元數(shù)據(jù)與媒體樣本相關(guān)聯(lián)時(shí)計(jì)及媒體樣本(這里指視頻幀)的層級結(jié)構(gòu)。
樣本元數(shù)據(jù)的速率不是固定的,并且由于元數(shù)據(jù)元素的丟失,元數(shù)據(jù)元素的破壞或者媒體宿或記錄系統(tǒng)提供元數(shù)據(jù)元素的故障,針對一個(gè)或多個(gè)媒體樣本的元數(shù)據(jù)元素可能缺失。在圖3中,例如,媒體樣本之一(f2)缺失了pts??梢酝ㄟ^在元數(shù)據(jù)元素之間插值或通過重復(fù)元數(shù)據(jù)元素來替換缺失的元數(shù)據(jù)元素。例如,媒體回放工具(300)可以在兩個(gè)時(shí)間戳(dts,pts)之間插值以確定替換的時(shí)間戳(dts,pts)?;蛘?,媒體回放工具(300)可以重復(fù)來自先前的媒體樣本的元數(shù)據(jù)元素(例如,最大可解碼空間分辨率)。取決于何時(shí)將使用元數(shù)據(jù)元素,可以在處理的各個(gè)階段(例如,在解碼之前,在解碼期間,在解碼之后),替換缺失的元數(shù)據(jù)元素。因此,插值可以使用在媒體回放工具(300)中緩存的多個(gè)樣本,其仍然可以被編碼(在解碼之前),可以被部分解碼(在被解碼的過程中)或者可以被解碼??商鎿Q地,媒體回放工具(300)可以忽略(不替換)缺失的元數(shù)據(jù)元素。
典型地,媒體源(310)從媒體文件或媒體流中提取樣本元數(shù)據(jù)元素。然而,在一些情況下,媒體源(310)可以從媒體回放工具(300)的設(shè)置、媒體解碼器(320)的設(shè)置或其他設(shè)置確定樣本元數(shù)據(jù)元素,或者媒體源(310)可以從媒體樣本的編碼數(shù)據(jù)導(dǎo)出樣本元數(shù)據(jù)元素。
媒體源(310)將用于媒體基本比特流中的媒體樣本的編碼數(shù)據(jù)提供給媒體解碼器(320)以便利用耦合到適當(dāng)?shù)拿襟w樣本的樣本元數(shù)據(jù)進(jìn)行解碼。例如,在逐個(gè)樣本的基礎(chǔ)上,媒體源(310)調(diào)用由媒體解碼器(320)暴露的功能,其接受(a)用于媒體樣本的編碼數(shù)據(jù)以及(b)存儲(chǔ)與媒體樣本耦合的樣本元數(shù)據(jù)的元素的結(jié)構(gòu),作為輸入。
圖4a圖示出了由媒體解碼器(320)暴露的示例功能的占用空間(400)。feedsource()功能包括三個(gè)輸入?yún)?shù)–針對用于存儲(chǔ)給定媒體樣本的編碼數(shù)據(jù)的緩存器的字節(jié)數(shù)組的指針(*pbuffer)、緩存器中的編碼數(shù)據(jù)的長度值(bufferlength)以及用于存儲(chǔ)樣本元數(shù)據(jù)元素的結(jié)構(gòu)(metadata)。指針和長度值指示用于媒體樣本的編碼數(shù)據(jù)的位置和大小。metadata結(jié)構(gòu)的細(xì)節(jié)在圖2b中示出。該功能返回一個(gè)狀態(tài)值??商鎿Q地,由媒體解碼器(320)暴露的功能可具有不同的占用空間,例如,其中不同輸入?yún)?shù)用于不同樣本元數(shù)據(jù)元素,或者通過引用而不是通過值傳遞樣本元數(shù)據(jù)元素。
圖4b圖示出了存儲(chǔ)樣本元數(shù)據(jù)的元素的示例結(jié)構(gòu)(410)。結(jié)構(gòu)(410)包括用于媒體樣本(這里,視頻幀)的pts、幀呈現(xiàn)持續(xù)時(shí)間值和最大可解碼空間分辨率(在寬度和高度上)的字段。結(jié)構(gòu)(410)還包括用于標(biāo)志(例如,不連續(xù)性標(biāo)志)的字段??商鎿Q地,結(jié)構(gòu)(410)可以包括用于在解碼或呈現(xiàn)期間使用的其它和/或附加類型的樣本元數(shù)據(jù)元素。
媒體解碼器(320)在逐個(gè)樣本的基礎(chǔ)上接受用于媒體樣本的編碼數(shù)據(jù)以及耦合到相應(yīng)媒體樣本的樣本元數(shù)據(jù)。在一些情況下,對于媒體樣本可以省略樣本元數(shù)據(jù)-例如,使用樣本元數(shù)據(jù)元素的空結(jié)構(gòu)-如果這樣的樣本元數(shù)據(jù)不可用。媒體解碼器(320)可以是視頻解碼器(用于h.265/hevc、h.264/avc、vpx或另一格式)、音頻解碼器或其他類型的媒體解碼器。
一般地,盡管媒體解碼器(320)在解碼期間可能運(yùn)用一些樣本元數(shù)據(jù)元素,但是在解碼開始時(shí)與媒體樣本的編碼數(shù)據(jù)相關(guān)聯(lián)的樣本元數(shù)據(jù)在解碼期間仍然與媒體樣本相關(guān)聯(lián)。例如,媒體解碼器(320)可能在媒體樣本的解碼期間使用前滾動(dòng)值、不連續(xù)性標(biāo)志值或dts,但是通過諸如pts之類的其他元數(shù)據(jù)元素以便在輸出處理操作中使用。
媒體解碼器(320)利用仍然耦合到適當(dāng)?shù)拿襟w樣本的樣本元數(shù)據(jù)來分別生成媒體樣本的重建版本。如圖3中所示,如果媒體回放工具(300)不再使用一些樣本元數(shù)據(jù)元素,則可以丟棄這些樣本元數(shù)據(jù)元素??商鎿Q地,可以保留這些樣本元數(shù)據(jù)元素。以解碼順序生成媒體樣本的重建版本。此外,在圖3中,已經(jīng)利用通過在兩個(gè)其他pts值(pts1和pts3)之間插值而確定的pts值(pts2)來替換缺失的pts值。
媒體后處理器(330)執(zhí)行輸出處理操作,諸如樣本重新排序,媒體樣本的縮放和媒體樣本的旋轉(zhuǎn)。媒體后處理器(330)可以運(yùn)用一些樣本元數(shù)據(jù)元素,例如pts、旋轉(zhuǎn)數(shù)據(jù)、三維顯示元數(shù)據(jù)。例如,當(dāng)重新排序在解碼的圖片緩存器(“dpb”)中的視頻幀時(shí),媒體后處理器(330)使用pts和/或其他語法元素。在圖3中,媒體后處理器(330)以顯示順序輸出重新排序的媒體樣本。當(dāng)它將媒體樣本從解碼順序重新排序成顯示順序時(shí),媒體后處理器(330)可以并發(fā)地對與媒體樣本耦合的樣本元數(shù)據(jù)進(jìn)行重新排序。
一般地,可以在由媒體源(310)進(jìn)行的處理、利用媒體解碼器(320)進(jìn)行的解碼以及由媒體后處理器(330)進(jìn)行的輸出處理期間,將樣本元數(shù)據(jù)與適當(dāng)?shù)拿襟w樣本進(jìn)行耦合。這以各種方式簡化了樣本元數(shù)據(jù)的處置并且可以幫助避免在樣本元數(shù)據(jù)和媒體樣本之間的同步的丟失,否則這可能導(dǎo)致音頻/視頻同步或樣本重新排序的問題。特別地,由于復(fù)雜的圖片相關(guān)性,缺失或延遲樣本元數(shù)據(jù)的問題對于h.265/hevc視頻的媒體樣本而言可能是嚴(yán)重的。通過在解碼之前、期間和之后將樣本元數(shù)據(jù)與適當(dāng)?shù)拿襟w樣本進(jìn)行耦合,媒體回放工具(300)可以避免這樣的問題。例如,如果由于某種原因(例如,由于編碼數(shù)據(jù)的破壞)而丟棄了媒體樣本,則媒體回放工具(300)丟棄與媒體樣本耦合的樣本元數(shù)據(jù)。作為另一示例,如果媒體樣本由于某種原因(例如,由于網(wǎng)絡(luò)擁塞)而被延遲,則媒體回放工具(300)類似地延遲與媒體樣本耦合的樣本元數(shù)據(jù)。作為另一示例,如果媒體樣本由于某種原因(例如,圖片重復(fù)、特技模式處理)而分成多個(gè)新的媒體樣本,則樣本元數(shù)據(jù)與新的媒體樣本之一耦合,而不與(多個(gè))其他新的媒體樣本耦合。因此,一般地,樣本元數(shù)據(jù)的壽命可以與樣本元數(shù)據(jù)所耦合到的媒體樣本的壽命同等延伸。媒體回放工具(300)可以避免它具有比媒體樣本更多的樣本元數(shù)據(jù)或沒有足夠的用于媒體樣本的樣本元數(shù)據(jù)的情況——而是保持樣本元數(shù)據(jù)與媒體樣本之間的正確關(guān)聯(lián)。
b.示例視頻解碼器系統(tǒng)
圖5是結(jié)合其可以實(shí)現(xiàn)一些所描述的實(shí)施例的示例視頻解碼器系統(tǒng)(500)的框圖。視頻解碼器系統(tǒng)(500)是如參考圖3所描述的媒體回放工具(300)的示例。視頻解碼器系統(tǒng)(500)可以是能夠以多種解碼模式中的任何一種(諸如用于實(shí)時(shí)通信的低延遲解碼模式和用于從文件或流進(jìn)行媒體回放的較高延遲解碼模式)操作的通用視頻解碼工具,或者它可以是適于一種這樣的解碼模式的專用解碼工具。視頻解碼器系統(tǒng)(500)可以被實(shí)現(xiàn)為操作系統(tǒng)模塊的一部分,實(shí)現(xiàn)為應(yīng)用庫的一部分,實(shí)現(xiàn)為獨(dú)立應(yīng)用的一部分,或使用專用硬件來實(shí)現(xiàn)??偟膩碚f,解碼器系統(tǒng)(500)從通道(510)接收編碼數(shù)據(jù),并生成重建幀作為輸出目的地(590)的輸出。
通道(510)可以表示存儲(chǔ)裝置、通信連接或用于編碼數(shù)據(jù)的另一通道,作為輸入。通道(510)生成已經(jīng)被通道編碼的編碼數(shù)據(jù)。通道解碼器(520)是如參考圖3描述的媒體源(310)的示例,其處理編碼數(shù)據(jù)以提取用于媒體樣本的編碼數(shù)據(jù)和樣本元數(shù)據(jù)。例如,通道解碼器(520)對已經(jīng)被聚集以作為媒體流進(jìn)行傳輸或存儲(chǔ)(例如,根據(jù)媒體節(jié)目流或傳輸流格式,諸如mpeg-2ts/ps或rtp格式的變型)的數(shù)據(jù)進(jìn)行解包和/或解復(fù)用,在這種情況下,通道解碼器(520)可以解析作為媒體流的語法的一部分而添加的語法元素?;蛘撸ǖ澜獯a器(520)分離已經(jīng)被聚集來作為文件進(jìn)行存儲(chǔ)(例如,根據(jù)諸如mp4之類的媒體容器格式)的編碼的媒體數(shù)據(jù),在這種情況下,通道解碼器(520)可以解析作為媒體文件的語法的一部分添加的語法元素?;蛘?,更一般地,通道解碼器(520)可以實(shí)現(xiàn)一個(gè)或多個(gè)媒體系統(tǒng)解復(fù)用協(xié)議或傳輸協(xié)議,在這種情況下,通道解碼器(520)可以解析作為(多個(gè))協(xié)議的語法的一部分而添加的語法元素??梢詫τ糜诿襟w樣本的至少一些編碼數(shù)據(jù)進(jìn)行加密。加密內(nèi)容的解密可以在通道解碼器(520)中,在解碼器(550)中或在視頻解碼器系統(tǒng)(500)中的某個(gè)其他組件中發(fā)生??梢岳帽慌渲糜糜诮饷艿能浖?qū)S糜布韴?zhí)行解密。通道(510)或通道解碼器(520)還可以包括其它元件(未示出),例如用于fec解碼和模擬信號(hào)解調(diào)。
從通道解碼器(520)輸出的編碼數(shù)據(jù)(521)和樣本元數(shù)據(jù)被存儲(chǔ)在臨時(shí)編碼數(shù)據(jù)區(qū)域(530)中,直到已經(jīng)接收到足夠量的這樣的數(shù)據(jù)為止。編碼數(shù)據(jù)(521)包括編碼幀(531)、mmco/rps信息(532)和樣本元數(shù)據(jù)。編碼數(shù)據(jù)區(qū)域(530)中的編碼數(shù)據(jù)(521)包含作為基本編碼視頻比特流的語法的一部分的用于一個(gè)或多個(gè)幀的編碼數(shù)據(jù)。編碼數(shù)據(jù)區(qū)域(530)還可以存儲(chǔ)與用于幀的編碼數(shù)據(jù)(521)相關(guān)的樣本元數(shù)據(jù),視頻解碼系統(tǒng)(500)將其與適當(dāng)?shù)膸M(jìn)行耦合。
一般地,編碼數(shù)據(jù)區(qū)域(530)臨時(shí)存儲(chǔ)編碼數(shù)據(jù)(521),直到這樣的編碼數(shù)據(jù)(521)被解碼器(550)使用為止,解碼器(550)是如參考圖3描述的媒體解碼器(320)的示例。在該點(diǎn)處,將用于編碼幀(531)的編碼數(shù)據(jù)以及與其耦合的樣本元數(shù)據(jù)和mmco/rps信息(532)從編碼數(shù)據(jù)區(qū)域(530)傳輸?shù)浇獯a器(550)。隨著解碼繼續(xù),新的編碼數(shù)據(jù)(521)和樣本元數(shù)據(jù)被添加到編碼數(shù)據(jù)區(qū)域(530),并且保持在編碼數(shù)據(jù)區(qū)域(530)中的最舊的編碼數(shù)據(jù)連同耦合的樣本元數(shù)據(jù)一起被傳輸?shù)浇獯a器(550)。
解碼器(550)對編碼幀(531)進(jìn)行解碼以生成對應(yīng)的解碼幀(551),其仍然與用于該幀的樣本元數(shù)據(jù)耦合。如果適當(dāng)?shù)脑?,?dāng)執(zhí)行其解碼時(shí),解碼器(550)可以使用一個(gè)或多個(gè)先前解碼幀(569)作為用于幀間預(yù)測的參考幀。解碼器(550)從解碼幀臨時(shí)存儲(chǔ)器存儲(chǔ)區(qū)域(560)讀取這樣的先前解碼幀(569)。一般地,解碼器(550)包括多個(gè)解碼模塊,其執(zhí)行解碼任務(wù),諸如熵解碼、幀內(nèi)預(yù)測、??運(yùn)動(dòng)補(bǔ)償幀間預(yù)測、逆量化和逆頻率變換(如果沒有跳過的話)。由解碼器(550)執(zhí)行的確切操作可以根據(jù)壓縮格式而變化。
例如,解碼器(550)接收用于壓縮幀或幀序列的編碼數(shù)據(jù),并生成包括解碼幀(551)和與其耦合的樣本元數(shù)據(jù)的輸出。在解碼器(550)中,緩存器接收用于壓縮幀的編碼數(shù)據(jù),并且在適當(dāng)時(shí)間,使得所接收的編碼數(shù)據(jù)可用于熵解碼器。熵解碼器對熵編碼的量化數(shù)據(jù)以及熵編碼的邊信息進(jìn)行熵解碼,典型地應(yīng)用在編碼器中執(zhí)行的熵編碼的逆。運(yùn)動(dòng)補(bǔ)償器將運(yùn)動(dòng)信息應(yīng)用于一個(gè)或多個(gè)參考幀以形成用于正被重建的幀的任何幀間編碼塊的運(yùn)動(dòng)補(bǔ)償預(yù)測值。幀內(nèi)預(yù)測模塊可以從相鄰的先前重建樣本值空間地預(yù)測當(dāng)前塊的樣本值。解碼器(550)還重建預(yù)測殘差值。逆量化器對熵解碼的數(shù)據(jù)進(jìn)行逆量化。例如,解碼器(550)基于比流中的語法元素來設(shè)置用于圖片、圖塊、切片和/或視頻的其他部分的qp的值,并且相應(yīng)地逆量化變換系數(shù)。逆頻率變換器將量化的頻域數(shù)據(jù)轉(zhuǎn)換為空間域數(shù)據(jù)。在一些實(shí)現(xiàn)中,可以跳過頻率變換,在這種情況下,也跳過逆頻率變換。如果這樣的話,則可以對預(yù)測殘差值進(jìn)行熵解碼和逆量化。對于幀間預(yù)測塊,解碼器(550)將重建的預(yù)測殘差值與運(yùn)動(dòng)補(bǔ)償預(yù)測值組合。解碼器(550)可類似地將預(yù)測殘差值與來自幀內(nèi)預(yù)測的預(yù)測值組合。自適應(yīng)解塊過濾器包括在視頻解碼器(550)中的運(yùn)動(dòng)補(bǔ)償環(huán)內(nèi)以平滑跨解碼幀(551)中的塊邊界行和/或列的不連續(xù)性??梢钥商鎿Q地或附加地應(yīng)用其他過濾(諸如去環(huán)過濾,alf或sao過濾;未示出)作為環(huán)中過濾操作。解碼器(550)可以在解碼期間運(yùn)用一些樣本元數(shù)據(jù)元素,但是通過解碼器(550)傳遞仍然耦合到適當(dāng)幀的其他樣本元數(shù)據(jù)元素。(在解碼期間運(yùn)用的樣本元數(shù)據(jù)元素可以保持與適當(dāng)?shù)膸詈匣虮粊G棄)。
解碼幀臨時(shí)存儲(chǔ)器存儲(chǔ)區(qū)域(560)包括多個(gè)幀緩存器存儲(chǔ)區(qū)域(561,562,...,56n)。解碼幀存儲(chǔ)區(qū)域(560)是dpb的示例。解碼器(550)使用mmco/rps信息(532)來標(biāo)識(shí)幀緩存器(561,562等),其中它可以存儲(chǔ)解碼幀(551)以及與其耦合的樣本元數(shù)據(jù)。解碼器(550)將解碼幀(551)和耦合的樣本元數(shù)據(jù)存儲(chǔ)在該幀緩存器中。
輸出定序器(580)是如參考圖3所描述的媒體后處理器(330)的示例,其標(biāo)識(shí)以顯示順序要生成的下一幀何時(shí)在解碼幀存儲(chǔ)區(qū)域(560)中可用。當(dāng)以顯示順序要生成的下一幀(581)在解碼幀存儲(chǔ)區(qū)域(560)中可用時(shí),它由輸出定序器(580)讀取并輸出到輸出目的地(590)(例如,顯示器)。一般地,輸出定序器(580)從解碼幀存儲(chǔ)區(qū)域(560)輸出幀的順序可以不同于解碼器(550)解碼幀的順序。當(dāng)重新排序幀時(shí),輸出定序器(580)可以使用pts值和/或其他語法元素。可以使用樣本元數(shù)據(jù)的其他后處理操作(例如,縮放,旋轉(zhuǎn))在圖5中未示出。
c.樣本元數(shù)據(jù)處理的示例技術(shù)
圖6圖示出了用于處理與適當(dāng)?shù)拿襟w樣本耦合的樣本元數(shù)據(jù)的第一一般化技術(shù)(600)。參考圖3或圖5描述的媒體回放工具或其他媒體回放工具可以執(zhí)行該技術(shù)(600)。圖6中所示的技術(shù)(600)的焦點(diǎn)在于,樣本元數(shù)據(jù)和適當(dāng)?shù)拿襟w樣本之間的關(guān)聯(lián)的標(biāo)識(shí)。
媒體回放工具接收(610)被分割成數(shù)據(jù)單元的輸入數(shù)據(jù)。輸入數(shù)據(jù)根據(jù)媒體容器格式或流媒體格式來組織。輸入數(shù)據(jù)包括用于媒體樣本的媒體基本比特流中的編碼數(shù)據(jù)。輸入數(shù)據(jù)還包括用于至少一些媒體樣本的在媒體基本比特流之外的樣本元數(shù)據(jù)。
媒體回放工具將樣本元數(shù)據(jù)中的給定樣本元數(shù)據(jù)與數(shù)據(jù)單元中的給定數(shù)據(jù)單元相關(guān)聯(lián)(620)。然后,媒體回放工具將給定樣本元數(shù)據(jù)與具有在該給定數(shù)據(jù)單元中開始的編碼數(shù)據(jù)的給定媒體樣本(在媒體樣本中)進(jìn)行耦合(630)。例如,給定數(shù)據(jù)單元是:(a)僅僅用于給定媒體樣本的編碼數(shù)據(jù)的一部分,(b)僅僅用于給定媒體樣本的所有編碼數(shù)據(jù),或(c)用于給定媒體樣本的編碼數(shù)據(jù)中的至少一些編碼數(shù)據(jù)以及用于一個(gè)或多個(gè)其他媒體樣本的至少一些編碼數(shù)據(jù)。
媒體回放工具向媒體解碼器提供(640)用于給定媒體樣本的編碼數(shù)據(jù)和給定樣本元數(shù)據(jù)。一般地,在解碼和/或輸出處理階段中的至少一些階段期間,給定樣本元數(shù)據(jù)的壽命可以與給定媒體樣本的壽命同等延伸。例如,媒體解碼器被配置為,即使給定媒體樣本被丟棄,延遲或分割,也保持給定樣本元數(shù)據(jù)與給定媒體樣本的耦合。對于給定的媒體樣本,媒體回放工具可以(a)確定是否丟棄給定的媒體樣本,并且響應(yīng)于確定丟棄給定的媒體樣本,還丟棄給定的樣本元數(shù)據(jù),(b)確定是否延遲給定的媒體樣本,并且響應(yīng)于確定延遲給定的媒體樣本,還延遲給定的樣本元數(shù)據(jù),和/或(c)確定是否將給定的媒體樣本分割成多個(gè)新的媒體樣本,并且響應(yīng)于將給定的媒體樣本分割成多個(gè)新的媒體樣本,將給定的樣本元數(shù)據(jù)分配給僅僅所述多個(gè)新的媒體樣本中的第一新的媒體樣本,而不分配給所述多個(gè)新的媒體樣本中的其他新的媒體樣本。
圖7圖示出了用于處理與適當(dāng)?shù)拿襟w樣本耦合的樣本元數(shù)據(jù)的第二一般化技術(shù)(700)。參考圖3或圖5描述的媒體回放工具或其他媒體回放工具可以執(zhí)行該技術(shù)(700)。圖7中所示的技術(shù)(700)的焦點(diǎn)在于,如何將用于媒體樣本的編碼數(shù)據(jù)和樣本元數(shù)據(jù)提供給媒體解碼器。
媒體回放工具在媒體基本比特流中標(biāo)識(shí)(710)用于當(dāng)前媒體樣本的編碼數(shù)據(jù)。從媒體基本比特流的外部(例如,在按照媒體容器格式的媒體文件或按照流媒體格式的媒體流的元素中,或從媒體回放工具或媒體解碼器的設(shè)置),媒體回放工具還標(biāo)識(shí)(720)用于當(dāng)前媒體樣本的樣本元數(shù)據(jù)。媒體回放工具將用于當(dāng)前媒體樣本的樣本元數(shù)據(jù)與當(dāng)前媒體樣本進(jìn)行耦合(730)。例如,為了這樣做,媒體回放工具可以使用圖6中所示的技術(shù)(600)來確定樣本元數(shù)據(jù)和當(dāng)前媒體樣本之間的關(guān)聯(lián)??商鎿Q地,媒體回放工具使用另一種方法來確定樣本元數(shù)據(jù)和適當(dāng)?shù)拿襟w樣本之間的關(guān)聯(lián)。
媒體回放工具并發(fā)地向媒體解碼器提供(740)用于當(dāng)前媒體樣本的樣本元數(shù)據(jù)和用于當(dāng)前媒體樣本的編碼數(shù)據(jù)。例如,樣本元數(shù)據(jù)和編碼數(shù)據(jù)被傳遞到媒體解碼器,作為對由媒體解碼器暴露的功能的功能調(diào)用的參數(shù)。樣本元數(shù)據(jù)可以作為功能調(diào)用中的結(jié)構(gòu)被傳遞,并且可以使用指針和長度值通過引用傳遞編碼數(shù)據(jù)??商鎿Q地,樣本元數(shù)據(jù)和編碼數(shù)據(jù)以某種其他方式傳遞到媒體解碼器。
然后,媒體回放工具可以利用媒體解碼器對用于當(dāng)前媒體樣本的編碼數(shù)據(jù)進(jìn)行解碼,以生成當(dāng)前媒體樣本的重建版本。媒體回放工具還可以處理用于當(dāng)前媒體樣本的重建版本以用于輸出,例如,執(zhí)行從解碼順序(也稱為編碼順序或輸入順序)到顯示順序(也稱為輸出順序)的樣本重新排序。在解碼期間,用于當(dāng)前媒體樣本的樣本元數(shù)據(jù)的至少一個(gè)樣本元數(shù)據(jù)元素可以保持與當(dāng)前媒體樣本耦合。這樣的(多個(gè))樣本元數(shù)據(jù)元素可以在輸出處理期間被運(yùn)用。在解碼期間可以運(yùn)用一個(gè)或多個(gè)其他語法元素。當(dāng)相對于另一個(gè)媒體樣本將當(dāng)前媒體樣本從解碼順序重新排序成顯示順序時(shí),媒體回放工具可以與當(dāng)前媒體樣本的重建版本的重新排序并行地重新排序用于當(dāng)前媒體樣本的樣本元數(shù)據(jù)中的至少一些樣本元數(shù)據(jù)。
圖8圖示出了用于處理與適當(dāng)?shù)拿襟w樣本耦合的樣本元數(shù)據(jù)的第三一般化技術(shù)(800)。參考圖3或圖5描述的媒體回放工具或其他媒體回放工具可以執(zhí)行該技術(shù)(800)。圖8中所示的技術(shù)(800)的焦點(diǎn)在于,在解碼期間維持樣本元數(shù)據(jù)元素和適當(dāng)?shù)拿襟w樣本的耦合。
媒體回放工具標(biāo)識(shí)(810)用于當(dāng)前媒體樣本的編碼數(shù)據(jù),并標(biāo)識(shí)(820)用于當(dāng)前媒體樣本的樣本元數(shù)據(jù)。媒體回放工具將用于當(dāng)前媒體樣本的樣本元數(shù)據(jù)與當(dāng)前媒體樣本進(jìn)行耦合(830)。例如,為了這樣做,媒體回放工具可以使用圖6中所示的技術(shù)(600)來確定樣本元數(shù)據(jù)和當(dāng)前媒體樣本之間的關(guān)聯(lián)??商鎿Q地,媒體回放工具使用另一種方法來確定樣本元數(shù)據(jù)和適當(dāng)?shù)拿襟w樣本之間的關(guān)聯(lián)。
在對當(dāng)前媒體樣本執(zhí)行的解碼的至少一個(gè)階段期間,媒體回放工具保持(840)用于當(dāng)前媒體樣本的樣本元數(shù)據(jù)的至少一個(gè)樣本元數(shù)據(jù)元素與當(dāng)前媒體樣本的耦合。在這樣做時(shí),媒體回放工具確定是否丟棄當(dāng)前媒體樣本,并且如果當(dāng)前媒體樣本被丟棄,則還丟棄與當(dāng)前媒體樣本耦合的樣本元數(shù)據(jù)。媒體回放工具還可以確定是否延遲當(dāng)前媒體樣本,并且如果當(dāng)前媒體樣本被延遲,則還延遲與當(dāng)前媒體樣本耦合的樣本元數(shù)據(jù)。雖然用于當(dāng)前媒體樣本的一個(gè)或多個(gè)樣本元數(shù)據(jù)元素可以通過解碼,但是在解碼期間可以運(yùn)用一個(gè)或多個(gè)其他樣本。可以在輸出處理期間運(yùn)用通過解碼的(多個(gè))樣本元數(shù)據(jù)元素(例如,用于樣本重新排序)。
關(guān)于圖6、7和8中所示的技術(shù)(600,700,800),用于當(dāng)前媒體樣本(或給定媒體樣本)的樣本元數(shù)據(jù)可以包括以下項(xiàng)中的一個(gè)或多個(gè):pts、dts、幀呈現(xiàn)持續(xù)時(shí)間值、最大可解碼空間分辨率值、前滾動(dòng)標(biāo)志值、不連續(xù)性標(biāo)志值、旋轉(zhuǎn)數(shù)據(jù)和三維顯示數(shù)據(jù)??商鎿Q地,用于當(dāng)前媒體樣本(或給定媒體樣本)的樣本元數(shù)據(jù)包括其他和/或附加樣本元數(shù)據(jù)元素。
關(guān)于圖6、7和8中所示的技術(shù)(600,700,800),在解碼之前,期間或之后,媒體回放工具可以替換缺失的樣本元數(shù)據(jù)元素。例如,媒體回放工具可以確定當(dāng)前媒體樣本是否缺失樣本元數(shù)據(jù)元素(例如,時(shí)間戳),并且響應(yīng)于確定當(dāng)前媒體樣本缺失樣本元數(shù)據(jù)元素,在用于其他媒體樣本的樣本元數(shù)據(jù)元素(例如,例如時(shí)間戳)之間插值,以確定用于缺失的樣本元數(shù)據(jù)元素的替換物。
關(guān)于圖6、7和8中所示的技術(shù)(600,700,800),用于(多個(gè))媒體樣本的編碼數(shù)據(jù)中的至少一些編碼數(shù)據(jù)可以被加密。如果這樣的話,則媒體回放工具在對該編碼數(shù)據(jù)進(jìn)行解碼之前對加密內(nèi)容進(jìn)行解密。加密內(nèi)容的解密可以在媒體源、媒體解碼器或媒體回放工具中的其他組件中發(fā)生。
鑒于可以對其應(yīng)用所公開的發(fā)明的原理的許多可能的實(shí)施例,應(yīng)當(dāng)認(rèn)識(shí)到,所圖示的實(shí)施例僅是本發(fā)明的優(yōu)選示例,并且不應(yīng)被當(dāng)作限制本發(fā)明的范圍。相反,本發(fā)明的范圍由所附權(quán)利要求限定。因此,我們要求保護(hù)進(jìn)入這些權(quán)利要求的范圍和精神內(nèi)的所有內(nèi)容作為我們的發(fā)明。