国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      多線程的音視頻同步控制方法及裝置的制作方法

      文檔序號(hào):7764117閱讀:339來(lái)源:國(guó)知局
      專利名稱:多線程的音視頻同步控制方法及裝置的制作方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及一種數(shù)字音視頻技術(shù)領(lǐng)域,尤其涉及一種多線程的音視頻同步控制方 法及裝置。
      背景技術(shù)
      目前流行的視頻編解碼標(biāo)準(zhǔn),例如MPEG-I、MPEG-2、MPEG-4、H. 26x等都是采用傳 統(tǒng)的混合編碼結(jié)構(gòu),該結(jié)構(gòu)采用時(shí)間和空間的預(yù)測(cè)、變換、量化和熵編碼方法,將視頻幀編 碼為不同的幀類型幀內(nèi)預(yù)測(cè)幀(I幀)、幀間預(yù)測(cè)幀(P幀)和雙向預(yù)測(cè)幀(B幀),這必將 導(dǎo)致視頻解碼速度因視頻內(nèi)容而有所不同,而視頻的播放幀率是固定的,從而導(dǎo)致了視頻 解碼速度與顯示速度不匹配等問(wèn)題,而且音頻和視頻是分開編碼和傳輸,而在播放時(shí)要求 同步輸出,如果不采用比較好的控制方法,很容易導(dǎo)致音視頻輸出不同步的現(xiàn)象。解決這個(gè)問(wèn)題的方法,現(xiàn)有技術(shù)一般是采用較大的緩沖區(qū)來(lái)緩沖編碼數(shù)據(jù)和編碼 后的圖像和音頻幀。由于圖像內(nèi)容的不確定性又給緩沖區(qū)大小的確定帶來(lái)了困難,緩沖區(qū) 太小則數(shù)據(jù)溢出,緩沖區(qū)太大又造成內(nèi)存空間的浪費(fèi)。另一種現(xiàn)有技術(shù)可參閱2007年5月30日公開的中國(guó)發(fā)明專利第200610157163. 6 號(hào)所揭露的一種移動(dòng)多媒體廣播視音頻同步播放的方法,所述方法在子幀頭中設(shè)一個(gè)起始 播放時(shí)間字段,用來(lái)表示該頻道數(shù)據(jù)的起始播放時(shí)間;將視頻、音頻數(shù)據(jù)分別分割為多個(gè)視 頻、音頻單元,根據(jù)每個(gè)視頻、音頻單元的起始播放時(shí)間與該整個(gè)頻道數(shù)據(jù)的起始播放時(shí)間 的時(shí)間差,在每個(gè)視頻、音頻段頭中為每個(gè)視頻、音頻單元設(shè)置一個(gè)相對(duì)播放時(shí)間字段,來(lái) 記錄每個(gè)視頻、音頻單元的播放相對(duì)時(shí)間差;每個(gè)視頻、音頻單元的實(shí)際播放時(shí)間是起始播 放時(shí)間與該視頻、音頻單元的相對(duì)播放時(shí)間的和。終端接收到數(shù)據(jù)后計(jì)算出每個(gè)視音頻單 元的實(shí)際播放時(shí)間進(jìn)行播放,就能實(shí)現(xiàn)視頻音頻的同步播放。但這種方法并沒(méi)有考慮圖像 和聲音內(nèi)容的不確定性,而且分割視頻和音頻也帶來(lái)困難和麻煩。

      發(fā)明內(nèi)容
      本發(fā)明主要解決的技術(shù)問(wèn)題是提供一種資源占用少并且可實(shí)現(xiàn)音視頻同步播放 的多線程的音視頻同步控制方法及裝置。為解決上述技術(shù)問(wèn)題,本發(fā)明采用的一個(gè)技術(shù)方案是提供一種多線程的音視頻 同步控制方法,包括將所述傳輸流或節(jié)目流拆分成音頻基本流、視頻基本流、以及分別對(duì) 應(yīng)所述音頻基本流、視頻基本流中數(shù)據(jù)元素的各自時(shí)間信息;分別解碼所述音頻基本流和 視頻基本流中的比特流,得到待輸出的音頻數(shù)據(jù)和圖像數(shù)據(jù);解碼后根據(jù)所述時(shí)間信息分 別選擇符合本地系統(tǒng)時(shí)鐘要求的待輸出音頻數(shù)據(jù)和圖像數(shù)據(jù)進(jìn)行輸出,并選擇時(shí)間信息與 本地系統(tǒng)時(shí)鐘值最接近的音頻數(shù)據(jù)和圖像數(shù)據(jù),計(jì)算選擇得到的音頻數(shù)據(jù)對(duì)應(yīng)時(shí)間和選擇 得到的圖像數(shù)據(jù)對(duì)應(yīng)時(shí)間的差值,在所述選擇得到的視頻數(shù)據(jù)對(duì)應(yīng)時(shí)間大于選擇得到的音 頻數(shù)據(jù)對(duì)應(yīng)時(shí)間時(shí),重復(fù)輸出所述視頻數(shù)據(jù)進(jìn)行顯示,在所述選擇得到的視頻數(shù)據(jù)對(duì)應(yīng)時(shí) 間小于選擇得到的音頻數(shù)據(jù)對(duì)應(yīng)時(shí)間時(shí),跳過(guò)該視頻數(shù)據(jù)對(duì)視頻播放進(jìn)行跳幀處理,使音視頻同步輸出。其中,將所述傳輸流或節(jié)目流拆分的步驟之前,包括創(chuàng)建解復(fù)用線程、音頻解碼 線程、視頻解碼線程、音頻同步輸出線程和視頻同步輸出線程,所述解復(fù)用線程用于將所述 傳輸流或節(jié)目流拆分;將所述傳輸流或節(jié)目流拆分的步驟之后,包括將音頻基本流插入 音頻基本流隊(duì)列尾部,將視頻基本流插入視頻基本流隊(duì)列尾部,激活解碼線程;若音頻基本 流隊(duì)列或視頻基本流隊(duì)列溢出則解復(fù)用線程掛起等待;在將音頻基本流插入音頻基本流隊(duì) 列尾部、將視頻基本流插入視頻基本流隊(duì)列尾部并激活解碼線程之后,包括啟動(dòng)音頻解碼 線程和視頻解碼線程,進(jìn)行所述分別解碼音頻基本流隊(duì)列和視頻基本流隊(duì)列中的比特流的 步驟,并將解碼后的音頻數(shù)據(jù)和圖像數(shù)據(jù)和各自相應(yīng)時(shí)間信息分別插入音頻輸出隊(duì)列和視 頻輸出隊(duì)列;在將解碼后的音頻數(shù)據(jù)和圖像數(shù)據(jù)和各自相應(yīng)時(shí)間信息分別插入音頻輸出隊(duì) 列和視頻輸出隊(duì)列之后,包括根據(jù)解碼后的時(shí)間戳與本地系統(tǒng)時(shí)鐘的差值,啟動(dòng)音頻同步 輸出線程和視頻同步輸出線程。其中,所述時(shí)間信息包括時(shí)間戳。其中,根據(jù)所述時(shí)間信息分別選擇符合本地系統(tǒng)時(shí)鐘要求的待輸出音頻數(shù)據(jù)和圖 像數(shù)據(jù)進(jìn)行輸出的步驟包括計(jì)算當(dāng)前時(shí)刻的本地系統(tǒng)時(shí)鐘,查找音頻輸出隊(duì)列中時(shí)間戳 值與本地系統(tǒng)時(shí)鐘值最接近的隊(duì)列元素,作為符合本地系統(tǒng)時(shí)鐘要求的待輸出音頻數(shù)據(jù); 以及計(jì)算當(dāng)前時(shí)刻的本地系統(tǒng)時(shí)鐘,查找視頻輸出隊(duì)列中時(shí)間戳值與本地系統(tǒng)時(shí)鐘值最接 近的隊(duì)列元素,作為符合本地系統(tǒng)時(shí)鐘要求的待輸出圖像數(shù)據(jù)。其中,所述激活解碼線程通過(guò)對(duì)信號(hào)量進(jìn)行申請(qǐng)資源的P操作完成。其中,所述解復(fù)用線程與音頻解碼線程、視頻解碼線程間的同步處理采用信號(hào)量 機(jī)制完成,通過(guò)對(duì)信號(hào)的申請(qǐng)資源/釋放資源的PV操作協(xié)調(diào)解復(fù)用線程與音頻解碼線程、 視頻解碼線程間的同步。其中,采用所述信號(hào)量機(jī)制完成解復(fù)用線程與音頻解碼線程、視頻解碼線程間的 同步處理包括音頻解碼(a)音頻解碼線程阻塞于音頻信號(hào)量,在解復(fù)用線程激活信號(hào)量 后開始解碼;(b)對(duì)音頻基本流隊(duì)列頭的音頻基本流進(jìn)行解碼;(C)將解碼后一幀音頻數(shù)據(jù) 插入音頻輸出隊(duì)列尾部,并激活音頻輸出條件變量;(d)將音頻基本流隊(duì)列中的時(shí)間戳值 保存在音頻輸出隊(duì)列中;所述音頻輸出隊(duì)列通過(guò)該隊(duì)列的長(zhǎng)度判斷其是否溢出,若音頻輸 出隊(duì)列溢出則音頻解碼線程掛起等待;視頻解碼(a)視頻解碼線程阻塞于音頻信號(hào)量,在 解復(fù)用線程激活信號(hào)量后開始解碼;(b)對(duì)視頻基本流隊(duì)列頭的視頻基本流進(jìn)行解碼;(C) 將解碼后的一幀圖像數(shù)據(jù)插入視頻輸出隊(duì)列尾部,并激活視頻輸出條件變量;(d)將視頻 基本流隊(duì)列中的時(shí)間戳值保存在視頻輸出隊(duì)列中;所述視頻輸出隊(duì)列通過(guò)該隊(duì)列的長(zhǎng)度判 斷其是否溢出,若視頻輸出隊(duì)列溢出則視頻解碼線程掛起等待。為解決上述技術(shù)問(wèn)題,本發(fā)明采用的另一個(gè)技術(shù)方案是提供一種多線程的音視 頻同步控制裝置,包括解復(fù)用模塊,用于將所述傳輸流或節(jié)目流拆分成音頻基本流、視頻 基本流、以及分別對(duì)應(yīng)所述音頻基本流、視頻基本流中數(shù)據(jù)元素的各自時(shí)間信息;音頻解碼 器,用于解碼所述音頻基本流中的比特流,得到待輸出的音頻數(shù)據(jù);視頻解碼器,用于解碼 所述視頻基本流中的比特流,得到待輸出的圖像數(shù)據(jù);輸出模塊,用于解碼后根據(jù)所述時(shí)間 信息分別選擇符合本地系統(tǒng)時(shí)鐘要求的待輸出音頻數(shù)據(jù)和圖像數(shù)據(jù)進(jìn)行輸出;同步模塊, 用于選擇時(shí)間信息與本地系統(tǒng)時(shí)鐘值最接近的音頻數(shù)據(jù)和圖像數(shù)據(jù),計(jì)算選擇得到的音頻數(shù)據(jù)對(duì)應(yīng)時(shí)間和選擇得到的圖像數(shù)據(jù)對(duì)應(yīng)時(shí)間的差值,在所述選擇得到的視頻數(shù)據(jù)對(duì)應(yīng)時(shí) 間大于選擇得到的音頻數(shù)據(jù)對(duì)應(yīng)時(shí)間時(shí),控制所述輸出模塊重復(fù)輸出所述視頻數(shù)據(jù)進(jìn)行顯 示,在所述選擇得到的視頻數(shù)據(jù)對(duì)應(yīng)時(shí)間小于選擇得到的音頻數(shù)據(jù)對(duì)應(yīng)時(shí)間時(shí),控制所述 輸出模塊跳過(guò)該視頻數(shù)據(jù)對(duì)視頻播放進(jìn)行跳幀處理,使音視頻同步輸出。其中,包括用于保存音頻基本流的音頻基本流隊(duì)列、用于保存視頻基本流的視頻 基本流隊(duì)列、用于保存解碼后的音頻數(shù)據(jù)的音頻輸出隊(duì)列、用于保存解碼后的視頻數(shù)據(jù)的 視頻輸出隊(duì)列。其中,所述解復(fù)用模塊具體用于對(duì)系統(tǒng)層的傳輸流或節(jié)目流進(jìn)行解復(fù)用,將其拆 分成音頻基本流和視頻基本流后分別插入音頻基本流隊(duì)列和視頻基本流隊(duì)列,并獲取相應(yīng) 的時(shí)間戳;所述音頻解碼器和視頻解碼器具體用于分別對(duì)音頻基本流隊(duì)列和視頻基本流隊(duì) 列中的數(shù)據(jù)進(jìn)行解碼,將解碼后的音頻數(shù)據(jù)和視頻數(shù)據(jù)分別插入音頻輸出隊(duì)列和視頻輸出 隊(duì)列;所述解碼后的音頻數(shù)據(jù)為脈沖調(diào)制編碼數(shù)據(jù)。本發(fā)明的有益效果是區(qū)別于現(xiàn)有技術(shù)為實(shí)現(xiàn)音視頻同步播放而需要補(bǔ)充大量視 頻編碼數(shù)據(jù)和音頻圖像數(shù)據(jù)而很大程度地降低對(duì)系統(tǒng)資源的使用效率的情況,本發(fā)明所述 方法利用系統(tǒng)層定義的時(shí)間信息和本地系統(tǒng)時(shí)間STC(SyStem Time clock),使音視頻都對(duì) 照上述兩個(gè)時(shí)間的差值來(lái)控制輸出,從而使得音視頻在同一的本地系統(tǒng)時(shí)鐘的參考下按照 音視頻本身時(shí)間信息嚴(yán)格輸出,在遇到播放內(nèi)容量波動(dòng)情況下,分別采用重復(fù)播放、跳幀兩 種手段實(shí)現(xiàn)嚴(yán)格的音視頻同步輸出,從而實(shí)現(xiàn)音視頻同步播放,不僅有效地實(shí)現(xiàn)音視頻的 同步輸出,而且不需要補(bǔ)充大量的視頻編碼數(shù)據(jù)和音頻圖像數(shù)據(jù),從而很大程度地降低對(duì) 系統(tǒng)資源的使用,適合于各種應(yīng)用平臺(tái),比如適合于嵌入式平臺(tái);此外軟件架構(gòu)清晰,實(shí)現(xiàn) 復(fù)雜度低。


      圖1是本發(fā)明多線程的音視頻同步控制方法的流程圖;圖2是本發(fā)明多線程的音視頻同步控制方法的多線程控制流程圖;圖3是本發(fā)明多線程的音視頻同步控制裝置的系統(tǒng)框圖。
      具體實(shí)施例方式為詳細(xì)說(shuō)明本發(fā)明的技術(shù)內(nèi)容、構(gòu)造特征、所實(shí)現(xiàn)目的及效果,以下結(jié)合實(shí)施方式 并配合附圖詳予說(shuō)明。本發(fā)明多線程的音視頻同步控制方法一實(shí)施例,是基于嵌入式Linux操作系統(tǒng)的 平臺(tái)開發(fā)與實(shí)現(xiàn)的,由操作系統(tǒng)對(duì)音視頻傳輸流或節(jié)目流進(jìn)行多線程的并行處理,當(dāng)然本 實(shí)施例僅列舉了 Linux操作系統(tǒng)進(jìn)行說(shuō)明,在其他實(shí)施例中,其他類型的操作系統(tǒng)也可適 用。具體實(shí)施過(guò)程如圖1所示,包括下述步驟步驟101 將所述傳輸流或節(jié)目流拆分成音頻基本流、視頻基本流、以及分別對(duì)應(yīng) 所述音頻基本流、視頻基本流中數(shù)據(jù)元素的各自時(shí)間信息;步驟102 分別解碼所述音頻基本流和視頻基本流中的比特流,得到待輸出的音 頻數(shù)據(jù)和圖像數(shù)據(jù);步驟103 解碼后根據(jù)所述時(shí)間信息分別選擇符合本地系統(tǒng)時(shí)鐘要求的待輸出音頻數(shù)據(jù)和圖像數(shù)據(jù)進(jìn)行輸出,并選擇時(shí)間信息與本地系統(tǒng)時(shí)鐘值最接近的音頻數(shù)據(jù)和圖像 數(shù)據(jù),計(jì)算選擇得到的音頻數(shù)據(jù)對(duì)應(yīng)時(shí)間和選擇得到的圖像數(shù)據(jù)對(duì)應(yīng)時(shí)間的差值,在所述 選擇得到的視頻數(shù)據(jù)對(duì)應(yīng)時(shí)間大于選擇得到的音頻數(shù)據(jù)對(duì)應(yīng)時(shí)間時(shí),重復(fù)輸出所述視頻數(shù) 據(jù)進(jìn)行顯示,在所述選擇得到的視頻數(shù)據(jù)對(duì)應(yīng)時(shí)間小于選擇得到的音頻數(shù)據(jù)對(duì)應(yīng)時(shí)間時(shí), 跳過(guò)該視頻數(shù)據(jù)對(duì)視頻播放進(jìn)行跳幀處理,使音視頻同步輸出。以上實(shí)施例,是利用系統(tǒng)層定義的時(shí)間信息和本地系統(tǒng)時(shí)間,使音視頻都對(duì)照上 述兩個(gè)時(shí)間的差值來(lái)控制輸出,從而使得音視頻在同一的本地系統(tǒng)時(shí)鐘的參考下按照音視 頻本身時(shí)間信息嚴(yán)格輸出,在遇到播放內(nèi)容量波動(dòng)情況下,分別采用以下兩種技術(shù)手段實(shí) 現(xiàn)嚴(yán)格的音視頻同步輸出1)在所述選擇得到的視頻數(shù)據(jù)對(duì)應(yīng)時(shí)間大于選擇得到的音頻數(shù)據(jù)對(duì)應(yīng)時(shí)間時(shí),也 即視頻數(shù)據(jù)快于音頻數(shù)據(jù)時(shí),進(jìn)行視頻的重復(fù)播放處理,使視頻數(shù)據(jù)能“停下來(lái)等”音頻數(shù) 據(jù)的播放;2)在所述選擇得到的視頻數(shù)據(jù)對(duì)應(yīng)時(shí)間小于選擇得到的音頻數(shù)據(jù)對(duì)應(yīng)時(shí)間時(shí),也 即視頻數(shù)據(jù)慢于音頻數(shù)據(jù)時(shí),對(duì)視頻進(jìn)行跳幀處理,使視頻數(shù)據(jù)能“趕上”音頻數(shù)據(jù)的播放。通過(guò)以上技術(shù)手段,實(shí)現(xiàn)音視頻同步播放,不僅有效地實(shí)現(xiàn)音視頻的同步輸出,而 且不需要補(bǔ)充大量的視頻編碼數(shù)據(jù)和音頻圖像數(shù)據(jù),從而很大程度地降低對(duì)系統(tǒng)資源的使 用,適合于各種應(yīng)用平臺(tái),比如適合于嵌入式平臺(tái);此外軟件架構(gòu)清晰,實(shí)現(xiàn)復(fù)雜度低。在一個(gè)實(shí)施例中,是具體應(yīng)用電子運(yùn)算設(shè)備中,即在將所述傳輸流或節(jié)目流拆分 的步驟之前,包括創(chuàng)建解復(fù)用線程、音頻解碼線程、視頻解碼線程、音頻同步輸出線程和視 頻同步輸出線程,所述解復(fù)用線程用于將所述傳輸流或節(jié)目流拆分;將所述傳輸流或節(jié)目流拆分的步驟之后,包括將音頻基本流插入音頻基本流隊(duì) 列尾部,將視頻基本流插入視頻基本流隊(duì)列尾部,激活解碼線程;若音頻基本流隊(duì)列或視頻 基本流隊(duì)列溢出則解復(fù)用線程掛起等待;在將音頻基本流插入音頻基本流隊(duì)列尾部、將視頻基本流插入視頻基本流隊(duì)列尾 部并激活解碼線程之后,包括啟動(dòng)音頻解碼線程和視頻解碼線程,進(jìn)行所述分別解碼音頻 基本流隊(duì)列和視頻基本流隊(duì)列中的比特流的步驟,并將解碼后的音頻數(shù)據(jù)和圖像數(shù)據(jù)和各 自相應(yīng)時(shí)間信息分別插入音頻輸出隊(duì)列和視頻輸出隊(duì)列;在將解碼后的音頻數(shù)據(jù)和圖像數(shù)據(jù)和各自相應(yīng)時(shí)間信息分別插入音頻輸出隊(duì)列 和視頻輸出隊(duì)列之后,包括根據(jù)解碼后的時(shí)間戳與本地系統(tǒng)時(shí)鐘的差值,啟動(dòng)音頻同步輸 出線程和視頻同步輸出線程。當(dāng)然,實(shí)現(xiàn)本發(fā)明的方式并不限于創(chuàng)建多個(gè)線程和排隊(duì)隊(duì)列的方式。在一實(shí)施例中,所述時(shí)間信息包括時(shí)間戳。而根據(jù)所述時(shí)間信息分別選擇符合本 地系統(tǒng)時(shí)鐘要求的待輸出音頻數(shù)據(jù)和圖像數(shù)據(jù)進(jìn)行輸出的步驟包括1)計(jì)算當(dāng)前時(shí)刻的本地系統(tǒng)時(shí)鐘,查找音頻輸出隊(duì)列中時(shí)間戳值與本地系統(tǒng)時(shí)鐘 值最接近的隊(duì)列元素,作為符合本地系統(tǒng)時(shí)鐘要求的待輸出音頻數(shù)據(jù);以及2)計(jì)算當(dāng)前時(shí)刻的本地系統(tǒng)時(shí)鐘,查找視頻輸出隊(duì)列中時(shí)間戳值與本地系統(tǒng)時(shí)鐘 值最接近的隊(duì)列元素,作為符合本地系統(tǒng)時(shí)鐘要求的待輸出圖像數(shù)據(jù)。當(dāng)然如果采用延時(shí)播放或提前播放形式,則查找音頻輸出隊(duì)列中時(shí)間戳值與本地 系統(tǒng)時(shí)鐘值相隔預(yù)定時(shí)間的隊(duì)列元素,并非最接近的隊(duì)列元素。在其他實(shí)施例中不限于采用時(shí)間戳來(lái)進(jìn)行時(shí)間比對(duì),可以是各種形式的時(shí)間信息或參數(shù)。在一個(gè)實(shí)施例中,所述激活解碼線程是通過(guò)對(duì)信號(hào)量進(jìn)行申請(qǐng)資源的P操作完 成。所述解復(fù)用線程與音頻解碼線程、視頻解碼線程間的同步處理采用信號(hào)量機(jī)制完成,通 過(guò)對(duì)信號(hào)的申請(qǐng)資源/釋放資源的PV操作協(xié)調(diào)解復(fù)用線程與音頻解碼線程、視頻解碼線程 間的同步。以下結(jié)合圖1和圖2,詳細(xì)介紹本發(fā)明的其中一個(gè)具體實(shí)施例步驟1、創(chuàng)建五個(gè)線程,分別是解復(fù)用線程、音頻解碼線程、視頻解碼線程、音頻同 步輸出線程和視頻同步輸出線程。步驟2、啟動(dòng)解復(fù)用線程完成對(duì)系統(tǒng)層的傳輸流或節(jié)目流的解復(fù)用處理,將傳輸流 或節(jié)目流拆分成音頻基本流、視頻基本流以及時(shí)間信息;然后將音頻基本流插入音頻基本 流隊(duì)列尾部,將視頻基本流插入視頻基本流隊(duì)列尾部,激活解碼線程;若音頻基本流隊(duì)列或 視頻基本流隊(duì)列溢出則解復(fù)用線程掛起等待。對(duì)于傳輸流,本步驟所述的音頻基本流和視頻基本流是通過(guò)PID值(進(jìn)程標(biāo)識(shí)符) 區(qū)分的,首先解析PID值為0x00的數(shù)據(jù)包,從該數(shù)據(jù)包中的節(jié)目關(guān)聯(lián)表PAT獲得各個(gè)節(jié)目 的節(jié)目映射表PMT的PID值,解碼某個(gè)節(jié)目則解析該節(jié)目對(duì)應(yīng)的節(jié)目映射表,從而獲得該節(jié) 目中音頻基本流的PID值以及視頻基本流的PID值,然后接收相應(yīng)PID值的數(shù)據(jù)包,將數(shù)據(jù) 重組成PES (Packetised Elementary Streams,帶有包頭的基本碼流)分組后插入基本流隊(duì) 列。對(duì)于節(jié)目流,則是通過(guò)各個(gè)PES數(shù)據(jù)分組中的StreamID (流標(biāo)識(shí)符)標(biāo)志位區(qū)分音頻 和視頻基本流。本步驟所述的時(shí)間信息是指PES分組中的時(shí)間戳PTS與節(jié)目參考時(shí)鐘PCR,將解析 得到的PTS值保存在相應(yīng)的隊(duì)列中。解復(fù)用線程在將一整個(gè)PES分組的基本流插入基本流 隊(duì)列后,對(duì)信號(hào)量進(jìn)行P操作(即對(duì)信號(hào)量申請(qǐng)資源)來(lái)激活解碼線程;所述音頻基本流隊(duì) 列或視頻基本流隊(duì)列通過(guò)該隊(duì)列的長(zhǎng)度判斷其是否溢出,若溢出則解復(fù)用線程掛起等待。步驟3、啟動(dòng)音頻解碼線程和視頻解碼線程分別解碼音頻基本流隊(duì)列和視頻基本 流隊(duì)列中的比特流,并將時(shí)間信息和解碼后的音頻數(shù)據(jù)和圖像數(shù)據(jù),分別插入音頻輸出隊(duì) 列和視頻輸出隊(duì)列。其中解碼后的音頻數(shù)據(jù)為PCM數(shù)據(jù)(Pulse Code Modulation,脈沖調(diào) 制編碼數(shù)據(jù))。本步驟所述的音頻解碼過(guò)程如下(a)音頻解碼線程阻塞于音頻信號(hào)量,在解復(fù)用線程激活信號(hào)量后開始解碼;(b)對(duì)音頻基本流隊(duì)列頭的音頻基本流進(jìn)行解碼;(c)將解碼后一幀音頻PCM數(shù)據(jù)插入音頻輸出隊(duì)列尾部,并激活音頻輸出條件變 量;(d)將音頻基本流隊(duì)列中的時(shí)間戳PTS值保存在音頻輸出隊(duì)列中;所述音頻輸出 隊(duì)列通過(guò)該隊(duì)列的長(zhǎng)度判斷其是否溢出,若音頻輸出隊(duì)列溢出則音頻解碼線程掛起等待。本步驟所述的視頻解碼過(guò)程如下(a)視頻解碼線程阻塞于音頻信號(hào)量,在解復(fù)用線程激活信號(hào)量后開始解碼;(b)對(duì)視頻基本流隊(duì)列頭的視頻基本流進(jìn)行解碼;(c)將解碼后的一幀圖像數(shù)據(jù)插入視頻輸出隊(duì)列尾部,并激活視頻輸出條件變 量;
      (d)將視頻基本流隊(duì)列中的時(shí)間戳PTS值保存在視頻輸出隊(duì)列中;所述視頻輸出 隊(duì)列通過(guò)該隊(duì)列的長(zhǎng)度判斷其是否溢出,若視頻輸出隊(duì)列溢出則視頻解碼線程掛起等待。步驟4、根據(jù)解碼后的時(shí)間戳與本地系統(tǒng)時(shí)鐘的差值,啟動(dòng)音頻同步輸出線程和視 頻同步輸出線程,選擇符合輸出時(shí)間的數(shù)據(jù)進(jìn)行輸出;并根據(jù)視頻與音頻的時(shí)間戳的差值, 對(duì)視頻播放進(jìn)行跳幀處理,從而使得音視頻同步輸出。本步驟所述的音頻輸出過(guò)程由以下步驟實(shí)現(xiàn)(a)音頻輸出線程阻塞于音頻輸出條件變量;(b)在音頻解碼線程激活條件變量后,計(jì)算當(dāng)前時(shí)刻的本地系統(tǒng)時(shí)鐘STC ;(C)查找音頻輸出隊(duì)列中時(shí)間戳PTS值與STC值最接近的隊(duì)列元素,將該隊(duì)列的音 頻PCM數(shù)據(jù)輸出。本步驟所述的視頻輸出過(guò)程由以下步驟實(shí)現(xiàn)(a)視頻輸出線程阻塞于視頻輸出條件變量;(b)在視頻解碼線程激活條件變量后,計(jì)算當(dāng)前時(shí)刻的本地系統(tǒng)時(shí)鐘STC ;(c)查找視頻輸出隊(duì)列中PTS值與STC值最接近的隊(duì)列元素,計(jì)算視頻PTS與音 頻PTS的差值,如果視頻PTS值大于音頻PTS值,則重復(fù)顯示該隊(duì)列元素中的圖像,如果視 頻PTS值小于音頻PTS值,則跳過(guò)該隊(duì)列元素。步驟2與步驟3線程間的同步處理采用的是信號(hào)量機(jī)制,通過(guò)對(duì)信號(hào)的PV操作協(xié) 調(diào)解復(fù)用線程與解碼線程間的同步,其中PV操作由P操作(即申請(qǐng)資源)和V操作(即釋 放一個(gè)資源)組成。步驟2和步驟3緩沖基本流數(shù)據(jù)與解碼后的數(shù)據(jù)采用的是隊(duì)列,在隊(duì) 列尾插入數(shù)據(jù),在隊(duì)列頭操作數(shù)據(jù)。步驟3與步驟4線程間的同步處理采用的是條件變量, 即通過(guò)激活條件變量來(lái)激活相應(yīng)的輸出線程。本發(fā)明所述方法采用操作系統(tǒng)信號(hào)量、條件變量、系統(tǒng)層定義的節(jié)目參考時(shí)鐘 PCR(Program Clock Reference)和顯示時(shí)間戳PTS (Presentation Time Stamp),從而使得 音視頻在同一的本地系統(tǒng)時(shí)鐘STC (System Time clock)的參考下按照PTS時(shí)刻嚴(yán)格輸出, 從而實(shí)現(xiàn)了音視頻同步播放,不僅有效地實(shí)現(xiàn)了音視頻的同步輸出,而且不需要補(bǔ)充大量 的視頻編碼數(shù)據(jù)和音頻圖像數(shù)據(jù),從而很大程度地降低了對(duì)系統(tǒng)資源的使用,適合于嵌入 式平臺(tái);此外軟件架構(gòu)清晰,實(shí)現(xiàn)復(fù)雜度低。參閱圖3,本發(fā)明還提供一種多線程的音視頻同步控制裝置實(shí)施例,包括解復(fù)用模塊,用于將所述傳輸流或節(jié)目流拆分成音頻基本流、視頻基本流、以及分 別對(duì)應(yīng)所述音頻基本流、視頻基本流中數(shù)據(jù)元素的各自時(shí)間信息;音頻解碼器,用于解碼所述音頻基本流中的比特流,得到待輸出的音頻數(shù)據(jù);視頻解碼器,用于解碼所述視頻基本流中的比特流,得到待輸出的圖像數(shù)據(jù);輸出模塊,用于解碼后根據(jù)所述時(shí)間信息分別選擇符合本地系統(tǒng)時(shí)鐘要求的待輸 出音頻數(shù)據(jù)和圖像數(shù)據(jù)進(jìn)行輸出;圖3中輸出模塊包括音頻輸出模塊和視頻輸出模塊;同步模塊,用于選擇時(shí)間信息與本地系統(tǒng)時(shí)鐘值最接近的音頻數(shù)據(jù)和圖像數(shù)據(jù), 計(jì)算音頻數(shù)據(jù)對(duì)應(yīng)時(shí)間和圖像數(shù)據(jù)對(duì)應(yīng)時(shí)間的差值,在視頻數(shù)據(jù)對(duì)應(yīng)時(shí)間大于音頻數(shù)據(jù)對(duì) 應(yīng)時(shí)間時(shí),控制所述輸出模塊重復(fù)輸出所述視頻數(shù)據(jù)進(jìn)行顯示,在視頻數(shù)據(jù)對(duì)應(yīng)時(shí)間小于 音頻數(shù)據(jù)對(duì)應(yīng)時(shí)間時(shí),控制所述輸出模塊跳過(guò)該視頻數(shù)據(jù)對(duì)視頻播放進(jìn)行重復(fù)與跳幀處 理,使音視頻同步輸出。
      其中,為便于實(shí)現(xiàn),可以包括用于保存音頻基本流的音頻基本流隊(duì)列、用于保存視 頻基本流的視頻基本流隊(duì)列、用于保存解碼后的音頻數(shù)據(jù)的音頻輸出隊(duì)列、用于保存解碼 后的視頻數(shù)據(jù)的視頻輸出隊(duì)列。在具體實(shí)施例中,所述解復(fù)用模塊具體用于對(duì)系統(tǒng)層的傳輸流或節(jié)目流進(jìn)行解復(fù) 用,將其拆分成音頻基本流和視頻基本流后分別插入音頻基本流隊(duì)列和視頻基本流隊(duì)列, 并獲取相應(yīng)的時(shí)間戳;所述音頻解碼器和視頻解碼器具體用于分別對(duì)音頻基本流隊(duì)列和視頻基本流隊(duì) 列中的數(shù)據(jù)進(jìn)行解碼,將解碼后的音頻數(shù)據(jù)和視頻數(shù)據(jù)分別插入音頻輸出隊(duì)列和視頻輸出 隊(duì)列;所述解碼后的音頻數(shù)據(jù)為脈沖調(diào)制編碼數(shù)據(jù)。其中的輸出模塊是根據(jù)解碼后數(shù)據(jù)的時(shí)間戳與本地系統(tǒng)時(shí)鐘的差值,選擇符合輸 出時(shí)間的數(shù)據(jù)進(jìn)行輸出,并根據(jù)視頻與音頻的時(shí)間戳的差值,對(duì)視頻播放進(jìn)行跳幀處理,從 而使得音視頻同步輸出。以上所述僅為本發(fā)明的實(shí)施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā) 明說(shuō)明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運(yùn)用在其他相關(guān)的技 術(shù)領(lǐng)域,均同理包括在本發(fā)明的專利保護(hù)范圍內(nèi)。
      權(quán)利要求
      一種多線程的音視頻同步控制方法,其特征在于,包括將所述傳輸流或節(jié)目流拆分成音頻基本流、視頻基本流、以及分別對(duì)應(yīng)所述音頻基本流、視頻基本流中數(shù)據(jù)元素的各自時(shí)間信息;分別解碼所述音頻基本流和視頻基本流中的比特流,得到待輸出的音頻數(shù)據(jù)和圖像數(shù)據(jù);解碼后根據(jù)所述時(shí)間信息分別選擇符合本地系統(tǒng)時(shí)鐘要求的待輸出音頻數(shù)據(jù)和圖像數(shù)據(jù)進(jìn)行輸出,并選擇時(shí)間信息與本地系統(tǒng)時(shí)鐘值最接近的音頻數(shù)據(jù)和圖像數(shù)據(jù),計(jì)算選擇得到的音頻數(shù)據(jù)對(duì)應(yīng)時(shí)間和選擇得到的圖像數(shù)據(jù)對(duì)應(yīng)時(shí)間的差值,在所述選擇得到的視頻數(shù)據(jù)對(duì)應(yīng)時(shí)間大于選擇得到的音頻數(shù)據(jù)對(duì)應(yīng)時(shí)間時(shí),重復(fù)輸出所述視頻數(shù)據(jù)進(jìn)行顯示,在所述選擇得到的視頻數(shù)據(jù)對(duì)應(yīng)時(shí)間小于選擇得到的音頻數(shù)據(jù)對(duì)應(yīng)時(shí)間時(shí),跳過(guò)該視頻數(shù)據(jù)對(duì)視頻播放進(jìn)行跳幀處理,使音視頻同步輸出。
      2.根據(jù)權(quán)利要求1所述的多線程的音視頻同步控制方法,其特征在于將所述傳輸流或節(jié)目流拆分的步驟之前,包括創(chuàng)建解復(fù)用線程、音頻解碼線程、視頻 解碼線程、音頻同步輸出線程和視頻同步輸出線程,所述解復(fù)用線程用于將所述傳輸流或 節(jié)目流拆分;將所述傳輸流或節(jié)目流拆分的步驟之后,包括將音頻基本流插入音頻基本流隊(duì)列尾 部,將視頻基本流插入視頻基本流隊(duì)列尾部,激活解碼線程;若音頻基本流隊(duì)列或視頻基本 流隊(duì)列溢出則解復(fù)用線程掛起等待;在將音頻基本流插入音頻基本流隊(duì)列尾部、將視頻基本流插入視頻基本流隊(duì)列尾部并 激活解碼線程之后,包括啟動(dòng)音頻解碼線程和視頻解碼線程,進(jìn)行所述分別解碼音頻基本 流隊(duì)列和視頻基本流隊(duì)列中的比特流的步驟,并將解碼后的音頻數(shù)據(jù)和圖像數(shù)據(jù)和各自相 應(yīng)時(shí)間信息分別插入音頻輸出隊(duì)列和視頻輸出隊(duì)列;在將解碼后的音頻數(shù)據(jù)和圖像數(shù)據(jù)和各自相應(yīng)時(shí)間信息分別插入音頻輸出隊(duì)列和視 頻輸出隊(duì)列之后,包括根據(jù)解碼后的時(shí)間戳與本地系統(tǒng)時(shí)鐘的差值,啟動(dòng)音頻同步輸出線 程和視頻同步輸出線程。
      3.根據(jù)權(quán)利要求2所述的多線程的音視頻同步控制方法,其特征在于所述時(shí)間信息 包括時(shí)間戳。
      4.根據(jù)權(quán)利要求3所述的多線程的音視頻同步控制方法,其特征在于根據(jù)所述時(shí) 間信息分別選擇符合本地系統(tǒng)時(shí)鐘要求的待輸出音頻數(shù)據(jù)和圖像數(shù)據(jù)進(jìn)行輸出的步驟包 括計(jì)算當(dāng)前時(shí)刻的本地系統(tǒng)時(shí)鐘,查找音頻輸出隊(duì)列中時(shí)間戳值與本地系統(tǒng)時(shí)鐘值最接 近的隊(duì)列元素,作為符合本地系統(tǒng)時(shí)鐘要求的待輸出音頻數(shù)據(jù);以及計(jì)算當(dāng)前時(shí)刻的本地系統(tǒng)時(shí)鐘,查找視頻輸出隊(duì)列中時(shí)間戳值與本地系統(tǒng)時(shí)鐘值最接 近的隊(duì)列元素,作為符合本地系統(tǒng)時(shí)鐘要求的待輸出圖像數(shù)據(jù)。
      5.根據(jù)權(quán)利要求4所述的多線程的音視頻同步控制方法,其特征在于所述激活解碼 線程通過(guò)對(duì)信號(hào)量進(jìn)行申請(qǐng)資源的P操作完成。
      6.根據(jù)權(quán)利要求2所述的多線程的音視頻同步控制方法,其特征在于所述解復(fù)用線 程與音頻解碼線程、視頻解碼線程間的同步處理采用信號(hào)量機(jī)制完成,通過(guò)對(duì)信號(hào)的申請(qǐng) 資源/釋放資源的PV操作協(xié)調(diào)解復(fù)用線程與音頻解碼線程、視頻解碼線程間的同步。
      7.根據(jù)權(quán)利要求6所述的多線程的音視頻同步控制方法,其特征在于采用所述信號(hào) 量機(jī)制完成解復(fù)用線程與音頻解碼線程、視頻解碼線程間的同步處理包括音頻解碼(a)音頻解碼線程阻塞于音頻信號(hào)量,在解復(fù)用線程激活信號(hào)量后開始解 碼;(b)對(duì)音頻基本流隊(duì)列頭的音頻基本流進(jìn)行解碼;(c)將解碼后一幀音頻數(shù)據(jù)插入音頻 輸出隊(duì)列尾部,并激活音頻輸出條件變量;(d)將音頻基本流隊(duì)列中的時(shí)間戳值保存在音 頻輸出隊(duì)列中;所述音頻輸出隊(duì)列通過(guò)該隊(duì)列的長(zhǎng)度判斷其是否溢出,若音頻輸出隊(duì)列溢 出則音頻解碼線程掛起等待;視頻解碼(a)視頻解碼線程阻塞于音頻信號(hào)量,在解復(fù)用線程激活信號(hào)量后開始解 碼;(b)對(duì)視頻基本流隊(duì)列頭的視頻基本流進(jìn)行解碼;(c)將解碼后的一幀圖像數(shù)據(jù)插入視 頻輸出隊(duì)列尾部,并激活視頻輸出條件變量;(d)將視頻基本流隊(duì)列中的時(shí)間戳值保存在 視頻輸出隊(duì)列中;所述視頻輸出隊(duì)列通過(guò)該隊(duì)列的長(zhǎng)度判斷其是否溢出,若視頻輸出隊(duì)列 溢出則視頻解碼線程掛起等待。
      8.一種多線程的音視頻同步控制裝置,其特征在于,包括解復(fù)用模塊,用于將所述傳輸流或節(jié)目流拆分成音頻基本流、視頻基本流、以及分別對(duì) 應(yīng)所述音頻基本流、視頻基本流中數(shù)據(jù)元素的各自時(shí)間信息;音頻解碼器,用于解碼所述音頻基本流中的比特流,得到待輸出的音頻數(shù)據(jù);視頻解碼器,用于解碼所述視頻基本流中的比特流,得到待輸出的圖像數(shù)據(jù);輸出模塊,用于解碼后根據(jù)所述時(shí)間信息分別選擇符合本地系統(tǒng)時(shí)鐘要求的待輸出音 頻數(shù)據(jù)和圖像數(shù)據(jù)進(jìn)行輸出;同步模塊,用于選擇時(shí)間信息與本地系統(tǒng)時(shí)鐘值最接近的音頻數(shù)據(jù)和圖像數(shù)據(jù),計(jì)算 選擇得到的音頻數(shù)據(jù)對(duì)應(yīng)時(shí)間和選擇得到的圖像數(shù)據(jù)對(duì)應(yīng)時(shí)間的差值,在所述選擇得到的 視頻數(shù)據(jù)對(duì)應(yīng)時(shí)間大于選擇得到的音頻數(shù)據(jù)對(duì)應(yīng)時(shí)間時(shí),控制所述輸出模塊重復(fù)輸出所述 視頻數(shù)據(jù)進(jìn)行顯示,在所述選擇得到的視頻數(shù)據(jù)對(duì)應(yīng)時(shí)間小于選擇得到的音頻數(shù)據(jù)對(duì)應(yīng)時(shí) 間時(shí),控制所述輸出模塊跳過(guò)該視頻數(shù)據(jù)對(duì)視頻播放進(jìn)行跳幀處理,使音視頻同步輸出。
      9.根據(jù)權(quán)利要求8所述的多線程的音視頻同步控制裝置,其特征在于包括用于保存 音頻基本流的音頻基本流隊(duì)列、用于保存視頻基本流的視頻基本流隊(duì)列、用于保存解碼后 的音頻數(shù)據(jù)的音頻輸出隊(duì)列、用于保存解碼后的視頻數(shù)據(jù)的視頻輸出隊(duì)列。
      10.根據(jù)權(quán)利要求9所述的多線程的音視頻同步控制裝置,其特征在于所述解復(fù)用模塊具體用于對(duì)系統(tǒng)層的傳輸流或節(jié)目流進(jìn)行解復(fù)用,將其拆分成音頻基 本流和視頻基本流后分別插入音頻基本流隊(duì)列和視頻基本流隊(duì)列,并獲取相應(yīng)的時(shí)間戳;所述音頻解碼器和視頻解碼器具體用于分別對(duì)音頻基本流隊(duì)列和視頻基本流隊(duì)列中 的數(shù)據(jù)進(jìn)行解碼,將解碼后的音頻數(shù)據(jù)和視頻數(shù)據(jù)分別插入音頻輸出隊(duì)列和視頻輸出隊(duì) 列;所述解碼后的音頻數(shù)據(jù)為脈沖調(diào)制編碼數(shù)據(jù)。
      全文摘要
      本發(fā)明公開了一種多線程的音視頻同步控制方法及裝置,所述方法包括將所述傳輸流或節(jié)目流拆分成音頻基本流、視頻基本流、以及各自時(shí)間信息;解碼并得到待輸出的音頻數(shù)據(jù)和圖像數(shù)據(jù);根據(jù)所述時(shí)間信息分別選擇符合本地系統(tǒng)時(shí)鐘要求的待輸出音頻數(shù)據(jù)和圖像數(shù)據(jù)進(jìn)行輸出,并選擇時(shí)間信息與本地系統(tǒng)時(shí)鐘值最接近的音頻數(shù)據(jù)和圖像數(shù)據(jù),計(jì)算所述音頻數(shù)據(jù)對(duì)應(yīng)時(shí)間和圖像數(shù)據(jù)對(duì)應(yīng)時(shí)間的差值,在所述視頻數(shù)據(jù)對(duì)應(yīng)時(shí)間大于音頻數(shù)據(jù)對(duì)應(yīng)時(shí)間時(shí),重復(fù)輸出所述視頻數(shù)據(jù)進(jìn)行顯示,否則跳過(guò)該視頻數(shù)據(jù)對(duì)視頻播放進(jìn)行跳幀處理,使音視頻同步輸出。本發(fā)明不需要補(bǔ)充大量的視頻編碼數(shù)據(jù)和音頻圖像數(shù)據(jù),從而很大程度地降低對(duì)系統(tǒng)資源的使用。
      文檔編號(hào)H04N21/8547GK101984672SQ201010530498
      公開日2011年3月9日 申請(qǐng)日期2010年11月3日 優(yōu)先權(quán)日2010年11月3日
      發(fā)明者莊厝邊, 李惠卿, 王歡 申請(qǐng)人:深圳芯邦科技股份有限公司
      網(wǎng)友詢問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1