專利名稱:一種傳輸流視音頻同步復(fù)用方法
技術(shù)領(lǐng)域:
本發(fā)明屬于數(shù)字電視編碼領(lǐng)域,具體涉及一種傳輸流視音頻同步復(fù)用方法。
背景技術(shù):
在數(shù)字電視傳輸過程中,為了充分利用頻譜資源,往往在一個模擬物理信道中傳 輸多路數(shù)字電視節(jié)目。因此需要將壓縮編碼后的視頻、音頻節(jié)目和其他輔助數(shù)據(jù)復(fù)用成一 路傳輸流以便于傳輸。 目前有很多實(shí)現(xiàn)多個單節(jié)目傳輸流復(fù)用成一個多節(jié)目傳輸流的裝置或方法,但它 們普遍存在以下一個或者幾個問題用硬件實(shí)現(xiàn),可移植性差、成本較高;復(fù)用方法復(fù)雜; 復(fù)用方法性能指標(biāo)不佳. 我國專利200610029599. 7 "—種統(tǒng)計(jì)復(fù)用傳輸流的方法"中公開了一種視音頻基 本流文件多路統(tǒng)計(jì)復(fù)用方法,該發(fā)明采用軟件實(shí)現(xiàn),通過統(tǒng)計(jì)輸入文件信息和統(tǒng)計(jì)復(fù)用傳 輸流對視音頻基本流文件進(jìn)行多路統(tǒng)計(jì)復(fù)用,但該發(fā)明在統(tǒng)計(jì)復(fù)用過程中以視音頻幀為單 位進(jìn)行統(tǒng)計(jì)復(fù)用。由于視頻幀數(shù)據(jù)相對音頻幀較大,導(dǎo)致音頻數(shù)據(jù)間隔較長,可能使得接收 端解碼器緩存區(qū)產(chǎn)生溢出現(xiàn)象,表現(xiàn)為節(jié)目顯示時視頻圖像跳幀、音頻破音等。
發(fā)明內(nèi)容
本發(fā)明的目的在于針對已有技術(shù)存在的缺陷,提供一種傳輸流視音頻同步復(fù)用方 法,將壓縮編碼后的視頻、音頻節(jié)目和其他輔助數(shù)據(jù)復(fù)用成一路單節(jié)目傳輸流,可對離線視 頻文件或?qū)崟r編碼流進(jìn)行復(fù)用,復(fù)用得到的傳輸流碼率恒定,能被接收解碼器正確解碼。
為達(dá)到上述目的,本發(fā)明采用下述技術(shù)方案一種傳輸流視音頻同步復(fù)用方法,將 壓縮編碼后的視頻、音頻節(jié)目和輔助數(shù)據(jù)復(fù)用為一個單節(jié)目傳輸流。其特征在于操作步驟 如下 步驟1、初始化;步驟2、計(jì)算節(jié)目參考時鐘PCR信息;步驟3、生產(chǎn)節(jié)目特定信息 PSI ;步驟4、視音頻同步復(fù)用。 上述步驟1初始化是初始化緩存區(qū)和計(jì)數(shù)器;統(tǒng)計(jì)獲取輸入視頻碼率、視頻幀 率、音頻碼率、音頻采樣率、音頻采樣點(diǎn)數(shù)等基本信息;若輸出傳輸流速率小于視音頻碼率
之和,則報(bào)錯退出。 上述步驟2計(jì)算PCR信息是根據(jù)傳輸流輸出碼率計(jì)算節(jié)目參考時鐘PCR輸出包 間隔,為輸出碼率和設(shè)定PCR插入時間間隔的乘積與TS包長度的比值。輸出傳輸流PCR的 起點(diǎn)時間比視頻解碼時間標(biāo)簽DTS的起點(diǎn)時間小一個視頻幀間隔。每輸出一個TS包,PCR 增加一個TS包的時間間隔Packet—time,該時間間隔為TS包長度與輸出碼率的比值。
上述步驟3生成PSI信息是根據(jù)輸入視音頻基本流個數(shù)生成輸出傳輸流的節(jié)目 特定信息PSI,生成填充空包。PSI信息包括節(jié)目關(guān)聯(lián)表PAT,節(jié)目映射表PMT,網(wǎng)絡(luò)信息表 NIT,條件訪問表CAT,若表段長度大于單個TS包的最大有效負(fù)載時,則分段置于連續(xù)的TS 包中。
上述步驟4視音頻同步復(fù)用的具體操作步驟如下 步驟4. 1、獲取視、音頻幀數(shù)據(jù),分析幀信息,若視音頻流結(jié)束,則退出,否則
對于視頻一幀視頻幀編碼成一個PES包,根據(jù)視頻ES結(jié)構(gòu)獲取一個視頻圖像幀, 圖像幀前的圖像序列頭Sequence—header及其擴(kuò)展、圖像組頭GOPJieader —并歸到該圖像 幀中。根據(jù)圖像頭判斷圖像幀類型,統(tǒng)計(jì)幀長度。 對于音頻一個音頻幀編碼成一個分組基本流PES包,根據(jù)音頻基本流ES結(jié)構(gòu)獲
得一個音頻幀,統(tǒng)計(jì)幀長度。 步驟4. 2、視、音頻數(shù)據(jù)編碼成TS包 對于視頻一幀圖像數(shù)據(jù)加上PES分組頭信息形成一個PES包,PES包頭包含了解 碼時間標(biāo)簽DTS和顯示時間標(biāo)簽PTS信息。DTS幀間隔由所述步驟1獲得的視頻幀速率計(jì) 算,PTS根據(jù)幀類型不同取值不同,對于B幀PTS等于DTS。 根據(jù)TS包結(jié)構(gòu)將PES分組分段置于整數(shù)個TS包中,緩存TS包數(shù)據(jù)。計(jì)算每個TS 包的DTS,為該P(yáng)ES分組DTS值加上當(dāng)前TS包中的第一個ES字節(jié)在整個ES包中的位置乘 與每個ES字節(jié)所持續(xù)的時間。每個ES字節(jié)所持續(xù)時間為一個視頻幀時間間隔與幀長度的 比值。 對于音頻一幀音頻數(shù)據(jù)加上PES分組頭信息形成一個PES包,PES包頭包含了解 碼時間標(biāo)簽DTS,對于音頻PTS等于DTS。 DTS幀間隔由所述步驟1獲得的音頻采樣率和采 樣點(diǎn)數(shù)計(jì)算。音頻DTS的起點(diǎn)與視頻DTS的起點(diǎn)相同。 根據(jù)TS包結(jié)構(gòu)將PES分組分段置于整數(shù)個TS包中,緩沖TS包數(shù)據(jù)。計(jì)算每個TS 包的DTS,為該P(yáng)ES分組DTS值加上當(dāng)前TS包中的第一個ES字節(jié)在整個ES包中的位置乘 與每個ES字節(jié)所持續(xù)的時間。每個ES字節(jié)所持續(xù)時間為一個音頻幀時間間隔與幀長度的 比值。 步驟4. 3、根據(jù)視音頻DTS選擇輸出TS包類型 步驟4. 3. 1、若緩沖區(qū)中視頻或音頻TS包數(shù)為零,則循環(huán)至步驟4. l讀取相應(yīng)的視 頻或音頻幀進(jìn)行處理。 步驟4. 3. 2、若PSI信息間隔TS包數(shù)大于設(shè)定PSI輸出間隔,輸出PSI信息TS包。 PSI輸出間隔為輸出碼率和設(shè)定PSI插入時間間隔的乘積與TS包長度的比值。根據(jù)輸出的 TS包個數(shù)更新PCR值。 步驟4. 3. 3、若PCR間隔TS包數(shù)大于設(shè)定PCR輸出包間隔,輸出包含PCR字段的 TS包。根據(jù)輸出的TS包個數(shù)更新PCR值。 步驟4. 3. 4、比較緩沖區(qū)中最近一個視頻和音頻TS包的DTS值,取較小的DTS值計(jì) 算與當(dāng)前PCR值的差值DTS-PCR : 若該差值大于一個視頻幀時間間隔Frame—time,則輸出填充空包。計(jì)算該差值與 一個視頻幀時間間隔的差值DTS-PCR-Frame_time,該值與每個TS包的時間間隔Packet_ time的比值就是填充空包的個數(shù)。然后輸出DTS值較小的TS包。根據(jù)輸出的TS包個數(shù)更 新PCR值; 若該差值小于一個視頻幀時間間隔Frame_time,則輸出DTS值較小的TS包。根據(jù) 輸出的TS包個數(shù)更新PCR值。
步驟4.4、循環(huán)步驟4. 3。
本發(fā)明與現(xiàn)有技術(shù)相比,具有如下顯而易見的突出實(shí)質(zhì)性特點(diǎn)和顯著優(yōu)點(diǎn)本發(fā)明的技術(shù)方案簡單靈活,輸出傳輸流碼率恒定;輸出傳輸流無緩沖區(qū)溢出,能被解碼器正確解碼;可在通用計(jì)算機(jī)上實(shí)現(xiàn),無需專用硬件實(shí)現(xiàn),可移植性佳,具有良好的應(yīng)用前景。
圖1是本發(fā)明的視音頻同步復(fù)用流程圖。
圖2是本發(fā)明的步驟4. 3的流程圖。
具體實(shí)施例方式
下面結(jié)合附圖和實(shí)施例對本發(fā)明進(jìn)一步說明如圖1、圖2所示,利用本發(fā)明提供的一種傳輸流視音頻同步復(fù)用方法,將一路4. 5Mbps視頻基本流和一路192Kbps音頻基本流同步復(fù)用成一路傳輸速率恒等于5Mbps的單節(jié)目傳輸流。 步驟1、初始化緩存區(qū)和計(jì)數(shù)器;統(tǒng)計(jì)獲取輸入視頻碼率、視頻幀率、音頻碼率、音頻采樣率、音頻采樣點(diǎn)數(shù)等基本信息。若輸出傳輸流速率小于視音頻碼率之和,則報(bào)錯退出。 步驟2 、根據(jù)傳輸流輸出碼率計(jì)算節(jié)目參考時鐘PCR輸出包間隔PCR_paCket_interval,為輸出碼率和設(shè)定PCR插入時間間隔的乘積與TS包長度的比值。輸出傳輸流PCR的起點(diǎn)時間比視頻DTS的起點(diǎn)時間小一個視頻幀間隔。每輸出一個TS包,PCR增加一個TS包的時間間隔Packet—time,該時間間隔為TS包長度與輸出碼率的比值。
步驟3、根據(jù)輸入視音頻基本流個數(shù)生成輸出傳輸流的節(jié)目特定信息PSI,生成填充空包。PSI信息包括節(jié)目關(guān)聯(lián)表PAT,節(jié)目映射表PMT,網(wǎng)絡(luò)信息表NIT,條件訪問表CAT,若表段長度大于單個TS包的最大有效負(fù)載時,則分段置于連續(xù)的TS包中。
步驟4、視音頻同步復(fù)用 步驟4. 1、獲取視、音頻幀數(shù)據(jù),分析幀信息。若視音頻流結(jié)束,則退出,否則
對于視頻一幀視頻幀編碼成一個PES包,根據(jù)視頻ES結(jié)構(gòu)獲取一個視頻圖像幀,圖像幀前的圖像序列頭Sequence—header及其擴(kuò)展、圖像組頭GOPJieader —并歸到該圖像幀中。根據(jù)圖像頭判斷圖像幀類型,統(tǒng)計(jì)幀長度。 對于音頻一個音頻幀編碼成一個PES包,根據(jù)音頻ES結(jié)構(gòu)獲得一個音頻幀,統(tǒng)計(jì)幀長度。 步驟4. 2、視、音頻數(shù)據(jù)編碼成TS包 對于視頻一幀圖像數(shù)據(jù)加上PES分組頭信息形成一個PES包,PES包頭包含了解碼時間標(biāo)簽DTS和顯示時間標(biāo)簽PTS信息。DTS幀間隔由步驟1獲得的視頻幀速率計(jì)算,PTS根據(jù)幀類型不同取值不同,對于B幀PTS等于DTS。
PTS(B) = DTS(B) PTS (I/P) = DTS (I/P) + (n+1)X Frame_t ime
n , 。,. 1 27000000 fra加e _加e =-x-
一 —rate — cocfe 300 其中n表示I幀P幀間連續(xù)B幀的個數(shù),F(xiàn)rame_time為視頻幀間隔,F(xiàn)rame_rate_
code為視頻幀速率。B幀由于DTS和PTS相同,一般不寫入PTS。
根據(jù)TS包結(jié)構(gòu)將PES分組分段置于整數(shù)個TS包中,緩存TS包數(shù)據(jù)。計(jì)算每個TS 包的DTS,為該P(yáng)ES分組DTS值加上當(dāng)前TS包中的第一個ES字節(jié)在整個ES包中的位置乘 與每個ES字節(jié)所持續(xù)的時間。每個ES字節(jié)所持續(xù)時間為一個視頻幀時間間隔與幀長度的 比值。 對于音頻一幀音頻數(shù)據(jù)加上PES分組頭信息形成一個PES包,PES包頭包含了解 碼時間標(biāo)簽DTS,對于音頻PTS等于DTS。 DTS幀間隔由步驟1獲得的音頻采樣率和采樣點(diǎn) 數(shù)計(jì)算。音頻DTS的起點(diǎn)與視頻DTS的起點(diǎn)相同。
PTS = DTS
「 samptes 27000000 Frawe 一加e =-x-
— Mrm/ n"g — y^egwewcy 300 其中Frame_time為音頻幀間隔,samples為音頻幀采樣點(diǎn)數(shù),sampling—
frequency為音頻幀采樣率。 根據(jù)TS包結(jié)構(gòu)將PES分組分段置于整數(shù)個TS包中,緩沖TS包數(shù)據(jù)。計(jì)算每個TS 包的DTS,為該P(yáng)ES分組DTS值加上當(dāng)前TS包中的第一個ES字節(jié)在整個ES包中的位置乘 與每個ES字節(jié)所持續(xù)的時間。每個ES字節(jié)所持續(xù)時間為一個音頻幀時間間隔與幀長度的 比值。 步驟4. 3、根據(jù)視音頻DTS選擇輸出TS包類型 步驟4. 3. 1、若緩沖區(qū)中視頻或音頻TS包數(shù)為零,則循環(huán)至步驟4. l讀取相應(yīng)的視 頻或音頻幀進(jìn)行處理。 步驟4. 3. 2、若PSI信息間隔TS包數(shù)大于設(shè)定PSI輸出間隔,輸出PSI信息TS包。 PSI輸出間隔為輸出碼率和設(shè)定PSI插入時間間隔的乘積與TS包長度的比值。根據(jù)輸出的 TS包個數(shù)更新PCR值。 步驟4. 3. 3、若PCR間隔TS包數(shù)大于設(shè)定PCR輸出包間隔PCILpacketjnterval, 輸出包含PCR字段的TS包。根據(jù)輸出的TS包個數(shù)更新PCR值。 步驟4. 3. 4、比較緩沖區(qū)中最近一個視頻和音頻TS包的DTS值,取較小的DTS值計(jì) 算與當(dāng)前PCR值的差值(DTS-PCR): 若該差值大于一個視頻幀時間間隔(Frame—time),則輸出填充空包。計(jì)算該差 值與 一 個視頻幀時間間隔的差值(DTS-PCR-Frame_t ime),該值與每個TS包的時間間隔 Packet—time的比值就是填充空包的個數(shù)。然后輸出DTS值較小的TS包。根據(jù)輸出的TS 包個數(shù)更新PCR值; 若該差值小于一個視頻幀時間間隔(Frame_time),則輸出DTS值較小的TS包。根 據(jù)輸出的TS包個數(shù)更新PCR值;
步驟4.4、循環(huán)步驟4. 3。
權(quán)利要求
一種傳輸流視音頻同步復(fù)用方法,將壓縮編碼后的視頻、音頻節(jié)目和輔助數(shù)據(jù)復(fù)用成一路單節(jié)目傳輸流。其特征在于,操作步驟如下步驟1、初始化;步驟2、計(jì)算節(jié)目參考時鐘PCR信息;步驟3、生成節(jié)目特定信息PSI信息步驟4、視音頻同步復(fù)用。
2. 如權(quán)利要求l所述的傳輸流視音頻同步復(fù)用方法,其特征在于所述步驟l初始化是 初始化緩存區(qū)和計(jì)數(shù)器;統(tǒng)計(jì)獲取輸入視頻碼率、視頻幀率、音頻碼率、音頻采樣率、音頻采 樣點(diǎn)數(shù)等基本信息;若輸出傳輸流速率小于視音頻碼率之和,則報(bào)錯退出。
3. 如權(quán)利要求1所述的傳輸流視音頻同步復(fù)用方法,其特征在于所述的步驟2計(jì)算 PCR信息是根據(jù)傳輸流輸出碼率計(jì)算節(jié)目參考時鐘PCR輸出包間隔,為輸出碼率和設(shè)定 PCR插入時間間隔的乘積與TS包長度的比值。輸出傳輸流PCR的起點(diǎn)時間比視頻解碼時間 標(biāo)簽DTS的起點(diǎn)時間小一個視頻幀間隔。每輸出一個TS包,PCR增加一個TS包的時間間 隔Packet—time,該時間間隔為TS包長度與輸出碼率的比值。
4. 如權(quán)利要求1所述的傳輸流視音頻同步復(fù)用方法,其特征在于所述步驟3生成PSI 信息是根據(jù)輸入視音頻基本流個數(shù)生成輸出傳輸流的節(jié)目特定信息PSI,生成填充空包; PSI信息包括節(jié)目關(guān)聯(lián)表PAT,節(jié)目映射表PMT,網(wǎng)絡(luò)信息表NIT,條件訪問表CAT,若表段長 度大于單個TS包的最大有效負(fù)載時,則分段置于連續(xù)的TS包中。
5. 如權(quán)利要求1所述的傳輸流視音頻同步復(fù)用方法,其特征在于所述的步驟4視音頻 同步復(fù)用的具體操作步驟如下步驟4. 1、獲取視、音頻幀數(shù)據(jù),分析幀信息,若視音頻流結(jié)束,則退出,否則 對于視頻一幀視頻幀編碼成一個分組基本流PES包,根據(jù)視頻ES結(jié)構(gòu)獲取一個視頻圖像幀,圖像幀前的圖像序列頭Sequence—header及其擴(kuò)展、圖像組頭G0PJieader —并歸到該圖像幀中;根據(jù)圖像頭判斷圖像幀類型,統(tǒng)計(jì)幀長度;對于音頻一個音頻幀編碼成一個PES包,根據(jù)音頻ES結(jié)構(gòu)獲得一個音頻幀,統(tǒng)計(jì)幀長度;步驟4. 2、視、音頻數(shù)據(jù)編碼成TS包對于視頻一幀圖像數(shù)據(jù)加上PES分組頭信息形成一個PES包,PES包頭包含了解碼時 間標(biāo)簽DTS和顯示時間標(biāo)簽PTS信息;DTS幀間隔由所述步驟1獲得的視頻幀速率計(jì)算,PTS 根據(jù)幀類型不同取值不同,對于B幀PTS等于DTS ;根據(jù)TS包結(jié)構(gòu)將PES分組分段置于整數(shù)個TS包中,緩存TS包數(shù)據(jù);計(jì)算每個TS包的 DTS,為該P(yáng)ES分組DTS值加上當(dāng)前TS包中的第一個ES字節(jié)在整個ES包中的位置乘與每 個ES字節(jié)所持續(xù)的時間;每個ES字節(jié)所持續(xù)時間為一個視頻幀時間間隔與幀長度的比值; 對于音頻一幀音頻數(shù)據(jù)加上PES分組頭信息形成一個PES包,PES包頭包含了解碼時間標(biāo) 簽DTS,對于音頻PTS等于DTS ;DTS幀間隔由所述步驟1獲得的音頻采樣率和采樣點(diǎn)數(shù)計(jì) 算;音頻DTS的起點(diǎn)與視頻DTS的起點(diǎn)相同;根據(jù)TS包結(jié)構(gòu)將PES分組分段置于整數(shù)個TS包中,緩沖TS包數(shù)據(jù)。計(jì)算每個TS包 的DTS,為該P(yáng)ES分組DTS值加上當(dāng)前TS包中的第一個ES字節(jié)在整個ES包中的位置乘與 每個ES字節(jié)所持續(xù)的時間;每個ES字節(jié)所持續(xù)時間為一個音頻幀時間間隔與幀長度的比值;步驟4. 3、根據(jù)視音頻DTS選擇輸出TS包類型 步驟4.4、循環(huán)步驟4. 3。
6.如權(quán)利要求5所述的傳輸流再復(fù)用方法,其特征在于所述步驟4. 3根據(jù)視音頻DTS 選擇輸出TS包類型的操作步驟如下步驟4. 3. 1、若緩沖區(qū)中視頻或音頻TS包數(shù)為零,則循環(huán)至步驟4. l讀取相應(yīng)的視頻或 音頻幀進(jìn)行處理;步驟4. 3. 2、若PSI信息間隔TS包數(shù)大于設(shè)定PSI輸出間隔,輸出PSI信息TS包。PSI 輸出間隔為輸出碼率和設(shè)定PSI插入時間間隔的乘積與TS包長度的比值;根據(jù)輸出的TS 包個數(shù)更新PCR值;步驟4. 3. 3、若PCR間隔TS包數(shù)大于設(shè)定PCR輸出包間隔,輸出包含PCR字段的TS包; 根據(jù)輸出的TS包個數(shù)更新PCR值;步驟4. 3. 4、比較緩沖區(qū)中最近一個視頻和音頻TS包的DTS值,取較小的DTS值計(jì)算與 當(dāng)前PCR值的差值(DTS-PCR):若該差值大于一個視頻幀時間間隔Frame—time,則輸出填充空包。計(jì)算該差值與一個 視頻幀時間間隔的差值DTS-PCR-Frame_time,該值與每個TS包的時間間隔Packet_time的 比值就是填充空包的個數(shù)。然后輸出DTS值較小的TS包。根據(jù)輸出的TS包個數(shù)更新PCR 值;若該差值小于一個視頻幀時間間隔Frame_time,則輸出DTS值較小的TS包;根據(jù)輸出 的TS包個數(shù)更新PCR值。
全文摘要
本發(fā)明涉及一種傳輸流視音頻同步復(fù)用方法。本方法是將壓縮編碼后的視頻、音頻節(jié)目和其他輔助數(shù)據(jù)復(fù)用成一路單節(jié)目傳輸流。視音頻幀編碼TS包時計(jì)算每個TS包的DTS值,根據(jù)每個視音頻TS包的DTS值與當(dāng)前PCR值的比較進(jìn)行同步復(fù)用??蓪﹄x線視頻文件或?qū)崟r編碼流進(jìn)行復(fù)用,復(fù)用得到的傳輸流碼率恒定,能被接收解碼器正確解碼。
文檔編號H04N7/52GK101729908SQ20091019820
公開日2010年6月9日 申請日期2009年11月3日 優(yōu)先權(quán)日2009年11月3日
發(fā)明者朱民耀, 熊江江, 鄭啟盛 申請人:上海大學(xué)