專利名稱:一種通過處理時碼跳變以使視音頻同步的方法
技術領域:
本發明涉及視音頻剪輯領域,尤其涉及一種通過處理時碼跳變以使視音頻同步的方法。
背景技術:
隨著計算機處理能力的增強,視音頻處理技術也有了長足的發展。視音頻處理的過程中,視音頻剪輯是最常用到的技術。在數字電視系統中,模擬視音頻信號按照MPEG-2的標準,經過抽樣、量化及壓縮編碼形成基本碼流ES,基本碼流ES是不分段的連續碼流。把基本碼流分割成段,并加上對應的頭文件打包形成的打包基本碼流PES,PES包和包之間可以是不連續的。在傳輸時將 PES包再分段打成有固定長度的傳送碼流TS (TransportStream)或可變長度的節目流PS(ProgramStream)0 TS和PS分別適用于不同的場合應用,節目流PS適合在相對出錯較少的環境下使用,其長度是變化的,而傳送流TS能夠把多個節目在基于一個或多個時間表示的基礎上構成一個流,TS適合于出錯較多的場合下使用。現有技術中,TS流中間的顯示時間標簽PTS或解碼時間標簽DTS等時碼會發生跳變,由此會導致跳變處前后視音頻的PTS和DTS不連續,甚至音頻流和視頻流跳變的程度還不一樣,這就會造成TS流文件最終播出時視音頻不同步,甚至視頻或音頻本身都不夠連續。
發明內容
為解決上述問題,本發明提供一種通過處理時碼跳變以使視音頻同步的方法,通過記錄跳變前的PTS和DTS,并以此來調整跳變后的PTS和DTS,使視音頻本身足夠連續,并在此基礎上進一步進行視音頻同步處理,使TS流發生時碼跳變后也可以實現最終播出時達到視音頻同步,且使視頻或音頻本身不會因為時碼的跳變而不連續,極大的提高了節目播出的效果。為達到上述目的,本發明實施例提供了一種通過處理時碼跳變以使視音頻同步的方法,包括以下步驟步驟101,接收視音頻數據;步驟102,解析所述視音頻數據,順序獲取顯示時間標簽(PTS);步驟103,判斷當前PTS與上個PTS相比是否發生跳變,若是,進入步驟104,若否,進入步驟105,其中,所述當前PTS為視頻流的PTS ;步驟104,判斷所述當前PTS對應的當前巾貞是否為關鍵巾貞(KeyFrame),若是,進入步驟106,若否,丟棄所述當前幀;步驟105,記錄所述當前PTS,判斷是否有音頻流發生跳變,若是,則將所述音頻流進行銜接,進入步驟109 ;步驟106,計算所述跳變的時長;
步驟107,根據所述跳變的時長修改所述當前PTS,得到修改后的PTS,使所述修改后的PTS與所述上個PTS保持連續,生成銜接后的視頻流;步驟108,判斷是否有音頻流發生跳變,若是,則將所述音頻流進行銜接,生成銜接后的首頻流;進入步驟109 ;步驟109,將所述銜接后的視頻流和所述銜接后的音頻流同步輸出。本發明實施例的技術方案帶來的有益效果如下通過步驟101,接收視音頻數據;步驟102,解析所述視音頻數據,順序獲取顯示時間標簽(PTS);步驟103,判斷當前PTS與上個PTS相比是否發生跳變,若是,進入步驟104,若否,進入步驟105,其中,所述當前PTS為視頻流的PTS ;步驟104,判斷所述當前PTS對應的當前幀是否為關鍵幀(KeyFrame),若是,進入步驟106,若否,丟棄所述當前幀;步驟105,記錄所述當前PTS,判斷是否有音頻流發生跳變,若是,則將所述音頻流進行銜接,進入步驟109 ;步驟106,計算所述跳變的時長;步驟107,根據所述跳變的時長修改所述當前PTS,得到修改后的PTS,使所述修改后的PTS與所 述上個PTS保持連續,生成銜接后的視頻流;步驟108,判斷是否有音頻流發生跳變,若是,則將所述音頻流進行銜接,生成銜接后的音頻流;進入步驟109 ;步驟109,將所述銜接后的視頻流和所述銜接后的音頻流同步輸出,使TS流發生時碼跳變后也可以實現最終播出時達到視音頻同步,且使視頻或音頻本身不會因為時碼的跳變而不連續,極大的提高了節目播出的效果。
為了更清楚地說明本發明實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發明的一些實施例,對于本領域普通技術人員來講,在不付出創造性勞動性的前提下,還可以根據這些附圖獲得其他的附圖。圖I是本發明實施例一種通過處理時碼跳變以使視音頻同步的方法流程圖。
具體實施例方式下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例是本發明一部分實施例,而不是全部的實施例。基于本發明中的實施例,本領域普通技術人員在沒有做出創造性勞動前提下所獲得的所有其他實施例,都屬于本發明保護的范圍。本發明實施例提供了一種通過處理時碼跳變以使視音頻同步的方法,如圖1,包括以下步驟步驟101,接收視音頻數據;步驟102,解析所述視音頻數據,順序獲取顯示時間標簽(PTS);判斷所述當前PTS與上個PTS的絕對差值是否大于2秒,若是則判定發生跳變;其中,若所述當前PTS的第33為是0,且所述上個PTS的第33為是I,則將所述上個PTS增加0x200000000再與所述當前PTS進行比較。其中,計算所述跳變時長具體為跳變時長=當前PTS-上一幀視頻持續時長-max (上一幀視頻ui64PTS,上一幀音頻 ui64PTS);其中,所述ui64PTS是將PTS預先定義為unsifned 64bit int類型的數據。步驟103,判斷當前PTS與上個PTS相比是否發生跳變,若是,進入步驟104,若否,進入步驟105,其中,所述當前PTS為視頻流的PTS ;步驟104,判斷所述當前PTS對應的當前巾貞是否為關鍵巾貞(KeyFrame),若是,進入步驟106,若否,丟棄所述當前幀;步驟105,記錄所述當前PTS,判斷是否有音頻流發生跳變,若是,則將所述音頻流進行銜接,進入步驟109 ;其中,所述判斷是否有音頻流發生跳變,若是,則將所述音頻流進行銜接,生成銜接后的音頻流具備包括判斷當前音頻PTS與上個音頻PTS相比是否發生跳變,若否,記錄當前音頻PTS,若是,計算所述跳變的時長; 根據所述跳變的時長修改所述當前音頻PTS,得到修改后的音頻PTS,使所述修改后的音頻PTS與所述上個音頻PTS保持連續,生成銜接后的音頻流;判斷是否所有音頻流都發生變化,若是,則處理所述所有音頻流。步驟106,計算所述跳變的時長;步驟107,根據所述跳變的時長修改所述當前PTS,得到修改后的PTS,使所述修改后的PTS與所述上個PTS保持連續,生成銜接后的視頻流;判斷是否所有視頻流都發生變化,若是,則處理所述所有視頻流。步驟108,判斷是否有音頻流發生跳變,若是,則將所述音頻流進行銜接,生成銜接后的首頻流;進入步驟109 ;其中,所述判斷是否有音頻流發生跳變,若是,則將所述音頻流進行銜接,生成銜接后的音頻流具體包括判斷當前音頻PTS與上個音頻PTS相比是否發生跳變,若否,記錄當前音頻PTS,若是,計算所述跳變的時長;根據所述跳變的時長修改所述當前音頻PTS,得到修改后的音頻PTS,使所述修改后的音頻PTS與所述上個音頻PTS保持連續,生成銜接后的音頻流;判斷是否所有音頻流都發生變化,若是,則處理所述所有音頻流。步驟109,將所述銜接后的視頻流和所述銜接后的音頻流同步輸出。其中,上述步驟中,所述上個PTS具體為所述當前PTS之前最大的PTS。本發明實施例的技術方案帶來的有益效果如下通過步驟101,接收視音頻數據;步驟102,解析所述視音頻數據,順序獲取顯示時間標簽(PTS);步驟103,判斷當前PTS與上個PTS相比是否發生跳變,若是,進入步驟104,若否,進入步驟105,其中,所述當前PTS為視頻流的PTS ;步驟104,判斷所述當前PTS對應的當前幀是否為關鍵幀(KeyFrame),若是,進入步驟106,若否,丟棄所述當前幀;步驟105,記錄所述當前PTS,判斷是否有音頻流發生跳變,若是,則將所述音頻流進行銜接,進入步驟109 ;步驟106,計算所述跳變的時長;步驟107,根據所述跳變的時長修改所述當前PTS,得到修改后的PTS,使所述修改后的PTS與所述上個PTS保持連續,生成銜接后的視頻流;步驟108,判斷是否有音頻流發生跳變,若是,則將所述音頻流進行銜接,生成銜接后的音頻流;進入步驟109 ;步驟109,將所述銜接后的視頻流和所述銜接后的音頻流同步輸出,使TS流發生時碼跳變后也可以實現最終播出時達到視音頻同步,且使視頻或音頻本身不會因為時碼的跳變而不連續,極大的提高了節目播出的效果。通過以上的實施方式的描述,本領域的技術人員可以清楚地了解到本發明可以通過硬件實現,也可以可借助軟件加必要的通用硬件平臺的方式來實現,基于這樣的理解,本發明的技術方案可以以軟件產品的形式體現出來,該軟件產品可以存儲在一個非易失性存儲介質(可以是⑶-R0M,U盤,移動硬盤等)中,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網絡設備等)執行本發明各個實施例所述的方法。總之,以上所述僅為本發明的較佳實施例而已,并非用于限定本發明的保護范圍。 凡在本發明的精神和原則之內,所作的任何修改、等同替換、改進等,均應包含在本發明的保護范圍之內。
權利要求
1.一種通過處理時碼跳變以使視音頻同步的方法,其特征在于,包括以下步驟 步驟101,接收視音頻數據; 步驟102,解析所述視音頻數據,順序獲取顯示時間標簽(PTS); 步驟103,判斷當前PTS與上個PTS相比是否發生跳變,若是,進入步驟104,若否,進入步驟105,其中,所述當前PTS為視頻流的PTS ; 步驟104,判斷所述當前PTS對應的當前巾貞是否為關鍵巾貞(KeyFrame),若是,進入步驟106,若否,丟棄所述當前幀; 步驟105,記錄所述當前PTS,判斷是否有音頻流發生跳變,若是,則將所述音頻流進行 銜接,進入步驟109 ; 步驟106,計算所述跳變的時長; 步驟107,根據所述跳變的時長修改所述當前PTS,得到修改后的PTS,使所述修改后的PTS與所述上個PTS保持連續,生成銜接后的視頻流; 步驟108,判斷是否有音頻流發生跳變,若是,則將所述音頻流進行銜接,生成銜接后的音頻流;進入步驟109 ; 步驟109,將所述銜接后的視頻流和所述銜接后的音頻流同步輸出。
2.如權利要求I所述方法,其特征在于,步驟105和步驟108所述判斷是否有音頻流發生跳變,若是,則將所述音頻流進行銜接,生成銜接后的音頻流具體包括以下步驟 判斷當前音頻PTS與上個音頻PTS相比是否發生跳變,若否,記錄當前音頻PTS,若是,計算所述跳變的時長; 根據所述跳變的時長修改所述當前音頻PTS,得到修改后的音頻PTS,使所述修改后的音頻PTS與所述上個音頻PTS保持連續,生成銜接后的音頻流。
3.如權利要求I所述方法,其特征在于,步驟107所述根據所述跳變的時長修改所述當前PTS,得到修改后的PTS,使所述修改后的PTS與所述上個PTS保持連續之后還包括 判斷是否所有視頻流都發生變化,若是,則處理所述所有視頻流。
4.如權利要求2所述方法,其特征在于,所述根據所述跳變的時長修改所述當前音頻PTS,得到修改后的音頻PTS,使所述修改后的音頻PTS與所述上個音頻PTS保持連續之后還包括 判斷是否所有音頻流都發生變化,若是,則處理所述所有音頻流。
5.如權利要求1-4所述方法,其特征在于,所述上個PTS具體為所述當前PTS之前最大的PTS。
6.如權利要求1-5所述方法,其特征在于,步驟102所述判斷當前PTS與上個PTS相比是否發生跳變具體為 判斷所述當前PTS與上個PTS的絕對差值是否大于2秒,若是則判定發生跳變; 其中,若所述當前PTS的第33為是0,且所述上個PTS的第33為是1,則將所述上個PTS增加0x200000000再與所述當前PTS進行比較。
7.如權利要求I或2所述方法,其特征在于,所述計算所述跳變時長具體為 跳變時長=當前PTS-上一幀視頻持續時長-max (上一幀視頻ui64PTS,上一幀音頻ui64PTS); 其中,所述ui64PTS是將PTS預先定義為unsifned 64bit int類型的數據。
全文摘要
本發明公開了一種通過處理時碼跳變以使視音頻同步的方法,通過判斷當前PTS與上個PTS相比是否發生跳變;判斷所述當前PTS對應的當前幀是否為關鍵幀,若否,丟棄所述當前幀;記錄所述當前PTS,判斷是否有音頻流發生跳變,若是,則將所述音頻流進行銜接;計算所述跳變的時長;根據所述跳變的時長修改所述當前PTS,得到修改后的PTS,使所述修改后的PTS與所述上個PTS保持連續,生成銜接后的視頻流;判斷是否有音頻流發生跳變,若是,則將所述音頻流進行銜接,生成銜接后的音頻流將所述銜接后的視頻流和所述銜接后的音頻流同步輸出,使TS流發生時碼跳變后也可以實現最終播出時達到視音頻同步,且使視頻或音頻本身不會因為時碼的跳變而不連續,極大的提高了節目播出的效果。
文檔編號H04N21/44GK102780929SQ20121017692
公開日2012年11月14日 申請日期2012年5月31日 優先權日2012年5月31日
發明者夏永宏, 谷潔平 申請人:新奧特(北京)視頻技術有限公司