新四季網

傳輸流數據包解碼方法及裝置的製作方法

2023-06-14 16:51:21

專利名稱:傳輸流數據包解碼方法及裝置的製作方法
技術領域:
本發明涉及對多媒體數據處理領域,具體地,是一種對傳輸流數據包進行解碼的方法及裝置。
背景技術:
隨著多媒體技術的發展,在多媒體播放平臺上播放音視頻文件已經越來越普遍,現在人們已經習慣在多媒體播放平臺上觀看各種音視頻的節目。現有的多媒體播放器對多媒體音視頻文件的播放需要對傳輸流數據包進行解碼,將解碼後的數據傳輸至硬體進行播放。因此,多媒體播放平臺上通常需要設置傳輸流數據包的解碼裝置對數據包進行解碼。參見圖1,現有的傳輸流數據包解碼裝置具有傳輸流控制器(transport stream controller) 10、解碼器18以及播放控制模塊19,傳輸流控制器10內設有多條過濾通道
11、13、15,每一過濾通道內設置一個緩衝器,如過濾通道11內設置緩衝器12,過濾通道13內設置緩衝器14,過濾通道15內設置緩衝器16等。傳輸流數據包解碼裝置10工作時,接收外部輸入的數據包,如接收來自網絡或本地存儲器的數據包,這些數據包包括有視頻包、音頻包、字幕包等,不同種類的數據包使用不同的標識碼(PID,Packet Identifier)進行標識,因此需要使用傳輸流控制器10對數據包進行過濾,將數據包中的視頻包、音頻包、字幕包等過濾出來,以便使用不同的解碼方式對各種數據包進行解碼並播放。傳輸流控制器10的多個過濾通道11、13、15…分別用於接收具有指定標識碼的數據包,不同的過濾通道接收的數據包往往是具有不同的標識碼。傳輸流控制器10接收外部發送的數據包,如從路由器或數據機等接收數據包後,根據數據包的標識碼將其發送至能夠接收該數據包的過濾通道中。本文所指的某一過濾通道能夠接收某一數據包,是指某一過濾通道被分配所接收的數據包的標識碼與該數據包的標識碼相同。例如,過濾通道11被指定接收標識碼為PIDl的數據包,若傳輸流控制器10接收到的數據包的標識碼為PID1,則過濾通道11能夠接收該數據包。若傳輸流控制器10接收的數據包的標識碼為PID2,則過濾通道11不能接收該數據包。傳輸流控制器10通過不同的過濾通道對具有不同標識碼的數據包進行分離,從而將視頻包、音頻包、字幕包等分開,即實現對數據包的過濾。過濾通道接收到數據包後,播放控制模塊19並不會馬上將該數據包讀入到解碼器18中進行解碼,而是先將數據包存儲在過濾通道的緩衝器中,等到緩衝器存儲的數據包達到一定數量時,播放控制模塊19才將一幀數據讀入到解碼器18中,由解碼器對讀入的數據進行解碼。解碼器18對數據的解碼是一幀一幀地進行的,通常,一個數據包的數據長度應該是一幀數據的長度,如圖2 (a)所示。這樣,解碼器18每次解碼的數據量是一幀數據,也就是一個數據包的數據。如圖3所示,一個數據包具有對應的數據包信息,數據包信息通常包含有時間戳標誌位、時間戳、數據包數據長度等信息,數據包自身的數據可能會跟隨在數據包信息後,也可能與數據包信息分開存儲。時間戳標誌位通常是有效標誌,表示該數據包的時間戳是有效的,時間戳用於表示該數據包的數據解碼後的開始播放時間。然而,由於在信號衰減嚴重等情況下會出現碼流錯誤,導致每次發送的數據包不是一幀數據,或者傳輸流控制器不能保證每次發送的數據包是一幀數據時,如圖2 (b)或圖2 (C)所示,數據包P3的數據長度大於一幀數據的數據長度,或者數據包P4、P5的數據長度小於一幀數據的數據長度。這樣,解碼器18接收的一幀數據未必就是一個完整的數據包的數據。在這種情況下,數據包的時間戳並不是表示該數據包的第一個字節解碼後的數據開始播放時間,而是表示該數據包作為某一幀數據的第一個數據包時,解碼後的數據的開始播放時間。例如,數據包P6的時間戳並不是表示數據包P6的第一個字節解碼後的開始播放時間,而是表示在上一幀數據被解碼後,數據包P6剩餘的數據被解碼後的開始播放時間。若解碼器18對數據解碼時,仍然是獲取某一數據包的時間戳作為該數據包第一個字節解碼後的數據的開始播放時間,將導致音頻或視頻、字幕等播放錯誤,由於音頻包、 視頻包、字幕包是分別進行解碼的,這樣會導致音頻播放與視頻播放不同步,影響用戶的觀看、收聽。此外,在圖2 (b)所示的情況下,若數據包P3的前一部分數據經過第一幀數據的解碼後,剩餘的數據進行解碼時仍然以數據包P3的時間戳作為剩餘部分數據解碼後的開始播放時間,將導致剩餘部分的數據解碼後開始播放時間不正確,也會導致音頻播放與視頻播放、字幕播放等不同步的現象發生。

發明內容
本發明的主要目的是提供一種避免音頻播放與視頻播放不同步的傳輸流數據包解碼方法。本發明的另一目的是提供一種確保多媒體文件播放時音視頻同步的傳輸流數據包解碼裝置。為了實現上述的主要目的,本發明提供的傳輸流數據包解碼方法包括傳輸流控制器的過濾通道接收傳輸流數據包,將接收的數據包存儲在緩衝器中,播放控制模塊從緩衝器讀取一幀數據到解碼器,解碼器對所讀入的數據進行解碼,其中,播放控制模塊判斷讀入到解碼器的一幀數據的第一個數據包的時間戳是否有效,若有效,獲取第一個數據包的時間戳並作為解碼後的數據開始播放時間的時間戳,計算下一幀數據的開始播放時間,置第一個數據包的時間戳無效;若無效,獲取上一幀數據解碼時計算的下一幀數據的開始播放時間並作為解碼後的數據的時間戳,計算下一幀數據的開始播放時間;判斷第一個數據包的數據長度是否大於一幀數據的長度,如是,計算第一個數據包的剩餘數據長度作為下一幀數據的第一個數據包的數據長度,否則,將第一個數據包的數據長度與下一個數據包的數據長度相加,再判斷相加後的數據長度不大於一幀數據的長度時繼續加上下一個數據包的數據長度,直至計算相加後的數據長度大於一幀數據的長度;記錄當前的解碼位置,從緩衝器中讀取下一幀數據並進行解碼。由上述方案可見,播放控制模塊並不是直接以數據包的時間戳作為解碼後的數據的時間戳,只有在第一個數據包的時間戳有效的情況下才將第一個數據包的時間戳作為解碼後的數據的時間戳。而第一個數據包的時間戳被第一次獲取後,將被置為無效,若一個數據包的數據長度大於一幀數據時,該數據包被第一次讀取時將被獲取時間戳,而後續再讀取該數據包的數據時,則解碼器不再使用該數據包的時間戳,而是使用計算出來的開始播放時間,這樣確保出現碼流錯誤的情況下也能實現解碼後數據的正確播放,避免音頻的播放與視頻的播放不同步的現象。一個優選的方案是,數據包包括時間戳標誌位,播放控制模塊根據時間戳標誌位是否為有效標誌判斷時間戳是否有效。由此可見,通過判斷時間戳標誌位來判 斷該數據包的時間戳是否有效,能夠快速、準確地對數據包的時間戳有效性進行判斷。進一步的方案是,播放控制模塊判斷數據包未包含時間戳時,向數據包寫入時間戳標誌位,並置時間戳標誌位無效。可見,對於本地存儲或網絡等無法獲得時間戳信息的多媒體文件,通過在數據包信息上設置時間戳無效的標誌,能夠應用本方法對原先沒有時間戳的數據包進行解碼,擴大本方法的應用範圍。為實現上述的另一目的,本發明提供的傳輸流數據包解碼裝置包括傳輸流控制器、解碼器及播放控制模塊,傳輸流控制器具有緩衝器,用於存儲傳輸流數據包,解碼器用於接收數據包並對所接收的數據包進行解碼,其中,播放控制模塊,用於將一幀數據讀入到解碼器,其具有時間戳管理模塊,用於判斷讀入到解碼器的一幀數據的第一個數據包的時間戳是否有效,若有效,獲取第一個數據包的時間戳並作為解碼後的數據的時間戳,計算下一幀數據的開始播放時間,置第一個數據包的時間戳無效;若無效,獲取上一幀數據解碼時計算的下一幀數據的開始播放時間並作為解碼後的數據的時間戳,計算下一幀數據的開始播放時間,播放控制模塊還具有數據長度計算模塊,用於判斷第一個數據包的數據長度是否大於一幀數據的長度,如是,計算第一個數據包的剩餘數據長度作為下一幀數據的第一個數據包的數據長度,否則,將第一個數據包的數據長度與下一個數據包的數據長度相加,再判斷相加後的數據長度不大於一幀數據的長度時繼續加上下一個數據包的數據長度,直至計算相加後的數據長度大於一幀數據的長度。由上述方案可見,解碼器對數據解碼時並不是直接以數據包的時間戳作為解碼後的數據的開始播放時間,而是根據數據包的時間戳是否有效並根據時間戳的有效性選擇解碼後的數據的開始播放時間,這樣能夠避免數據包的數據長度不是一幀數據的情況下數據包解碼後的數據播放不正確的情況,從而避免音視頻播放不同步的情況。一個優選的方案是,時間戳管理模塊內設有時間戳添加模塊,用於在判斷數據包未包含時間戳時,向數據包寫入時間戳標誌位,並置時間戳標誌位無效,同時,時間戳添加模塊還用於判斷所接收的數據包信息中包含時間戳但未包含時間戳標誌位時,向傳輸到解碼器的數據包寫入時間戳並添加時間戳標誌位,並置時間戳標誌位有效。由此可見,通過在未包含時間戳的數據包上添加時間戳標誌位並將其設置成無效標誌,能夠將本裝置應用在對諸如本地存儲的多媒體文件的數據包等未包含時間戳的數據包的解碼上,擴大本裝置的應用範圍。


圖I是現有傳輸流數據包解碼裝置的結構框圖。圖2是傳輸流數據包與一幀數據的長度關係示意圖。圖3是傳輸流數據包的數據結構示意圖。圖4是本發明傳輸流數據包解碼裝置實施例的結構框圖。圖5是本發明傳輸流數據包解碼裝置解碼的數據包的結構示意圖。圖6是本發明傳輸流數據包解碼方法實施例的流程圖。以下結合附圖及實施例對本發明作進一步說明。
具體實施例方式本發明的傳輸流數據包的解碼方法可以對音頻包、視頻包、字幕包等多種不同的多媒體文件的數據包進行解碼,還可以對其他具有時間戳的傳輸流的數據包進行解碼。參見圖4,本發明的傳輸流數據包解碼裝置具有傳輸流控制器20、解碼器28以及播放控制模塊30,其中傳輸流控制器20內設有多條獨立工作的過濾通道21、23、25…,每一個過濾通道21、23、25均被設定其接收的數據包的標識碼,傳輸流控制器20接收到數據包後,按該數據包的標識碼,發送到相應的過濾通道的緩衝器中,通過這種方式將數據包中的視頻包、音頻包、字幕包等進行過濾處理。過濾通道21內設有一個緩衝器22,用於存儲過濾通道21所接收的數據包。過濾通道21接收數據包後,將數據存儲在緩衝器22中。過濾通道23、25分別設有緩衝器24、26,用於存儲所接收的數據包。由於傳輸流控制器20所接收的數據包結構往往不盡相同,因此,傳輸流控制器20會將接收的數據包進行重新打包,調整成具有相同格式的數據包,解碼器28讀取的數據包是經過重新打包後的數據包,具有相同的結構。解碼器28用於對讀入的數據進行解碼,如將數據包去掉包頭重組為PES包,再去掉PES包的包頭所剩下的數據,然後將解碼後的數據發送到硬體設備進行播放。解碼器28每次只對一幀的數據進行解碼,且一幀數據解碼後的播放時間基本上是固定的。播放控制模塊30用於將各個緩衝器中的數據讀入到解碼器28中,由解碼器28調用解碼庫29的函數對讀入的數據進行解碼,其具有時間戳管理模塊31、數據長度計算模塊33。時間戳管理模塊31用於對讀入到解碼器28的數據包的時間戳進行管理,包括將數據包的時間戳標誌位修改為無效標誌。時間戳管理模塊31內設置有時間戳添加模塊32,用於對不包含時間戳的數據包添加時間戳標誌位,並將添加的時間戳標誌位置為無效。當然,還會對包含有時間戳但未包含時間戳標誌位的數據包進行結構調整時,向該數據包寫入時間戳標誌位,並將時間戳標誌位設置為有效。數據長度計算模塊33在解碼器28每一次解碼一幀數據後,計算解碼的數據包的數據長度與一幀數據的數據長度關係,並由此計算下一幀數據的第一個數據包的數據長度,或者將下一個數據包的數據長度與第一個數據包的數據長度相加,再進行判斷。解碼庫29是多個解碼函數的集合,播放控制模塊30將一幀數據讀入到解碼器28後,應用解碼庫29內的解碼函數對數據進行解碼。下面結合圖5與圖6說明傳輸流數據包解碼裝置的工作過程。假設某一緩衝器內存儲有多個數據包,數據包的結構如圖5所示,數據包PU、P12、P14的數據長度較短,短於一幀數據的長度,而數據包P13的長度較長,長於一幀數據的長度。第一幀數據從第一個數據包Pll開始,包括數據包P11、P12以及第三個數據包P13的前一部分,第二幀數據包括數據包P13的中間一部分,第三幀數據包括數據包P13後一部分以及數據包P14。每一幀數據的長度大致相等,且每一幀數據的播放時間固定。在數據包P11、P12、P13、P14未被讀入解碼器28前,均包含有時間戳標誌位、時間戳,且時間戳標誌位均為有效標誌。時間戳標誌位可以使用一位二進位數表示,如使用二進位數「I」表示有效標誌,使用二進位數「O」表示無效標誌。或者,時間戳標誌位設定為一個字節的長度,這並不影響本發明的實施。參見圖6,傳輸流數據包解碼裝置工作時,播放控制模塊30首先執行步驟SI,將一幀數據讀入到解碼器28中,如開始時將第一幀數據讀入到解碼器28,即數據包P11、P12全部數據以及數據包P13的前一部分數據被讀入到解碼器28中。當然,播放控制模塊30在執行步驟SI時,需要判斷被讀入解碼器28的數據包是否包含時間戳以及時間戳標誌位,若 未包含時間戳,則該數據包當然不會包含時間戳標誌位,此時需要在數據包中添加時間戳標誌位,並將時間戳標誌位設置為無效。若數據包包含了時間戳但未包含時間戳標誌位,則向數據包添加時間戳標誌,並置時間戳標誌位有效。然後,時間戳管理模塊31判斷第一個數據包的時間戳是否有效,即執行步驟S2。對於第一幀數據,時間戳管理模塊31判斷數據包Pll的時間戳標誌位是否為有效標誌,如有效,表示數據包Pll的時間戳有效,執行步驟S3,若無效,執行步驟S4。當然,對於本地存儲的多媒體文件,其數據包可能不包含時間戳,也就不包含時間戳標誌位,時間戳管理模塊31判斷數據包不包含時間戳後,由時間戳添加模塊32在數據包中添加時間戳標誌位,並將時間戳標誌位置為無效標誌。這樣,時間戳管理模塊31讀取該數據包的時間戳標誌位時,即可判斷該數據包的時間戳無效。步驟S3中,解碼器28應用解碼庫29內的解碼函數對讀入到解碼器的一幀數據進行解碼,並且獲取第一個數據包的時間戳,即獲取數據包Pll的時間戳,並將數據包Pii的時間戳作為第一幀數據解碼後的數據的時間戳,也就是解碼後的數據的開始播放時間。然後,時間戳管理模塊31將第一個數據包的時間戳置為無效,即將數據包Pll的時間戳標誌位置為無效標誌,並計算下一幀數據的開始播放時間。由於每一幀數據的播放時間固定,因此在確定本幀數據解碼後的開始播放時間,即可以計算出下一幀數據的開始播放時間,計算方法是將本幀數據解碼後的開始播放時間與一幀數據的播放時長相加。若第一幀數據的開始播放時間為PTS1,計算的第二幀數據的開始播放時間PTS2=PTS1+PTS,其中PTS是一幀數據的播放時長。然後,數據長度計算模塊33執行步驟S5,計算第一個數據包的數據長度是否大於一幀數據的數據長度。對於第一幀數據,由於數據包Pll的數據長度短於一幀數據長度,因此執行步驟S6,將下一個數據包的數據長度與第一個數據包的數據長度相加,即將數據包Pll的數據長度與數據包P12的數據長度相加,再次執行步驟S5,判斷相加後的數據長度是否大於一幀數據的數據長度。由於判斷結果仍然是小於一幀數據長度,再次執行步驟S6,將數據包P13的數據長度與數據包P11、P12的數據長度相加,再次執行步驟S5。將數據包PU、P12以及P13的數據長度相加後,執行步驟S5時,判斷相加後的數據長度大於一幀數據長度,執行步驟S7,計算下一幀數據的第一個數據包的數據長度。由於第一幀數據包括數據包PU、P12的全部數據以及數據包P13的部分數據,因此下一幀數據的第一個數據包為數據包P13,計算第二幀數據的第一個數據包的數據長度是將數據包PlU P12、P13相加後的數據長度視為第一幀數據的第一數據包的數據長度,計算該數據包的剩餘數據長度,也就是將數據包PU、P12、P13的數據長度總和減去一幀數據的長度,剩餘的數據長度為第二幀數據的第一個數據包的數據長度。可見,如果計算一幀數據的第一個數據包的數據長度短於一幀數據的數據長度時,將逐一地將後面的數據包的數據長度加上,並在每次加上一個數據包的數據長度後,計算一次相加後的數據長度是否大於一幀數據長度,如果還是小於,繼續加上下一個數據包的數據長度,直至判斷相加後的數據長度大於一幀數據的數據長度為止。這樣是為了確保精確地計算出對本幀數據包含的數據包的數量,並計算出對那些數據包的數據進行了解碼,而最後一個數據包的數據是否全部被解碼,最後一個數據包還剩餘多少數據未被解碼。然後,執行步驟S8,記錄當前的解碼位置,更新當前解碼位置所在的數據包信息的 數據長度,更新已經解碼用過的內存空間,為循環填入數據包做準備。最後,執行步驟S9,判斷是否所有的數據包均解碼完畢,如仍有未被解碼的數據包,返回執行步驟SI。對第一幀數據解碼完畢後,只有第一個數據包的時間戳標誌位被置為無效,後續的所有數據包的時間戳均為有效,即數據包P12、P13、P14的時間戳均為有效。對第二幀數據進行解碼時,播放控制模塊30將第二幀數據讀入解碼器,然後執行步驟S2,由於第二幀數據的第一個數據包為P13,且數據包的時間戳為有效,因此執行步驟S3,對數據進行解碼的同時,獲取數據包P13的時間戳作為解碼後的數據的時間戳,並將數據包P13的時間戳置為無效,同時計算第三幀數據的開始播放時間。可見,第二幀數據解碼後的開始播放時間並不是使用第一幀數據解碼時所計算的第二幀數據的開始播放時間PTS2,而是使用數據包P13的時間戳作為開始播放時間,這是因為數據包P13的時間戳有效。因此,如一幀數據的第一個數據包的時間戳有效,則使用第一個數據包的時間戳作為解碼後的數據的開始播放時間,只有在第一個數據包的時間戳無效的情況下,才使用上一幀數據解碼時計算得到的下一幀數據的開始播放時間作為解碼後的數據的開始播放時間。計算第三幀數據的開始播放時間是將數據包P13的時間戳與一幀數據的播放時長相加,獲得第三幀數據的開始播放時間PTS3。接著,執行步驟S5,由於經過第一幀數據解碼後,計算的第二幀數據的第一個數據包的數據長度是數據包P13去除包含在第一幀數據內的部分,剩餘的部分都是被視為第二幀數據的第一個數據包的數據長度,即數據包P13在第二幀數據以及第三幀數據內的數據長度都視為是第二幀數據的第一個數據包的數據長度。此時,第二幀數據的第一個數據包的數據長度大於一幀數據的數據長度,執行步驟S7,計算第三幀數據的第一個數據包的數據長度,即將視為第二幀數據的第一個數據包的數據長度減去一幀數據的數據長度,計算出來的第三幀數據的第一個數據包的數據長度就是數據包P13位於第三幀數據內的數據長度。最後,執行步驟S8、S9,記錄當前的解碼位置後,返回執行步驟SI,將第三幀數據讀入解碼器28。在執行步驟S2時,由於第三幀數據的第一個數據包為數據包P13,且數據包P13的時間戳標誌位已經被置為無效,因此執行步驟S4,對數據進行解碼的同時,獲取第二幀數據解碼時計算的第三幀數據的開始播放時間PST3作為解碼後數據的時間戳,即解碼後數據的開始播放時間。然後,使用與第一幀數據解碼時相同的方法計算下一幀數據的開始播放時間。接著,執行步驟S5,判斷第一個數據包的數據長度是否大於一幀數據,顯然,數據包P13剩餘的數據長度小於一幀數據長度,此時需要將數據包P14的數據長度加上,再次執行步驟S5的判斷。若數據包P13剩餘的數據長度與數據包P14的數據長度相加後,剛好等於一幀數據的數據長度,則仍然判斷數據包的數據長度不大於一幀數據的數據長度,需要再將下一數據包的數據長度加上,再執行步驟S5。由於第三幀數據並不包括數據包P14的下一個數據包(假設為數據包P15)的數據,因此在執行步驟S7時,數據包P15的數據長度即為第四幀數據的第一個數據包的數據長度。當第四幀數據進行解碼時,將從數據包P15的第一個字節開始解碼,數據包P15的時 間戳即為第四幀數據解碼後的開始播放時間。最後,執行步驟S8、S9,在判斷所有的數據包均解碼完畢後,退出解碼流程。本實施例中,每一個緩衝器均是循環存儲,當緩衝器中某一數據包的數據被讀取並解碼後,相應數據包的存儲空間將被釋放,新的數據包可以存儲到該存儲空間。從上述方案可見,傳輸流數據包解碼裝置並不是固定地以每一個數據包的時間戳作為解碼後的數據的開始播放時間,而是根據每一個數據包的時間戳標誌位是否有效來決定是否使用該數據包的時間戳,一旦該數據包的時間戳無效,則使用上一幀數據解碼時所計算的下一幀數據的時間戳作為解碼後的數據開始播放時間。此外,由於對每一幀數據進行解碼均計算下一幀數據的開始播放時間,因此確保每一幀數據的解碼均能獲得一個有效的時間戳。當然,上述實施例僅是本發明較佳的實施方式,實際應用時,還可以有更多的改變,例如,時間戳管理模塊並不單獨設置在播放控制模塊內,而是將其設置在解碼庫內,當播放控制模塊調用解碼庫的解碼函數時,時間戳管理模塊自動執行相應的操作;或者,將時間戳管理模塊設置在解碼庫的某一解碼函數內,解碼函數對解碼器的數據進行解碼的同時,時間戳管理模塊自動地對數據包的時間戳進行更新,這樣的改變也能實現本發明的目的。實際應用時,還可以不要時間戳標誌位,只用時間戳值來標示時間戳和時間戳是否有效,如果有時間戳,我們賦值時間戳值,如果沒有時間戳,我們賦值時間戳值為負值(例如-1),這樣,通過判斷時間戳正負就知道時間戳是否有效,並獲取相應的時間戳。即時間戳值既有標示時間戳的含義,也標示是否有效的含義,因為時間戳的數值一定是正值。此外,還可以使用特定的數值來表示時間戳無效,如使用時間戳不可能出現的數值,例如超出24小時或超出60分鐘、超出60秒鐘的計時方法,即時間戳表示為61秒鐘,這也是實際的時間戳不可能出現的表示方法,使用這樣特定的數值表示時間戳無效。最後需要強調的是,本發明不限於上述實施方式,如過濾通道數量的改變、傳輸流數據包類型的改變等變化也應該包括在本發明權利要求的保護範圍內。
權利要求
1.傳輸流數據包解碼方法,包括 傳輸流控制器的過濾通道接收傳輸流數據包,將接收的所述數據包存儲在緩衝器中,播放控制模塊從所述緩衝器讀取一幀數據到解碼器,所述解碼器對所讀入的數據進行解碼; 其特徵在於 所述播放控制模塊判斷讀入到所述解碼器的所述一幀數據的第一個數據包的時間戳是否有效,若有效,獲取所述第一個數據包的時間戳並作為解碼後的數據開始播放時間的時間戳,計算下一幀數據的開始播放時間,置所述第一個數據包的時間戳無效;若無效,獲取上一幀數據解碼時計算的所述下一幀數據的開始播放時間並作為解碼後的數據的時間戳,計算下一幀數據的開始播放時間; 判斷所述第一個數據包的數據長度是否大於所述一幀數據的長度,如是,計算所述第一個數據包的剩餘數據長度作為所述下一幀數據的第一個數據包的數據長度,否則,將所述第一個數據包的數據長度與下一個數據包的數據長度相加,再判斷相加後的數據長度不大於所述一幀數據的長度時繼續加上下一個數據包的數據長度,直至計算相加後的數據長度大於所述一幀數據的長度; 記錄當前的解碼位置,從所述緩衝器中讀取下一幀數據並進行解碼。
2.根據權利要求I所述的傳輸流數據包解碼方法,其特徵在於 所述數據包包括時間戳標誌位,所述播放控制模塊根據所述時間戳標誌位是否為有效標誌判斷所述時間戳是否有效。
3.根據權利要求2所述的傳輸流數據包解碼方法,其特徵在於 置所述第一個數據包的時間戳無效的步驟是將所述第一個數據包的時間戳標誌位置為無效標誌。
4.根據權利要求I所述的傳輸流數據包解碼方法,其特徵在於 所述播放控制模塊判斷所述數據包的時間戳是否有效前,如判斷所述數據包未包含時間戳時,向所述數據包寫入時間戳標誌位,並置所述時間戳標誌位無效。
5.根據權利要求I所述的傳輸流數據包解碼方法,其特徵在於 所述播放控制模塊判斷所述數據包的時間戳是否有效前,如判斷所述數據包包含時間戳但未包含時間戳標誌位時,向所述數據包寫入時間戳標誌位,並置所述時間戳標誌位有效。
6.根據權利要求I至5任一項所述的傳輸流數據包解碼方法,其特徵在於 計算所述下一幀數據的開始播放時間的步驟是將本幀數據的開始播放時間與一幀數據的播放時長相加。
7.根據權利要求6所述的傳輸流數據包解碼方法,其特徵在於 所述本幀數據的開始播放時間是在第一個數據包的時間戳有效情況下的第一個數據包的時間戳或者在第一個數據包的時間戳無效的情況下獲取的上一幀數據解碼時計算的所述下一幀數據的開始播放時間。
8.傳輸流數據包解碼裝置,包括 傳輸流控制器,具有緩衝器,用於存儲傳輸流數據包; 解碼器,用於接收所述數據包並對所接收的數據包進行解碼;其特徵在於 播放控制模塊,用於將一幀數據讀入到所述解碼器,其具有 時間戳管理模塊,用於判斷讀入到所述解碼器的所述一幀數據的第一個數據包的時間戳是否有效,若有效,獲取所述第一個數據包的時間戳並作為解碼後的數據的時間戳,計算下一幀數據的開始播放時間,置所述第一個數據包的時間戳無效;若無效,獲取上一幀數據解碼時計算的所述下一幀數據的開始播放時間並作為解碼後的數據的時間戳,計算下一幀數據的開始播放時間; 數據長度計算模塊,用於判斷所述第一個數據包的數據長度是否大於所述一幀數據的長度,如是,計算所述第一個數據包的剩餘數據長度作為所述下一幀數據的第一個數據包的數據長度,否則,將所述第一個數據包的數據長度與下一個數據包的數據長度相加,在判斷相加後的數據長度不大於所述一幀數據的長度時繼續加上下一個數據包的數據長度,直至計算相加後的數據長度大於所述一幀數據的長度。
9.根據權利要求8所述的傳輸流數據包解碼裝置,其特徵在於 所述解碼器內設有解碼庫,用於向所述解碼器提供解碼函數,所述時間戳管理模塊設置於所述解碼庫內。
10.根據權利要求8或9所述的傳輸流數據包解碼裝置,其特徵在於 所述時間戳管理模塊內設有時間戳添加模塊,用於在判斷所述數據包未包含時間戳時,向所述數據包寫入時間戳標誌位,並置所述時間戳標誌位無效,或者在判斷所述數據包包含時間戳但未包含時間戳標誌位時,向所述數據包寫入時間戳標誌位,並置所述時間戳標誌位有效。
全文摘要
本發明提供一種傳輸流數據包解碼方法及裝置,該方法包括傳輸流控制器收傳輸流數據包,將數據包存儲在緩衝器中,讀取一幀數據到解碼器由解碼器進行解碼,播放控制模塊判斷讀入到解碼器的一幀數據的第一個數據包的時間戳是否有效,若有效,獲取第一個數據包的時間戳並作為解碼後的數據的時間戳,計算下一幀數據的開始播放時間,置第一個數據包的時間戳無效;若無效,獲取上一幀數據解碼時計算的下一幀數據的開始播放時間並作為解碼後的數據的時間戳,計算下一幀數據的開始播放時間;並對數據包的數據長度進行判斷,記錄當前的解碼位置並對下一幀數據進行解碼。該裝置使用上述方法對數據包進行解碼。本發明能確保音頻包與視頻包解碼後同步播放。
文檔編號H04N21/433GK102868930SQ20121032833
公開日2013年1月9日 申請日期2012年9月6日 優先權日2012年9月6日
發明者張林山 申請人:珠海全志科技股份有限公司

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀