處理編碼視頻幀的序列的方法
【專利摘要】一種處理由數(shù)字?jǐn)?shù)據(jù)流傳送的編碼視頻幀序列的方法,其中,每個幀表示圖像,該方法包括在記錄設(shè)備處接收編碼視頻幀序列,確定序列的第(i+1)個編碼幀與序列的第(i+1)個編碼幀的呈現(xiàn)之間的幀間隔,計(jì)算用于第(i+1)個編碼幀的流時間戳,以及基于用于第(i+1)個編碼視頻幀的流時間戳和先前確定的幀間隔來計(jì)算用于第(i+1)個編碼視頻幀的流時間戳。
【專利說明】處理編碼視頻幀的序列的方法
【背景技術(shù)】
[0001]本專利申請的主題涉及處理編碼視頻幀的序列的方法。該處理方法允許以明確的方式在重放期間檢索編碼幀。
[0002]電視節(jié)目安排(programming)提供商通常產(chǎn)生用于由服務(wù)提供商(諸如有線電視系統(tǒng)運(yùn)營商)通過視頻傳輸網(wǎng)絡(luò)分發(fā)到觀看者的廣大觀眾的節(jié)目安排信號。按照慣例,節(jié)目安排信號作為未壓縮視頻序列和至少一個相應(yīng)的未壓縮音頻序列開始。本申請的主題涉及處理視頻序列,并且相應(yīng)地,我們將不進(jìn)一步討論音頻序列。
[0003]未壓縮視頻序列由表示各圖像的一系列連續(xù)幀組成,并且在產(chǎn)生設(shè)施處被組裝。在組裝之后,未壓縮視頻序列被視頻編碼器壓縮,該視頻編碼器使用諸如一般地稱為MPEG-2的視頻壓縮算法將每個幀編碼,并且創(chuàng)建相應(yīng)的壓縮視頻幀。該編碼視頻序列通過傳輸網(wǎng)絡(luò)被發(fā)送至客戶端,在客戶端處,包括在接收終端中的視頻解碼器將用于所選節(jié)目的視頻序列解碼,并且將解碼幀供應(yīng)給電視機(jī),用于向觀看者呈現(xiàn)相應(yīng)的圖像序列。
[0004]MPEG-2視頻壓縮算法將未壓縮視頻幀編碼為幀內(nèi)編碼幀或I幀、預(yù)測編碼幀(P幀)或者雙向預(yù)測編碼幀(B幀)。I幀和P幀也稱為參考幀或錨定幀,而B幀也稱為相關(guān)幀(dependent frames)。I巾貞包含原始圖片的完整描述。P巾貞包含與在時間上較早的I巾貞相比較的圖片的描述。這允許編碼器使用與等價I幀將需要的位相比明顯更少的位來描述P幀。B幀包含與在時間上較早的參考幀和在時間上稍后的參考幀兩者相比較的圖片的描述。這允許編碼器使用比等價I幀大約少了一個數(shù)量級的位來描述B幀。因此將認(rèn)識到的是,P幀是相關(guān)幀(相對于I幀)和參考幀(相對于B幀)兩者。
[0005]除包括表示捕捉的圖像的數(shù)據(jù)之外,每個編碼幀包括呈現(xiàn)時間戳。該呈現(xiàn)時間戳或PTS是由計(jì)數(shù)90kHz系統(tǒng)時鐘信號的循環(huán)的計(jì)數(shù)器獲得的計(jì)數(shù)的33位值。PTS值反映相對于系統(tǒng)時鐘的幀的期望播出時間。
[0006]編碼幀的序列被輸入到系統(tǒng)編碼器,系統(tǒng)編碼器將編碼幀封裝在分組(諸如分組化的基本流分組,這對于本領(lǐng)域的技術(shù)人員而言是眾所周知的)中,該分組能夠通過適當(dāng)?shù)耐ㄐ呕A(chǔ)設(shè)施被高效地發(fā)送至包括視頻解碼器的接收終端。
[0007]一般地,旨在應(yīng)當(dāng)以與例如由照相機(jī)獲取相應(yīng)圖像相同的順序來呈現(xiàn)幀以進(jìn)行顯示。對于每個未壓縮視頻幀,視頻編碼器確定相應(yīng)編碼視頻幀的適當(dāng)類型和編碼順序中的編碼幀的位置。編碼器可以確定第一幀(Fl)應(yīng)被編碼為參考幀(I或P)。在這種情況下,接下來的兩個幀(F2、F3)正常地將被編碼為B幀且第四幀(F4)將被編碼為P幀。編碼器將首先將幀F(xiàn)l和F4編碼且然后使用編碼幀F(xiàn)l和F4作為參考幀將幀F(xiàn)2和F3編碼。編碼器以序列F1、F4、F2、F3來發(fā)送幀。
[0008]讓我們假設(shè)幀F(xiàn)l被編碼為I幀。由于相關(guān)編碼幀取決于至少一個參考幀,所以解碼器必須在相關(guān)幀能夠被解碼之前將參考幀解碼。因此,雖然編碼幀按照編碼順序F1、F4、F2、F3被發(fā)送且隨后被解碼,但下游接收終端可能未簡單地按照幀被接收到的順序輸出已解碼幀。對于在序列中與其要被顯示相比較更早地發(fā)送的編碼幀而言,除PTS之外,系統(tǒng)編碼器還相對于系統(tǒng)時間時鐘將解碼時間戳(DTS)插入編碼幀的分組中。對于不需要重新排序的那些幀,DTS和PTS將是相同的,因此只有PTS被發(fā)送,并且PTS被用來確定解碼時間。
[0009]接收終端以已知方式操作以生成被同步至編碼器的系統(tǒng)時鐘信號的系統(tǒng)時鐘信號。具有最小功能的接收終端、諸如沒有記錄能力的簡單機(jī)頂盒(STB)包括從分組化的基本流恢復(fù)編碼視頻幀的序列的接收器和接收編碼視頻幀、基于DTS來將幀緩沖并解碼以及基于PTS將幀緩沖并呈現(xiàn)的視頻解碼器。
[0010]有線電視和衛(wèi)星電視分發(fā)服務(wù)的許多訂戶使用結(jié)合了 PVR (個人視頻錄像機(jī))的更尖端接收終端來記錄電視節(jié)目材料以用于稍后的重放和觀看。在這種情況下,視頻幀以編碼形式被存儲,并且在期望時以與上述簡單STB所采用的方式類似的方式被解碼和重放。
[0011]典型的PVR支持各種特效播放模式,包括快進(jìn)(FF)和快退(RR),這允許觀看者快速地瀏覽不很感興趣的材料。PVR通過丟棄接收序列的幀、即通過將接收序列的幀從被解碼并供應(yīng)給視頻顯示緩沖器的序列省略來實(shí)現(xiàn)FF和RR重放。PVR以正常的恒定速率(在美國,即每秒約30幀)來顯示幀,但是由于接收序列的幀被丟棄,所以顯示的圖像以比在正常重放中更大的速度進(jìn)行。
[0012]被視頻編碼器壓縮的未壓縮視頻序列可以包括穿插有補(bǔ)充內(nèi)容塊(例如一個或多個商業(yè)廣告、公益廣告、站臺識別消息等)的特征內(nèi)容,諸如重演電視節(jié)目的情節(jié)。在產(chǎn)生設(shè)施處,節(jié)目安排提供商使用常規(guī)視頻編輯技術(shù)來以預(yù)定間隔向特征內(nèi)容中插入補(bǔ)充內(nèi)容塊。
[0013]在產(chǎn)生設(shè)施處被插入到未壓縮視頻序列中的補(bǔ)充內(nèi)容塊通常采取一系列視頻序列的形式,其具有相對短的持續(xù)時間(例如8個不同的視頻序列,每個具有30秒或I分鐘的持續(xù)時間)。作為節(jié)目安排提供商與服務(wù)提供商之間的商業(yè)安排的一部分,某些廣告內(nèi)容塊可以包含某個低優(yōu)先級廣告內(nèi)容,諸如由國家電視網(wǎng)本身提供的廣告。這允許地區(qū)或本地服務(wù)提供商以編碼視頻幀的序列的形式用其自己的本地或更具體地目標(biāo)廣告內(nèi)容來覆寫節(jié)目安排信號中的低優(yōu)先級廣告內(nèi)容。此“廣告插入”能力對于服務(wù)提供商而言是有利的,因?yàn)槠淠軌蛱峁┚唧w地針對其客戶基礎(chǔ)的目標(biāo)廣告內(nèi)容。
[0014]然而,編碼視頻幀的序列中的廣告內(nèi)容塊的插入可能導(dǎo)致時間戳(PTS和DTS)中的不連續(xù)。
[0015]如上所述當(dāng)編碼視頻序列內(nèi)容被簡單STB解碼并按照接收的那樣呈現(xiàn)時,時間戳中的不連續(xù)被隱藏。然而,當(dāng)編碼視頻序列材料被PVR記錄并在稍后被重放且用戶希望使用特效播放能力時,可能觀察到多個不期望效果。特別地,當(dāng)在時間戳中存在不連續(xù)時,PVR選擇正確的視頻幀并將其發(fā)送到解碼器是困難的。進(jìn)一步地,暫停并隨后在先前暫停幀處重新開始是難以實(shí)現(xiàn)的,因此在具有不連續(xù)時間戳的內(nèi)容的情況下,是逐幀的緩慢前進(jìn)。
[0016]更復(fù)雜的接收終端(具有PVR能力)服從服務(wù)提供商(諸如有線電視系統(tǒng)運(yùn)營商)的受限控制,允許服務(wù)提供商將用于稍后插入的補(bǔ)充內(nèi)容存儲到正在被重放和顯示的視頻流中。例如,服務(wù)運(yùn)營商可以使接收終端從因特網(wǎng)攝取廣告材料以用于后續(xù)播出。在大多數(shù)情況下,以非實(shí)時速度來攝取此類材料。
[0017]已經(jīng)建議,PVR應(yīng)使用具有內(nèi)容文件和索引文件的關(guān)系數(shù)據(jù)庫將編碼視頻幀存儲在大規(guī)模存儲器件中。在此建議的實(shí)施方式中,PVR接收視頻幀并向每個幀分配本地幀(local frame)時間戳(LFTS),將視頻幀連同內(nèi)容偏移位置(內(nèi)容文件中的幀的記錄編號)一起存儲在內(nèi)容文件中以識別內(nèi)容文件中的幀的位置,并將LFTS連同PTS和偏移信息一起存儲在索引文件中以識別該位置。在重放時,DVR使用PTS來從索引文件檢索LFTS,并且然后使用所檢索LFTS來確定內(nèi)容文件中的有關(guān)視頻幀的時間位置和偏移(從而按照接收的那樣重新創(chuàng)建幀的序列),基于DTS將所檢索的幀緩沖并解碼,并基于PTS將已解碼幀緩沖并呈現(xiàn)。
[0018]此已知DVR存在的一個問題是當(dāng)插入了廣告時,廣告的幀具有其自己的PTS值序列,因此在序列中存在從節(jié)目的開頭開始的中斷。另一個是在特效播放期間,PTS值未連續(xù)地增加。
[0019]以這種方式使用本地幀時間戳不是最佳的,因?yàn)镻TS不連續(xù)可能由于PTS值被多個節(jié)目重新使用和不同視頻流的交織而引起。
[0020]此外,這種方法在記錄以非實(shí)時速度發(fā)生時是沒有幫助的,如上文所討論的,因?yàn)長FTS值基于機(jī)頂盒中的操作系統(tǒng)時鐘的時鐘周期(clock tick)而不是基于視頻流的實(shí)際時間。因此,基于LFTS值的時間位置可能不是準(zhǔn)確的。
【發(fā)明內(nèi)容】
[0021]根據(jù)本文公開主題的第一方面,提供了一種處理由數(shù)字?jǐn)?shù)據(jù)流傳送的編碼視頻幀的序列的方法,其中,每個幀表示圖像,該方法包括a.在記錄設(shè)備處接收編碼視頻幀的序列,b.確定序列的第i個編碼幀與序列的第(i+Ι)個編碼幀的呈現(xiàn)之間的幀間隔,c.在記錄設(shè)備處,計(jì)算用于第i個編碼幀的流時間戳,以及d.在記錄設(shè)備處,基于用于第i個編碼視頻幀的流時間戳和在步驟b中確定的幀間隔來計(jì)算用于第(i+Ι)個編碼視頻幀的流時間戳。
[0022]根據(jù)本文公開的主題的第二方面,提供了一種修改由幀的序列組成的數(shù)字?jǐn)?shù)據(jù)流的方法,其中,每個幀表示圖像且包括指定用于幀的呈現(xiàn)時間戳值的數(shù)據(jù)字段,該方法包括
a.基于標(biāo)稱幀速率用幀間隔值將變量Int_fr初始化;b.接收第一幀并讀取該幀的呈現(xiàn)時間戳值,向變量PTS分配第一幀的呈現(xiàn)時間戳值,向變量Clock_start分配變量PTS的值用于基于呈現(xiàn)時間戳來表不第一巾貞的時鐘時間,向變量Clock_pts分配變量PTS的值用于基于呈現(xiàn)時間戳來表示幀的時鐘時間,向變量ST*分配值零用于表示感興趣的流時間戳;
c.接收下一個幀并讀取所述下一個幀的呈現(xiàn)時間戳值,向變量PTS分配所述下一個幀的呈現(xiàn)時間戳值,向變量Diff分配值(PTS-Clock_pts),向變量Clock_pts分配值PTS,并向變量ST*分配值(ST*+Int_fr);以及d.測試在所述下一個幀與前一幀之間是否存在呈現(xiàn)時間戳值的不連續(xù),并且如果存在的話,向變量ST_dis*分配值ST*,用于表示呈現(xiàn)時間戳中的不連續(xù)點(diǎn)處的感興趣流時間戳的值,并向變量Clock_start分配值PTS并使用ST*的值作為索引將所述下一個幀存儲在數(shù)據(jù)庫中。
[0023]根據(jù)本文公開的主題的第三方面,提供了一種用于處理由數(shù)字?jǐn)?shù)據(jù)流傳送的編碼視頻幀的序列的視頻記錄設(shè)備,其中,每個幀表示圖像,該視頻記錄設(shè)備具有用于接收數(shù)字?jǐn)?shù)據(jù)流的輸入端,并包括計(jì)算機(jī)器,其被編程為執(zhí)行步驟:a.確定序列的第i個編碼幀與序列的第(i+Ι)個編碼幀的呈現(xiàn)之間的幀間隔,b.計(jì)算用于第i個編碼幀的流時間戳,以及
c.基于用于第i個編碼視頻幀的流時間戳和在步驟b中確定的幀間隔來計(jì)算用于第(i+1)個編碼視頻幀的流時間戳。
[0024]根據(jù)本文公開的主題的第四方面,提供了一種包含軟件的非臨時計(jì)算機(jī)可讀存儲介質(zhì),該軟件在被計(jì)算機(jī)器讀取并執(zhí)行時接收由數(shù)字?jǐn)?shù)據(jù)流傳送的編碼視頻幀的序列,其中,每個幀表示圖像,該軟件使計(jì)算機(jī)器執(zhí)行一種方法,該方法包括a.確定序列的第i個編碼幀與序列的第(i+Ι)個編碼幀的呈現(xiàn)之間的幀間隔,b.計(jì)算用于第i個編碼幀的流時間戳,以及c.基于用于第i個編碼視頻幀的流時間戳和在步驟a中確定的幀間隔來計(jì)算用于第(i+Ι)個編碼視頻幀的流時間戳。
【專利附圖】
【附圖說明】
[0025]為了更好地理解本發(fā)明,并且為了示出如何可以將其付諸實(shí)施,現(xiàn)在將以示例的方式對附圖進(jìn)行參考,在所述附圖中:
[0026]圖1是接收終端的示意性框圖,
[0027]圖2是在編碼視頻幀的序列的記錄期間由圖1中所示的接收終端執(zhí)行的算法的流程圖,
[0028]圖3是在記錄序列的重放期間由圖1中所示的接收終端執(zhí)行的算法的流程圖,以及
[0029]圖4是可以用來實(shí)現(xiàn)圖1中所示的接收終端的計(jì)算機(jī)的示意性框圖。
【具體實(shí)施方式】
[0030]參考附圖的圖1,被實(shí)現(xiàn)為PVR的接收終端接收數(shù)字?jǐn)?shù)據(jù)流,該數(shù)字?jǐn)?shù)據(jù)流傳送根據(jù)MPEG-2視頻壓縮算法編碼的視頻幀的序列。該終端包括接收器10、大規(guī)模存儲器20以及視頻解碼器30。接收器接收由服務(wù)提供商提供的比特流并恢復(fù)編碼視頻幀的序列。讀/寫控制器40將視頻幀寫入由大規(guī)模存儲部實(shí)現(xiàn)并被組織為關(guān)系數(shù)據(jù)庫的存儲器中,該關(guān)系數(shù)據(jù)庫包括內(nèi)容表和索引表。讀/寫控制器實(shí)現(xiàn)時間戳算法,其唯一地識別每個視頻幀并為接收序列中的每個視頻幀生成時間戳。這允許從存儲器讀取視頻幀,以便按照正確的順序解碼和呈現(xiàn),而與PTS中的不連續(xù)無關(guān)。
[0031]圖2圖示出時間戳算法的流程圖。通過向變量Int_fr分配初始值而初始化該時間戳算法(步驟100),該變量Int_fr表示視頻幀的幀間隔。該初始值是根據(jù)幀速率的缺省值計(jì)算的。假設(shè)每秒60巾貞的巾貞速率,分配給Int_fr的初始值是16.6667ms。隨后當(dāng)接收到B巾貞時可以調(diào)整分配給Int_fr的值,如下面詳細(xì)地討論的。該算法向變量Int_min分配15ms的值(巾貞間隔的最小值)并向變量TOL (公差)分配3*Int_fr的值。
[0032]在初始化之后,時間戳算法從接收器接收視頻幀的序列的第一幀的呈現(xiàn)時間戳(步驟110)并將此值分配給變量PTS。連續(xù)幀的序列中的第i個幀的呈現(xiàn)時間戳是表示在序列開始處從初始值開始的90kHz時鐘的時鐘周期的數(shù)目的33位數(shù)(一般地將不會是零)。
[0033]流時間戳也被視為表示90kHz時鐘的時鐘周期的數(shù)目的33位數(shù)。在步驟110中,該算法向變量ST* (感興趣的流時間戳)分配值零,表示流時間戳對于序列的第一幀而言從零開始。該算法還向變量ST_dis* (呈現(xiàn)時間戳中的不連續(xù)點(diǎn)處的感興趣的流時間戳)分配值零。該算法將PTS的時鐘值分配給變量Clock_start (基于呈現(xiàn)時間戳的第一幀的時鐘時間)和變量Clock_ptS (基于呈現(xiàn)時間戳的當(dāng)前幀的時鐘時間)兩者。Clock_start因此表示正在記錄的序列的第一幀的呈現(xiàn)時間戳。
[0034]在步驟120中,該算法接收下一個幀并將當(dāng)前幀的呈現(xiàn)時間戳分配給變量PTS且將值(PTS - Clock_pts)分配給變量Diff。因此,變量Diff表示當(dāng)前幀的呈現(xiàn)時間戳的時鐘值與前一幀的呈現(xiàn)時間的時鐘值之間的差。請注意,編碼幀正常地被按照順序Fl (I)、F4 (P)、F2 (B)、F3 (B)等發(fā)送,如果在幀的呈現(xiàn)時間戳中不存在不連續(xù),則用于幀F(xiàn)4、F2和F3的Diff的值的序列將是+3*幀間隔、-2*幀間隔以及+1*幀間隔。
[0035]該算法還將變量Clock_ptS的值更新成用于當(dāng)前幀的值PTS,使得其將可用于計(jì)算用于下一個幀的Diff,并將值(ST*+Int_fr)更新成變量ST*,從而存儲最新的ST*。因此,用于當(dāng)前巾貞的流時間戳等于前一巾貞的流時間戳加巾貞間隔的即時提供(improvised)的值Int_fr。
[0036]假設(shè)無呈現(xiàn)時間戳的繞回(其將在下面討論),算法的執(zhí)行轉(zhuǎn)到判定框130,在判定框130處,該算法測試Diff的絕對值是否小于或等于T0L。由于TOL等于幀間隔的三倍,如果測試評估為真,則我們假設(shè)在呈現(xiàn)時間戳中不存在不連續(xù);否則存在不連續(xù)。
[0037]在不連續(xù)的情況下,在步驟140中,算法用用于當(dāng)前幀的ST*的值來更新變量ST_dis*,并用用于當(dāng)前幀的PTS的值來更新變量Clock_start。以這種方式,變量ST_dis*存儲在呈現(xiàn)時間戳中的不連續(xù)之后的第一幀的流時間戳的值,并且變量Cl0ck_Start存儲呈現(xiàn)時間戳中的不連續(xù)之后的用于第一幀的呈現(xiàn)時間戳。由此標(biāo)記記錄流中的不連續(xù)點(diǎn)以用于后續(xù)計(jì)算。
[0038]在步驟150中,該算法將幀信息(諸如呈現(xiàn)時間戳、相對于視頻流的開始的幀偏移以及相對于當(dāng)前GOP的開始處的I幀的幀偏移)和當(dāng)前幀的流時間戳存儲在索引文件中。讀/寫控制器將當(dāng)前幀的實(shí)際視頻幀數(shù)據(jù)和內(nèi)容偏移值存儲在內(nèi)容文件中。
[0039]如果在呈現(xiàn)時間戳中不存在不連續(xù),則執(zhí)行前進(jìn)至判定框160,其中,測試幀類型以確定當(dāng)前幀是否是參考幀。如果當(dāng)前幀不是參考幀,則算法確認(rèn)(框170)幀是B幀,并檢查(框180) B幀標(biāo)志是否被設(shè)定為真。
[0040]如果B幀標(biāo)志是真的,指示前一幀是B幀,則所述算法檢查(步驟190) Diff是否大于Int_min。如上所述,Diff等于當(dāng)前幀的呈現(xiàn)時間戳與前一幀的呈現(xiàn)時間戳之間的差。在表現(xiàn)很好的序列中,B幀始終被按順序接收,并且作為B幀的兩個相鄰幀之間的幀間隔直接反映序列的當(dāng)前幀速率,即使在變化幀速率的情況下,如在2:3高清(電視電影)視頻中發(fā)生的。Diff因此是當(dāng)前巾貞間隔的可靠值。如果Diff大于Int_min,則該算法將Int_fr更新成Diff的當(dāng)前值。該算法還將TOL更新以反映Int_fr的已更新值。因此,該算法重復(fù)地計(jì)算最當(dāng)前的即時提供的巾貞間隔Int_fr,其被連續(xù)地更新(一般地每四個巾貞),使得當(dāng)接收到下一個幀時,所使用的Int_fr的值在步驟120中是準(zhǔn)確的以更新ST*。該算法將幀信息和關(guān)聯(lián)ST*值寫入索引文件(步驟150)。
[0041]如果當(dāng)前幀是B幀且框180確定B幀標(biāo)志是假,指示前一幀不是B幀,則該算法將B幀標(biāo)志設(shè)置成真(框200),并且將幀信息和關(guān)聯(lián)ST*值寫入索引文件(步驟150)。
[0042]如果框170確定當(dāng)前幀不是B幀,則算法將B幀標(biāo)志重置為假(框210),并將幀信息和關(guān)聯(lián)ST*值寫入索引文件(步驟150)。
[0043]如果框160確定幀是參考幀,則算法檢查DifT是否大于Intjnin (步驟220),并且如果是這樣,則將ST*調(diào)整成(Clock_pts - Clock_start+ST_dis*)。如果在序列中不存在前一不連續(xù),則ST_dis*將是零,并且Clock_start將基于呈現(xiàn)時間戳而等于第一巾貞的時鐘時間。因此,ST*將被調(diào)整成Clock_pts的值,偏移Clock_start的值。如果存在前一不連續(xù),ST_dis和Clock_start將反映最新不連續(xù)之后的第一巾貞的值。以這種方式,ST*被動態(tài)地調(diào)整,使得呈現(xiàn)時間戳中的不連續(xù)并不影響ST*的值的演進(jìn)。由于幀是參考幀,所以算法將B幀標(biāo)志重置為假。該算法將幀信息和關(guān)聯(lián)ST*值寫入索引文件(步驟150)。
[0044]如果呈現(xiàn)時間戳在編碼視頻幀的序列的開頭處以零開始,則其將延續(xù)24小時以繞回至零。序列長到足以使這一點(diǎn)發(fā)生的可能性是非常小的。然而,呈現(xiàn)時間戳不一定以零開始,并且因此必須檢查(框230)用于當(dāng)前幀的呈現(xiàn)時間戳是否已從用于前一幀的PTS繞回,并且如果是的話,通過從用于當(dāng)前幀的PTS的值加PTS的最大值的和減去前一幀的PTS的值來調(diào)整Diff的值(框240)。
[0045]將認(rèn)識到的是,隨著序列被記錄,流時間戳貫穿整個序列從零開始單調(diào)地增加,沒有重復(fù),并且增量嚴(yán)格地基于當(dāng)前幀間隔。由于流時間以零開始,所以在記錄期間發(fā)生繞回的可能性實(shí)際上是不存在。
[0046]在重放時,讀/寫控制器執(zhí)行圖3中所示的算法。如圖3中所示,在重放開始時,通過將變量Int_fr (幀間隔)設(shè)定成等于16.6667ms、將變量XS (特效速度)設(shè)定成等于1、將Int_fr設(shè)定成等于XS*Int_fr、將Int_min (最小巾貞間隔)設(shè)定成等于XS*15ms并將TOL(公差)設(shè)定成等于3*Int_fr來將算法初始化(步驟300)。該算法從用戶接口接收(框310)特效速度的用戶指定值。
[0047]在重放時將首先被解碼的幀是不確定的。為了適當(dāng)?shù)剡x擇要被解碼的第一幀,該算法執(zhí)行索引文件中的PTS值的查找,并基于流時間戳值來選擇所記錄幀的序列的初始段中的幀的PTS值,可回想起的是ST*在所記錄的序列開頭處以零開始。該算法將變量ST*設(shè)定成等于所選第一幀的流時間戳并將變量Clock_ptS (基于呈現(xiàn)時間戳的幀的時鐘時間)設(shè)定成等于PTS。
[0048]在步驟320中,算法測試,并且在必要時更新XS的值且用下一個幀的呈現(xiàn)時間戳來更新PTS。該算法使用XS的已更新值來更新Int_fr的值并使用Int_fr的已更新值來更新TOL的值。該算法將值PTS-Clock_ptS分配給變量Diff,并用用于當(dāng)前幀的PTS的值來更新 Clock_pts。
[0049]在判定框330中,該算法檢查是否存在PTS值的繞回,如上文結(jié)合圖2所述,并且如果是這樣,則相應(yīng)地調(diào)整(步驟340) Diff的值,同樣如參考圖2所述。該算法然后檢查(框350)PTS值是否是連續(xù)的。如果值是連續(xù)的,則算法將ST*設(shè)定成等于ST*+Diff (步驟360);如果值不是連續(xù)的,則算法將ST*設(shè)定成等于ST*+Int_fr (步驟270)。讀/寫控制器將ST*的已更新值與存儲在索引文件中的ST的值相比較,識別索引文件中的相應(yīng)值(使用適當(dāng)?shù)囊?guī)則),并使用該值來從內(nèi)容文件讀取編碼視頻幀數(shù)據(jù)。
[0050]如上所述,由參考圖2所述的算法生成的流時間戳的值隨著序列被記錄在序列期間從零開始單調(diào)地增加。因此,使用參考圖3所述的算法在重放期間生成ST的值確保用來從內(nèi)容文件讀取編碼視頻幀數(shù)據(jù)的ST的值在前進(jìn)播放期間單調(diào)地增加,并且將在反向播放期間單調(diào)地減小,并且兩個連續(xù)值之間的差將始終至少如最新的幀間隔那樣大。
[0051]按照慣例,該解碼器基于DTS將幀解碼并基于PTS來呈現(xiàn)幀。
[0052]如前所述,呈現(xiàn)時間戳是33位數(shù)。在上述算法的實(shí)際實(shí)現(xiàn)中,優(yōu)選的是使用32位數(shù)。相應(yīng)地,每個算法從呈現(xiàn)時間戳中丟棄最低有效位,其等價于將PTS計(jì)算為45kHz時鐘的時鐘周期的數(shù)目。存儲在索引文件中的PTS值是32位數(shù)。[0053]參考圖4,可以將適當(dāng)?shù)慕邮战K端實(shí)現(xiàn)為專用計(jì)算機(jī)50,包括以大體上現(xiàn)有架構(gòu)配置的一個或多個處理器51、隨機(jī)存取存儲器52、只讀存儲器53、I/O設(shè)備54、用戶接口 55和硬盤驅(qū)動器58。該計(jì)算機(jī)根據(jù)存儲在非臨時計(jì)算機(jī)可讀介質(zhì)中的程序進(jìn)行操作,諸如硬盤驅(qū)動器58或⑶-R0M57,并被加載到隨機(jī)存取存儲器52中以用于執(zhí)行。該程序由指令組成,使得當(dāng)計(jì)算機(jī)接收表示根據(jù)MPEG-2算法編碼的視頻幀的序列的比特流時,通過包括在I/O設(shè)備54中的適當(dāng)接口,計(jì)算機(jī)向適當(dāng)?shù)木彌_器分配存儲器并利用其他適當(dāng)資源和功能來執(zhí)行上文被描述為由接收終端執(zhí)行的各種操作。
[0054]本領(lǐng)域的技術(shù)人員將認(rèn)識到的是程序可能不是利用CD-ROM驅(qū)動器從CD-R0M57直接加載到隨機(jī)存取存儲器中的,并且一般地,程序?qū)⒈灰砸髲腃D-R0M57將程序安裝在硬盤驅(qū)動器58上的形式存儲在⑶-ROM或其他分發(fā)介質(zhì)上。
[0055]將認(rèn)識到的是在本文中主張的權(quán)利要求的主題不限于已經(jīng)描述的特定實(shí)施例,并且在不脫離在所附權(quán)利要求中定義的主題的范圍的情況下可以對其進(jìn)行修改,如根據(jù)現(xiàn)行法律的原則所解釋的,包括等價物的準(zhǔn)則或?qū)?quán)利要求的可實(shí)施范圍擴(kuò)大至超過其字面范圍的任何其他原則。除非上下文另外指示,權(quán)利要求中對要素的實(shí)例的數(shù)目的引用(假設(shè)其對是一個實(shí)例或不止一個實(shí)例的引用)至少要求該要素的實(shí)例的所述數(shù)目,但是并不意圖從權(quán)利要求的范圍排除具有該要素的比所述的更多的實(shí)例的結(jié)構(gòu)或方法。當(dāng)在權(quán)利要求中使用時,在非排他性意義上使用詞語“包括”或其派生詞,其并不意圖排除要求保護(hù)的結(jié)構(gòu)或方法中的其他要素或步驟的存在。
【權(quán)利要求】
1.一種處理由數(shù)字?jǐn)?shù)據(jù)流傳送的編碼視頻幀的序列的方法,其中,每個幀表示圖像,該方法包括: a.在記錄設(shè)備處接收編碼視頻幀的序列, b.確定所述序列的第i個編碼幀與所述序列的第(i+Ι)個編碼幀的呈現(xiàn)之間的幀間隔, c.在所述記錄設(shè)備處,計(jì)算用于第i個編碼幀的流時間戳,以及 d.在所述記錄設(shè)備處,基于用于第i個編碼視頻幀的所述流時間戳和在步驟b中確定的所述幀間隔來計(jì)算用于第(i+Ι)個編碼視頻幀的流時間戳。
2.根據(jù)權(quán)利要求1所述的方法,包括: e.將第(i+Ι)個編碼視頻幀和用于第(i+Ι)個編碼視頻幀的流時間戳保存在關(guān)系數(shù)據(jù)庫中。
3.根據(jù)權(quán)利要求2所述的方法,其中,每個編碼視頻幀包括指定用于所述幀的呈現(xiàn)時間戳的數(shù)據(jù)字段,步驟b包括基于用于所述序列的連續(xù)幀的呈現(xiàn)時間戳來確定即時提供的幀間隔,并且步驟e包括將所述呈現(xiàn)時間戳和所述流時間戳保存在索引文件中并將所述編碼視頻幀保存在內(nèi)容文件中。
4.根據(jù)權(quán)利要求3所述的方法,包括基于流時間戳和呈現(xiàn)時間戳來從所述索引文件讀取流偏移位置并基于所述流偏移位置從所述內(nèi)容文件讀取編碼視頻幀。
5.一種修改由幀序列 組成的數(shù)字?jǐn)?shù)據(jù)流的方法,其中,每個幀表示圖像且包括指定用于所述幀的呈現(xiàn)時間戳值的數(shù)據(jù)字段,該方法包括: a.用基于標(biāo)稱幀速率的幀間隔值將變量Int_fr初始化; b.接收第一幀并讀取該幀的呈現(xiàn)時間戳值,向變量PTS分配所述第一幀的呈現(xiàn)時間戳值,向變量Cl0ck_Start分配所述變量PTS的值用于基于呈現(xiàn)時間戳來表示所述第一幀的時鐘時間,向變量Clock_ptS分配變量PTS的值用于基于呈現(xiàn)時間戳來表示幀的時鐘時間,向變量ST*分配值零用于表示感興趣的流時間戳; c.接收下一個幀并讀取所述下一個幀的呈現(xiàn)時間戳值,向變量PTS分配所述下一個幀的呈現(xiàn)時間戳值,向變量Diff分配值(PTS-Clock_pts),向所述變量Clock_pts分配值PTS,并向所述變量ST*分配值(ST*+Int_fr );以及 d.測試在所述下一個幀與前一幀之間是否存在呈現(xiàn)時間戳值的不連續(xù),并且如果存在的話,向變量ST_dis*分配值ST*用于表示呈現(xiàn)時間戳中的不連續(xù)點(diǎn)處的感興趣的流時間戳的值,并向變量Clock_start分配值PTS,并使用ST*的值作為索引將所述下一個幀存儲在數(shù)據(jù)庫中。
6.根據(jù)權(quán)利要求5所述的方法,其中,所述幀序列由P幀、I幀和B幀組成,步驟a還包括用基于所述標(biāo)稱幀速率的最小幀間隔值將變量Intjnin初始化,并且所述方法還包括如果在所述下一個幀與所述前一幀之間不存在呈現(xiàn)時間戳值的不連續(xù),則 測試所述下一個幀是否是P幀或I幀,并且如果是的話,則如果DifT的值大于Int_min,則將值(Clock_pts - Clock_start+ST_dis*)分配給變量 ST*。
7.根據(jù)權(quán)利要求5所述的方法,其中,所述幀序列由P幀、I幀和B幀組成,并且所述方法還包括如果在所述下一個幀與所述前一幀之間不存在呈現(xiàn)時間戳值的不連續(xù),則測試所述下一個幀是否是B幀。
8.根據(jù)權(quán)利要求7所述的方法,還包括,如果所述下一個幀不是B幀,則將B幀標(biāo)志重置為假。
9.根據(jù)權(quán)利要求7所述的方法,還包括,如果所述下一個幀是B幀,則測試B幀標(biāo)志是否被設(shè)定為真。
10.根據(jù)權(quán)利要求9所述的方法,還包括,如果所述B幀標(biāo)志未被設(shè)定為真,則將所述B幀標(biāo)志設(shè)定為真。
11.根據(jù)權(quán)利要求9所述的方法,其中,步驟a包括向變量TOL分配值,并且步驟d包括測試Diff的絕對值是否超過TOL的值,并且所述方法還包括,如果所述B幀標(biāo)志被設(shè)定為真,如果Diff大于Int_min,則將值Diff分配給Int_fr,并且將值3*Int_fr分配給所述變量 TOL0
12.一種用于處理由數(shù)字?jǐn)?shù)據(jù)流傳送的編碼視頻幀序列的視頻記錄設(shè)備,其中,每個幀表示圖像,所述視頻記錄設(shè)備具有用于接收所述數(shù)字?jǐn)?shù)據(jù)流的輸入端,并包括計(jì)算機(jī)器,所述計(jì)算機(jī)器被編程以執(zhí)行以下步驟: a.確定所述序列的第i個編碼幀與所述序列的第(i+Ι)個編碼幀的呈現(xiàn)之間的幀間隔, b.計(jì)算用于第i個編碼幀的流時間戳,以及 c.基于用于第i個編碼視頻幀的所述流時間戳和在步驟b中確定的所述幀間隔來計(jì)算用于第(i+Ι)個編碼視頻幀的流時間戳。
13.根據(jù)權(quán)利要求12所 述的視頻記錄設(shè)備,其中,所述計(jì)算機(jī)器被編程以執(zhí)行進(jìn)一步的步驟: d.將第(i+Ι)個編碼視頻幀和用于第(i+Ι)個編碼視頻幀的所述流時間戳保存在關(guān)系數(shù)據(jù)庫中。
14.根據(jù)權(quán)利要求13所述的視頻記錄設(shè)備,其中,每個編碼視頻幀包括指定用于所述幀的呈現(xiàn)時間戳的數(shù)據(jù)字段,由所述計(jì)算機(jī)器執(zhí)行的步驟a包括基于用于所述序列的連續(xù)幀的呈現(xiàn)時間戳來確定即時提供的幀間隔,并且步驟d包括將所述呈現(xiàn)時間戳和所述流時間戳保存在索引文件中并將所述編碼視頻幀保存在內(nèi)容文件中。
15.根據(jù)權(quán)利要求14所述的視頻記錄設(shè)備,其中,所述計(jì)算機(jī)器被編程以基于流時間戳和呈現(xiàn)時間戳從所述索引文件讀取流偏移位置,并且基于所述流偏移位置從所述內(nèi)容文件讀取編碼視頻幀。
16.—種包含軟件的非臨時計(jì)算機(jī)可讀存儲介質(zhì),該軟件在被計(jì)算機(jī)器讀取并執(zhí)行時接收由數(shù)字?jǐn)?shù)據(jù)流傳送的編碼視頻幀序列,其中,每個幀表示圖像,該軟件使所述計(jì)算機(jī)器執(zhí)行一種方法,所述方法包括: a.確定所述序列的第i個編碼幀與所述序列的第(i+Ι)個編碼幀的呈現(xiàn)之間的幀間隔, b.計(jì)算用于第i個編碼幀的流時間戳,以及 c.基于用于第i個編碼視頻幀的所述流時間戳和在步驟a中確定的所述幀間隔來計(jì)算用于第(i+Ι)個編碼視頻幀的流時間戳。
17.根據(jù)權(quán)利要求16所述的計(jì)算機(jī)可讀存儲介質(zhì),其中,所述軟件使所述計(jì)算機(jī)器被編程以執(zhí)行進(jìn)一步的步驟:d.將第(i+1)個編碼視頻幀和用于第(1+1)個編碼視頻幀的流時間戳保存在關(guān)系數(shù)據(jù)庫中。
18.根據(jù)權(quán)利要求17所述的計(jì)算機(jī)可讀存儲介質(zhì),其中,每個編碼視頻幀包括指定用于所述幀的呈現(xiàn)時間戳的數(shù)據(jù)字段,并且所述軟件使所述計(jì)算機(jī)器執(zhí)行一種方法,其中,步驟a包括基于用于所述序列的連續(xù)幀的呈現(xiàn)時間戳來確定即時提供的幀間隔,并且步驟d包括將所述呈現(xiàn)時間戳和所述流時間戳保存在索引文件中并將所述編碼視頻幀保存在內(nèi)容文件中。
19.根據(jù)權(quán)利要求18所述的計(jì)算機(jī)可讀存儲介質(zhì),其中,所述軟件使所述計(jì)算機(jī)器執(zhí)行一種方法,其中,所述計(jì)算機(jī)器基于流時間戳和呈現(xiàn)時間戳從所述索引文件讀取流偏移位置,并且基于所述流偏移位置從所述內(nèi)容文件讀取編碼視頻幀。
【文檔編號】H04N21/43GK103535027SQ201180061468
【公開日】2014年1月22日 申請日期:2011年12月15日 優(yōu)先權(quán)日:2010年12月20日
【發(fā)明者】穆拉利德哈蘭·納拉亞南, 克里斯托弗·S·德爾索爾多, 瑟亞·P·馬赫斯瓦拉姆, 克里希南·普拉薩德·潘杰, 埃內(nèi)斯特·G·施米特, 亞?!? 申請人:通用儀表公司