專利名稱:流媒體數據的緩存處理方法
技術領域:
本發明涉及通信領域,具體而言,涉及一種流々某體凄t據的緩存 處理方法。
背景技術:
隨著通信技術的發展,能夠向終端設備提供的通信帶寬越來越 大,多媒體在移動終端上得到了飛速的發展,手機電視、流媒體等 業務逐漸在成熟起來,導致傳送的lt據包必然是大量的。而如4可對 這些數據包進行緩存,并使得能夠方便的獲取這些數據,就變得非 常重要。圖1示出了實現流々某體業務的系統示意圖。在該業務系統中, 包含有流媒體業務管理平臺,該平臺主要用來管理現有的流媒體服務器資源,如用戶權限、資費、信息發布等功能;數據存儲系統可 以包含該業務相關的各種信息的存儲;流媒體服務器是用戶通過終 端訪問網頁的流々某體資源的實際設備,通過該服務器向用戶終端發 送流々某體音一見頻凄t據以及相關的消息,如RTP ( Real Time Protocol , 實時切4義)凄t才居包、RTCP (Real Time Control Protocol,實時4空制 協議)數據包等。在現有的流:煤體業務系統中,運營商管理者通過 業務管理平臺生成網頁鏈接和實際的媒體的關聯關系,用戶通過終 端登錄運營商的流々某體業務網頁,可以點擊期望的鏈4妄,終端上啟 動流媒體播放器,播放器主動發起請求,得到音視頻數據后進行解 碼并顯示。6圖2示出了流々某體業務的RTP包結構。包含RTP包頭和教:據 體payload。 RTP包頭中包含了序列號sequence number,這是凄史才居 包有序的依據。圖3示出了流媒體業務系統的緩沖區數據生產消費 示意圖。將從網絡上獲取的流媒體數據包送入緩沖區進行緩存,然 后再將數據包送入如解碼器之類的器件進行相關處理。從網絡(有 線或者無線)上獲取的流媒體數據包雖然基本上是有序的,但是由 于網絡的復雜性,從流媒體服務器上獲取的數據包并不一定能夠保 i正在終端設備^妄收端一定是有序的。在接收端消費這些緩存的數據包時,由于不加以排序,導致實 現的多媒體業務產生錯幀和亂幀的現象,給客戶不好的體驗。發明內容本發明旨在4是供一種流々某體凄t據的緩存處理方法,以解決緩存 數據包不排序導致的多媒體業務錯幀和亂幀的問題。根據本發明的一個方面,提供了 一種流媒體數據的緩存處理方 法,包括以下步驟順序地接收流媒體業務的多個數據包;將數據 包按照其在流媒體業務中的順序有序地緩存于緩沖區的數據隊列 中;先進先出地從數據隊列中讀取數據包,以用于流媒體業務的消 費。優選的,將數據包按照其在流々某體業務中的順序有序地緩存于 緩沖區中具體包括設置緩沖區包括主緩沖區和輔助緩沖區;判斷 當前接收的數據包是否為晚到的數據包;如果是晚到的,則將當前 接收的數據包有序地緩存于輔助緩沖區的數據隊列中;如果不是晚 到的,則將當前接收的數據包增加到主緩沖區中的數據隊列的隊尾。優選的,凄t據包包括指示其在流々某體業務中的順序的序列號; 判斷當前接收的數據包是否為晚到的數據包具體包括判斷當前接收的數據包的序列號是否小于主緩沖區的最后 一 個數據包的序列號;如果小于,則判定當前接收的數據包是晚到的數據包;否則判 定當前接收的數據包不是晚到的數據包。優選的,將當前接收的數據包有序地緩存于輔助緩沖區的數據 隊列中具體包括判斷當前接收的數據包的序列號是否大于輔助緩 沖區的最后一個數據包的序列號;如果大于,則將當前接收的數據 包增加到輔助緩沖區的數據隊列的隊尾;否則,將當前接收的數據 包插入到輔助緩沖區的數據隊列中其序列號大于當前接收的數據包 的序列號的數據包之前。優選的,先進先出地從數據隊列中讀取數據包具體包括比較 主緩沖區的數據隊列隊首的數據包的序列號與輔助緩沖區的數據隊 列隊首的數據包的序列號的大小;讀取其中序列號較小的數據包作 為當前的凄t據包輸出。優選的,將當前接收的數據包增加到主緩沖區中的數據隊列的 隊尾具體包括將主緩沖區的數據隊列的數據包以序列號的升序方 式連續地存^ft于主緩沖區的空間上;或者采用鏈表的方式實現主緩 沖區的數據隊列,其中將主緩沖區的數據隊列的數據包以序列號的 升序方式進行鏈接。優選的,將當前接收的數據包有序地緩存于輔助緩沖區的數據 隊列中具體包括將輔助緩沖區的數據隊列的數據包以序列號的升 序方式連續地存儲于輔助緩沖區的空間上;或者將輔助緩沖區的數 據隊列的數據包存儲于空間上,建立映射數據包的索引表,以數據 包的序列號的升序方式排列索引表的索引;或者采用鏈表的方式實 現輔助緩沖區的數據隊列,其中將輔助緩沖區的數據隊列的數據包 以序列號的升序方式進行鏈接。優選的,鏈表采用單向鏈表或者雙向鏈表。優選的,流媒體業務包括視頻業務,設置主緩沖區和輔助緩沖區具體包括設置主緩沖區中包括視頻主緩沖區,設置輔助緩沖區 中包括視頻輔助緩沖區;將當前接收的數據包有序地緩存于輔助緩 沖區的數據隊列中具體包括將當前接收的數據包有序地緩存于視 頻輔助緩沖區的數據隊列中;將當前接收的數據包增加到主緩沖區 中的數據隊列的隊尾具體包括將當前接收的數據包增加到視頻主 緩沖區中的數據隊列的隊尾。優選的,流J 某體業務包括音頻業務,設置主緩沖區和輔助緩沖 區具體包括設置主緩沖區中包括音頻主緩沖區,設置輔助緩沖區 中包括音頻輔助緩沖區;將當前接收的數據包有序地緩存于輔助緩 沖區的數據隊列中具體包括將當前接收的數據包有序地緩存于音 頻輔助緩沖區的數據隊列中;將當前接收的數據包增加到主緩沖區 中的數據隊列的隊尾具體包括將當前接收的數據包增加到音頻主 緩沖區中的數據隊列的隊尾。上述的緩存處理方法因為對緩存數據包采取了排序,所以克服 了緩存數據包不排序導致的多媒體業務錯幀和亂幀的問題,能夠實 現流暢的多媒體業務,給客戶帶來更好的體驗。
此處所說明的附圖用來4是供對本發明的進一步理解,構成本申 :清的一部分,本發明的示意性實施例及其i兌明用于解釋本發明,并 不構成對本發明的不當限定。在附圖中圖1示出了實現流々某體業務的系統示意圖;圖2示出了流i某體業務的RTP包結構;圖3示出了流媒體業務系統的緩沖區數據生產消費示意圖;圖4示出了根據本發明實施例的流媒體數據的緩存處理方法的 流程圖;圖5示出了根據本發明實施例的流々某體數據緩沖區結構圖;圖6示出了根據本發明實施例的流媒體數據包緩存結構圖一;圖7示出了 4艮據本發明實施例的流々某體數據包緩存結構圖二;圖8示出了根據本發明實施例的流媒體數據包緩存結構圖三;圖9示出了根據本發明實施例的流媒體數據包緩存結構圖四;圖10示出了根據本發明實施例的流媒體數據包緩存結構圖五;圖11示出了根據本發明實施例的流媒體數據包緩存結構圖六。
具體實施方式
下面將參考附圖并結合實施例,來詳細il明本發明。圖4示出了根據本發明實施例的流媒體數據的緩存處理方法的 流禾呈圖,包4舌以下步-驟步驟S10,順序地*接收流々某體業務的多個數據包;步驟S20,將數據包按照其在流々某體業務中的順序有序地緩存 于纟爰沖區的邀:據隊列中;步驟S30,先進先出地從數據隊列中讀取數據包,以用于流媒 體業務的消費。該緩存處理方法將從流媒體服務器上獲取的音纟見頻數據包按照 一種基本有序的順序緩存在緩沖區中(例如,在這里流々某體數據包為RTP包),此H沖區可以循環利用,來存方欠流4某體凄t據。這樣在 獲取數據包的時候,數據包的存放是有序的,可以按照先進先出的 順序從緩沖區中獲取就能保準數據包在時間上順序。因為對緩存數 據包采取了排序,所以克服了緩存數據包不排序導致的多4某體業務 錯幀和亂幀的問題,能夠實現流暢的多媒體業務,給客戶帶來更好 的體驗。優選的,步驟S20具體包括設置緩沖區包括主緩沖區和輔助 緩沖區;判斷當前接收的數據包是否為晚到的數據包;如果是晚到 的,則將當前接收的數據包有序地緩存于輔助緩沖區的數據隊列中; 如果不是晚到的,則將當前接收的數據包增加到主緩沖區中的凄丈據 隊列的隊尾。在接收端為了有序地緩存流々某體的數據包,需要在接收端對這 些數據包進行全部排序。然而,數據包的數量是大量的,排序所消 耗的資源必然是大的,而對于手持設備終端比如手機這樣的電子產 品,由于它的資源比較緊張,所以如果采用不當的排序方法,將導 致這種排序耗時較多,甚至無法進行。從網絡上獲取的流^某體數據 包雖然不能保證所有的流々某體凄t據包都是有序的,4旦是大部分的流 媒體數據包還是有序的,晚到的數據包在大多數情況下占的比重不 會特別大。因此,該優選實施例中的排序方法設置緩沖區包括主緩 沖區和輔助緩沖區,采用輔助緩沖區來處理亂序的數據包,所以效 率較高,能夠很好地解決上述的排序問題。圖5示出了根據本發明實施例的流媒體數據緩沖區結構圖;流 媒體的音視頻分別有屬于自己的主緩沖區和輔助緩沖區,主緩沖區 用來存儲有序的數據,輔助緩沖區用來存儲晚到的數據包。并在亂 序的情況下,對緩沖區中的數據包進行排序。在上述的優選實施例中,將從網絡上獲取的流媒體音視頻RTP 數據包分別進行緩存,音視頻數據的緩沖區分別有主緩沖區和輔助 緩沖區組成,兩者是相對來說的。將那些從網絡上傳遞過來的有序 流媒體RTP數據包緩存在主緩沖區中,那些晚到的流媒體數據包緩 存在輔助緩沖區中,在需要的情況下,對輔助緩沖區中的數據包進 行排序,將其變為有序緩存。這樣無論是主緩沖區還是輔助緩沖區 的數據包,均是有序存儲。在消費這些流媒體數據包的時候,只需 要從緩沖區或者輔助緩沖區中獲取最早的流媒體數據包即可,并釋 ;改相應的纟爰沖區空間,實現^爰沖區的循環Y吏用。主纟爰沖區和輔助纟爰 沖區組成一個基本有序的數據緩沖管理機制。優選的,數據包(例如,在這里流纟某體凄t據包為RTP包)包括 指示其在流々某體業務中的順序的序列號(Sequence Number );判斷 當前接收的數據包是否為晚到的數據包具體包括判斷當前接收的 數據包的序列號是否小于主緩沖區的最后一個數據包的序列號;如 果小于,則判定當前接收的數據包是晚到的數據包;否則判定當前 接收的數據包不是晚到的數據包。該優選實施例利用序列號來判斷 接收的數據包是否為錯序數據包,簡單易行。優選的,將當前接收的數據包有序地緩存于輔助緩沖區的數據 隊列中具體包括判斷當前接收的數據包的序列號是否大于輔助緩 沖區的最后一個數據包的序列號;如果大于,則將當前接收的數據 包增加到輔助緩沖區的數據隊列的隊尾;否則,將當前接收的數據 包插入到輔助緩沖區的數據隊列中其序列號大于當前接收的數據包 的序列號的數據包之前。這里釆用了隊列數據結構中的插入操作, 很簡單地實現了數椐包的排序。優選的,先進先出地從數據隊列中讀取數據包具體包括比較12列隊首的數據包的序列號的大小;讀取其中序列號較d 、的數據包作 為當前的數據包輸出。該讀取操作簡單易行。
優選的,將當前接收的數據包增加到主緩沖區中的數據隊列的 隊尾具體包括主緩沖區的空間是連續的,將主緩沖區的數據隊列 的數據包以序列號的升序方式連續地存儲于主緩沖區的空間上;或 者采用鏈表的方式實現主緩沖區的數據隊列,其中將主緩沖區的數 據隊列的數據包以序列號的升序方式進行鏈接。
優選的,將當前接收的數據包有序地緩存于輔助緩沖區的數據 隊列中具體包括輔助緩沖區的空間是連續的,將輔助緩沖區的數
間上;或者輔助緩沖區的空間是連續的,將輔助緩沖區的數據隊列 的數據包存儲于空間上,建立映射數據包的索引表,以數據包的序 列號的升序方式排列索引表的索引;或者采用鏈表的方式實現輔助 緩沖區的數據隊列,其中將輔助緩沖區的數據隊列的數據包以序列 號的升序方式進4于鏈4妄。
優選的,鏈表釆用單向鏈表或者雙向鏈表。
優選的,流媒體業務包括視頻業務,設置緩沖區包括主緩沖區 和輔助緩沖區具體包括設置主緩沖區包括視頻主緩沖區,設置輔 助緩沖區包括視頻輔助緩沖區;將當前接收的數據包有序地緩存于 輔助緩沖區的數據隊列中具體包括將當前接收的數據包有序地緩 存于視頻輔助緩沖區的數據隊列中;
將當前接收的數據包增加到主緩沖區中的數據隊列的隊尾具體 包括將當前接收的凄t據包增加到4見頻主緩沖區中的數_據隊列的隊 尾。優選的,流々某體業務包括音頻業務,設置緩沖區包括主緩沖區
和輔助緩沖區具體包括設置主緩沖區包括音頻主緩沖區,設置輔 助緩沖區包括音頻輔助緩沖區;將當前接收的數據包有序地緩存于 輔助緩沖區的數據隊列中具體包括將當前接收的數據包有序地緩 存于音頻輔助緩沖區的凝:據隊列中;
將當前接收的數據包增加到主緩沖區中的數據隊列的隊尾具體 包括將當前接收的數據包增加到音頻主緩沖區中的數據隊列的隊 尾。
第 一種實施方式,采用主緩沖區和輔助緩沖區的內存空間均分 別為連續存儲空間連續。圖6示出了根據本發明實施例的流媒體數 據包緩存結構圖 一,主緩沖區和輔助緩沖區的內存存儲的空間均是 連續的,存4諸的凄史才居包#4居sequence number的升序方式進4亍存4諸。 圖6中,Rtp Packet size的內存空間為32位,C為下一個凄t據節點 屬是否是連續存放的,占用1位,0表示不連續,l表示連續。
下面進一步進4亍詳細的闡述
第一步該業務系統具有業務管理平臺、數據存儲系統(設備)、 流媒體服務器,通信傳輸系統,終端接收設備;業務管理平臺用來 管理流媒體業務的各種信息和狀態;數據存儲系統用來保存管理的 信息、通信傳輸系統用來將相關服務器和終端的信息在兩者之間傳 遞,以便形成相互之間的聯系;終端接收設備是用戶用來發送、接 收、顯示的設備,用來接收通過網絡傳輸過來的流媒體RTP數據包。
第二步終端設備根據流媒體片源的信息,如當前的流媒體片 源是否同時包含音視頻數據。(以下以同時包含音視頻數據為實施方 法,僅僅包含音頻數據或者視頻數據的實施方法類似)。如果同時包 含音視頻數據,則分別為音視頻數據創建主緩沖區和輔助緩沖區,主緩沖區和輔助》爰沖區的內存空間均分別為連續的內存空間。在這
一步驟中分配連續緩沖區可以以一定大小的RTP包大小的單位進行 分配一定數量的內存空間,也可以以其他的方式進行分配處理,分 配的內存空間應當夠使用。
第三步配置音視頻緩沖區的狀態信息。比如音頻主緩沖區 的大小audio_pri_buf—size,音頻主1£沖區的起始4立置audio_pri—buf, 音頻主纟爰沖區的有歲丈凄t:悟的大小audio_pri—data—size,音頻的主纟爰沖 區的凄t據索引^f立置audio_pri_data—index,音頻的空閑主》爰沖區的索 引位置audio_pri—free—index,音頻主緩沖區最后一個數據包的序列 號audio_pri—last—s叫(在音頻主i爰沖區中最大的一個序列號);音頻 的輔助纟爰沖區的大小audio_sec—buf—size,音頻輔助緩沖區的起始位 置audio—sec_buf,音步貞專乾S力的有效凄t凈居的大小audio—sec—data—size, 音頻的輔助纟爰沖區的數據索引位置audio—sec_data—index,音頻的空 閑輔助緩沖區的索引位置audio—sec_free_index,音頻輔助緩沖區最 后一個凄t據包的序列號audio_sec—last—s叫(在音頻輔助緩沖區中最 大的一個序列號)。 一見頻的主緩沖區的大小video_pri—buf—size, 一見頻 主緩沖區的起始位置video_pri—buf, -現頻的主緩沖區的數據索引位 置video_pri—data—index ,禍L頻的空閑主l£沖區的索引^立置 video_pri_free—index , #見步貞主l£沖區的有-爻#:寺居的大小 video_pri—data—size , 4見頻主纟爰沖區最后 一 個#t才居包的序歹'J號 video_pri—last—seq (在#見頻主1£沖區中最大的一個序列號);^見頻的 輔助緩沖區的大小video—sec—buf—size,朝L頻輔助鄉爰沖區的起始^f立置 video—sec—buf ,:視頻輔助緩沖區的有效數據的大小 video—sec—data—size , #見頻的輔助妾爰沖區的凝才居索引4立置 video—sec—datajndex , 賴L頻的空閑輔助纟爰沖區的索引4立置 video—sec_free—index ,桶L頻豐翁助H沖區最后 一 個凄t寺居包的序列號 video—secjast—s叫(在^L頻輔助《爰沖區中最大的 一個序列號);;故處 理過最近的一個音頻凄t據包的序列號audio_processed—seq,以及#皮處理過最近的一個^L頻凄t據包的序列號video_processed_seq。(其中 數據索引位置指的是在緩沖區中下一個有效數據包的位置,空閑緩 沖區索引位置指的是緩沖區中可以存放數據的起始位置,以下步驟 中沿用這些i兌法和名稱、)。
第四步將從網路中獲取的RTP包緩存到緩沖區中,下面以存 儲音頻數據包為準來進行闡述,視頻數據包的緩存和處理機制類似。 在這一 步驟中,對流i某體數據包節點進行緩存的時候可以以同樣大 小的內存單位進行緩存,也可以以實際大小進行緩存處理,處理過 程基本類似。下面以實際大小的方式進4于纟爰存處理。
1 )如果當前的數據包為音頻數據,且為第一個從網絡中獲取的 音頻數據包,則直接將其存儲于音頻主緩沖區中,在主緩沖區的此 節點數據包中,首先是32位的整型數據(用來存放RTP數據包的 大小),接著存儲RTP包(包含RTP頭和payload ),然后是1位表 示下一個數據包節點是否連續存儲的標識位,缺省為1,如果下一 個數據包沒有緊接此節點進行存放則為0,通常發生在快接近緩沖 區尾部的時候;同時更新以下數據。
音頻的主^爰沖區的教:據索引位置audio_pri—data—index =音頻主 緩沖區的起始4立置audio_pri—buf;
音頻的空閑主-爰沖區的索引4立置audio_pri—free—index = (32+RTP 包的大小+1 ) mod音頻主》爰沖區的大小 audio_pri—buf—size;
音頻主緩沖區最后一個凄t據包的序列號audio_pri—last—seq =此 音頻數據包的序列號;
音頻主緩沖區有效數據的大小=32+RTP包的大小+1。2 )如果當前的數據為音頻數據,且不為第 一個獲取的音頻數據。 則有以下兩種情況。
2.1 )如果當前音頻數據包的序列號大于音頻主緩沖區中最后一 個數據包的序列號,則將其緩存到主緩沖區,步驟如下
首先檢查條件音頻主緩沖區的空閑空間的大小 (audio_pri—buf一size -音頻的空閑主^爰沖區的索引位置 audio_pri_free—index )是否滿足一個32位整型、當前數據包大小所 需要的內存空間和1位標識位所需要的內存空間。
2.1.1) 如果滿足,則將此音頻數據包緩存到最后一個音頻數據 包之后的主緩沖區空間中,同時更新以下翁:據
音頻的空閑主1£沖區的索引4立置audio_pri_free—index = (32+RTP包的大小+l+存儲此數據包之前音頻空閑主緩沖區的索 引位置audio_pri_free—index ) mod音頻主緩沖區的大小 audio_pri—buf—size;
音頻主緩沖區最后一個凄t據包的序列號audio_pri—last—s叫=此 音頻數據包的序列號。
音頻主i差沖區有歲丈凄t才居的大小audio_pri—data—size = 32+RTP包 的大小+1+緩存此數據包之前的音頻主緩沖區有效數據的大小 audio_pri—data—size 。
2.1.2) 如果不滿足,則將此音頻數據包從主緩沖區起始位置開 始進行存儲。(對于主緩沖區是循環利用)同時更新以下數據
此節點的上一個凄t據節點的最后一個標識位由缺省的1變為0;索引爿f立置audio_pri—free_index = (32+RTP 包的大小+1 ) mod音頻主鄉爰沖區的大小 audio_pri—buf一size;音頻主緩沖區最后一個數據包的序列號audio_pri—last—seq =此 音頻數據包的序列號;音頻主《爰沖區有刻:凄t才居的大小audio_pri_data—size = 32+RTP包 的大小+1+緩存此數據包之前的音頻主緩沖區有效數據的大小 audio_pri—data—size 。2.2 )如果當前音頻數據包的序列號小于音頻主緩沖區中最后一 個凄t據包的序列號,則有以下步驟如下首先需要判斷條件,即當前的音頻數椐包是否過時,也就是說 對于要處理的數據來說,此音頻數據包是否已經沒有必要進行緩存 了,是否可以直4妄丟棄。這個條件可以通過此音頻tt據包的序列號 是否大于被處理過的最近的 一 個音頻數據包的序列號 audio_processed—s叫來判斷,嗩口果小于,則表明jt匕凄t才居包已纟至過時, 可以直接丟棄。如果大于則需要將此音頻凄t據包緩存到音頻輔助緩 沖區中。具體如下2.2.1)如果是第一個需要緩存到音頻輔助緩沖區的數據包,則 直接將其存儲于音頻輔助緩沖區中,在輔助緩沖區的此節點數據包 中,首先是32位的整型數據,RTP包數據(RTP的頭和RTP的 payload),以及1位標識位,然后緩存此RTP包的教:據;同時更新 以下數據音頻的輔助緩沖區的數據索引位置audio_sec_data—index =音 頻輔助緩沖區的起始位置audio_sec buf;18音頻的空閑輔助緩沖區的索引位置audio_sec_free_index = (32+RTP包的大小+1 ) mod音頻輔助纟爰沖區的大小 audio—sec—buf—size;音頻輔助H沖區最后一個翁:據包的序列號audio—sec—last—s叫= 此音頻數據包的序列號;音頻輔助-爰沖區有效凄史據的大小audio—sec—data—size = 32+RTP 包的大小+1。2.2.2)如果不是第一個需要緩存到音頻輔助緩沖區的音頻數據 包,則有以下兩種'清況。2.2.2.1 )如果當前音頻凝3居包的序列號大于音頻輔助H沖區中 最后一個數據包的序列號,則將其緩存到輔助緩沖區,步驟如下首先4企查條4牛,即音頻輔助-爰沖區的大小(audio—sec—buf—size -音頻的空閑輔助鄉爰沖區的索引4立置audio_sec—free—index )是否滿 足一個32位整型、當前數據包大小所需要的內存空間,以及l位標 識位所需要的存儲空間。2.2.2.1.1)如果滿足,則將此音頻tt據包纟爰存到最后一個音頻 凄t悟包之后的輔助《爰沖區空間中,同時更新以下翁:據音頻的空閑輔助多爰沖區的索引4立置audio—sec—free—index = (32+RTP包的大小+l+此凄t據包之前音頻空閑輔助纟爰沖區的索引 4立置 audio—sec—free—index ) mod 音步貞壽乾助緩沖區的大小 audio_sec—buf—size;音頻輔助纟爰沖區最后一個翁:據包的序列號audio—sec—last_seq = 此音頻數據包的序列號。音頻豐#助1£沖區有歲文凄t才居的大小audio_sec—data—size = 32+RTP 包的大小+1+此數據包之前的音頻輔助緩沖區有效數據的大小 audio_sec—data—size 。2.2.2.1.2)如果不滿足,則將此音頻數據包從輔助緩沖區起始 位置開始進4亍存儲。(對于輔助緩沖區是循環利用)同時更新以下凝: 據輔助緩沖區中最后一個數據包節點的標識位從1變為0;音頻的空閑輔助^爰沖區的索引4立置audio—sec—free—index = (32+RTP 包的大小+1) mod音頻輔助緩沖區的大小 audio—sec—buf—size;音頻輔助緩沖區最后一個數據包的序列號audio—sec—last—seq = 此音頻凄t據包的序列號;音頻輔助IC沖區有效凄t悟的大小audio—sec—data—size = 32+RTP 包的大小+1 +纟爰存此凄1據包之前的音頻輔助緩沖區有效ft據的大小 audio—sec—data—size 。2.2.2.2 )如果當前音頻凄t據包的序列號小于音頻輔助緩沖區中 最后一個tt據包的序列號,則需要將其插入到相應的位置(/人 audio_sec_data_index對H:據包進4亍比4支,具體的比4交算法不在贅 述),為了保證流媒體數據包是有序存放的,需要移動序號在此節點 之后的流J 某體數據包(具體的移動算法不在這里贅述),同時更新相 應的數據,如音頻空閑輔助^爰沖區的索引位置audio—sec—freejndex, 音頻緩沖區的有效數據的大小,有可能還需要更新其中兩個節點的 標識^H言息。第五步從緩沖區中獲取數據,下面也以獲取音頻數據包為準 來進行闡述。獲取視頻數據包的過程類似。據故處理過的最近 一 個音頻凄t據包的序列號audio_processed_seq, /人主纟爰沖區和輔助纟爰沖區中獲取一個離jt匕音頻 凄丈據包序列號最近的一個凄t據包。具體的過程如下才艮據音頻的主緩沖區的數據索引位置audio_pri—data—index和 音頻的輔助緩沖區的數據索引位置audio—sec—data_index位置,取出 一個音頻數據包序列號最靠近被處理過的最近一個音頻數據包的序 歹'J號audio_processed_seq的數據包。如果此數據包節點是從音頻主緩沖區中取出的,且此節點的標 識位信息是1 ,則音頻的主緩沖區的數據索引位置 audio_pri_data_index =獲耳又凄t據節點之前的音頻的主lt沖區的教:據 索引4立置audio_pri—data—index+32+1+RTP包的大小。如果此節點的 標識位信息是0 ,則則音頻的主緩沖區的數據索引位置 audio_pri—data—index =音步貞主纟爰沖區的起始4立置audio_pri—buf, 同 時需要更新音頻主緩沖的數據大小audio_pri—data—size:獲取此凝:據 包之前音頻主4C沖的凄t據大小audio_pri—data_size - ( 32+1+RTP包 的大小)。同理如果此數據包節點是從音頻輔助緩沖區中取出,過程 類似。第六步將數據送解碼器等器件進行處理。第二種實施方式,主緩沖區的內存空間為連續內存的空間,輔 助內存空間為Hash表的方式實現。圖7示出了才艮據本發明實施例 的流媒體數據包緩存結構圖二,主緩沖區的內存存儲的空間是連續 的,存儲的數據包才艮據sequence number的升序方式進行存儲;輔助 緩沖區用Hash(哈希)表進行索引,存儲數據的內存空間是連續的,數據存儲空間中數據包的存放不一定是有序的,輔助緩沖區的有序順序是通過Hash表來實現的。圖7中,Rtp Packet size的內存空間 為32位,C為下一個數據節點屬是否是連續存方文的,占用l位,0 表示不連續,1表示連續。Hash表中記錄的信息包括Hash表序號, RTP包的大小,RTP包的序列號,以及當前記錄是否有效的一個標 識位1標識此記錄的信息有效,0標識無效。主緩沖區中流J 某體數 據包的緩存和讀取和第 一種實施方式中的類似,在將流々某體lt據包 IC存到輔助《爰沖區的時4美,需要先通過計算sequence number mod N (N為Hash表的大小)獲取Hash表中的位置,然后將數據緩存到 輔助緩沖區的數據空間中,除了獲取位置信息這點和相應的存儲數 據包需要的額外空間節點不同之外,其他的緩存過程基本和第 一種 實施方式的類似、。第三種實施方式,采用主緩沖區的內存空間為連續存4諸空間, 輔助緩沖區的內存空間為鏈表的實現方式,有單向鏈表(附圖8) 和雙向鏈表之分(附圖9)。圖8示出了根據本發明實施例的流媒體 數據包緩存結構圖三,主緩存區的存儲空間是連續的,存儲的數據 包才艮據sequence number的方式進4亍存i者;輔助存l諸空間以單向鏈表 的方式進行實現。圖9示出了根據本發明實施例的流媒體數據包緩 存結構圖四,主緩存區的存儲空間是連續的,存儲的數據包根據 sequence number的方式進4亍存卡者;輔助存々者空間以^又向《連表的方式 進4亍實5見。圖8和圖9中,Rtp Packet size的內存空間為32 ^f立,C 為下一個數據節點屬是否是連續存放的,占用l位,0表示不連續, 1表示連續。采用鏈表是為了方便插入數據節點,不用進行移動數 據的操作。雙向鏈表方便進行查找,不用從起始位置進行遍歷,可 以從最后一個節點反向進行遍歷。這也是流媒體數據的特點,雖然 數據包晚到,但是晚到的數據包一般來說距離最后緩存的數據包相 對來說比較近。第四種實施方式,主緩沖區和輔助緩沖區均采用鏈表的方式實現內存緩存,有單向鏈表(附圖10)和雙向鏈表(附圖11)之分。 圖IO和圖11示出了根據本發明實施例的流々某體數據包緩存結構圖, 其中主緩緩沖區和輔助緩沖區的存儲空間是分別實現的。圖10和圖 11中,Rtp Packet size的內存空間為32 4立。具體的實施步驟類如乂于 第一種實施方式,區別在于存儲方式可能有所區別,以及存儲的數 據包節點的所需要的額外內存空間略有不同。/人以上的描述中,可以看出,本發明的方法就是利用這種才幾制, 在不改變大的網絡結構、協i^結構的前提下,4是出了一種在終端才妄 收設備有序緩存流媒體RTP數據包的方法。該緩存處理方法因為對 緩存數據包采取了排序,所以克服了緩存數據包不排序導致的多媒 體業務錯幀和亂幀的問題,能夠實現流暢的多々某體業務,給客戶帶 來更好的體-驗。顯然,本領域的^支術人員應該明白,上述的本發明的各才莫塊或 各步驟可以用通用的計算裝置來實現,它們可以集中在單個的計算 裝置上,或者分布在多個計算裝置所組成的網絡上,可選地,它們 可以用計算裝置可執行的程序代碼來實現,從而,可以將它們存儲在存儲裝置中由計算裝置來執行,或者將它們分別制作成各個集成 電路模塊,或者將它們中的多個模塊或步驟制作成單個集成電路模 塊來實現。這樣,本發明不限制于任何特定的硬件和軟件結合。以上所述〗又為本發明的優選實施例而已,并不用于限制本發明, 對于本領域的技術人員來說,本發明可以有各種更改和變化。凡在 本發明的精神和原則之內,所作的任何修改、等同替換、改進等, 均應包含在本發明的保護范圍之內。
權利要求
1.一種流媒體數據的緩存處理方法,其特征在于,包括以下步驟順序地接收流媒體業務的多個數據包;將所述數據包按照其在所述流媒體業務中的順序有序地緩存于緩沖區的數據隊列中;先進先出地從所述數據隊列中讀取所述數據包,以用于所述流媒體業務的消費。
2. 根據權利要求1所述的緩存處理方法,其特征在于,將所述數 據包按照其在所述流:煤體業務中的順序有序地緩存于緩沖區 中具體包括設置所述緩沖區包括主緩沖區和輔助緩沖區;判斷當前接收的所述數據包是否為晚到的數據包;如果是晚到的,則將當前4妄收的所述數據包有序地》爰存于 所述輔助緩沖區的數據隊列中;如果不是晚到的,貝'J將當前接 收的所述數據包增加到所述主緩沖區中的數據隊列的隊尾。
3. 根據權利要求2所述的緩存處理方法,其特征在于,所述數據 包包括指示其在流媒體業務中的順序的序列號;判斷當前接收 的所述數據包是否為晚到的數據包具體包括判斷當前接收的所述數據包的序列號是否小于所述主緩 沖區的最后 一個翁:才居包的序列號;如果小于,則判定當前接收的所述數據包是晚到的數據 包;否則判定當前接收的所述數據包不是晚到的數據包。
4. 根據權利要求3所述的緩存處理方法,其特征在于,將當前接 收的所述數據包有序地緩存于所述輔助緩沖區的數據隊列中 具體包括判斷當前接收的所述數據包的序列號是否大于所述輔助 緩沖區的最后 一個數據包的序列號;如果大于,則將當前接收的所述數據包增加到所述輔助緩 沖區的數據隊列的隊尾;否則,將當前接收的所述數據包插入到所述輔助緩沖區的數據包之前
5.根據權利要求4所述的緩存處理方法,其特征在于,先進先出 地從所述數據隊列中讀取所述數據包具體包括比壽交所述主緩沖區的數據隊列隊首的lt據包的序列號與 所述輔助纟爰沖區的凄t據隊列隊首的凝:據包的序列號的大小;讀取其中序列號較小的數據包作為當前的數據包輸出。
6.根據權利要求2所述的緩存處理方法,其特征在于,將當前接 收的所述tt據包增加到所述主緩沖區中的凄t據隊列的隊尾具 體包括將所述主緩沖區的數據隊列的數據包以序列號的升序方 式連續地存儲于所述主緩沖區的空間上;或者釆用鏈表的方式實現所述主緩沖區的數據隊列,其中將所 述主緩沖區的數據隊列的數據包以序列號的升序方式進行鏈 接。
7. 根據權利要求2所述的緩存處理方法,其特征在于,將當前接 收的所述數據包有序地緩存于所述輔助緩沖區的數據隊列中 具體包括將所述輔助緩沖區的數據隊列的數據包以序列號的升序 方式連續地存儲于所述輔助緩沖區的空間上;或者將所述輔助緩沖區的數據隊列的數據包存儲于所述空間 上,建立映射所述數據包的索引表,以所述數據包的序列號的 升序方式排列所述索引表的索引;或者采用鏈表的方式實現所述輔助緩沖區的數據隊列,其中將 所述輔助緩沖區的數據隊列的數據包以序列號的升序方式進 行鏈接。
8. 根據權利要求6或7所述的緩存處理方法,其特征在于,所述 鏈表采用單向鏈表或者雙向鏈表。
9. 根據權利要求2所述的緩存處理方法,其特征在于,所述流媒 體業務包括一見頻業務,設置所述主緩沖區和輔助緩沖區具體包括設置所述主緩 沖區中包括視頻主緩沖區,設置所述輔助緩沖區中包括一見頻輔 助《爰沖區;將當前接收的所述數據包有序地緩存于所述輔助緩沖區 的數據隊列中具體包括將當前接收的所述數據包有序地緩存 于所述視頻輔助緩沖區的數據隊列中;將當前接收的所述數據包增加到所述主緩沖區中的數據 隊列的隊尾具體包括將當前接收的所述數據包增加到所述視 頻主緩沖區中的數據隊列的隊尾。
10. 根據權利要求2所述的緩存處理方法,其特征在于,所述流媒 體業務包括音頻業務,設置所述主緩沖區和輔助緩沖區具體包括設置所述主緩 沖區中包括音頻主緩沖區,_沒置所述輔助緩沖區中包括音頻輔 助纟爰沖區;將當前接收的所述數據包有序地緩存于所述輔助緩沖區 的數據隊列中具體包括將當前接收的所述數據包有序地緩存 于所述音頻輔助緩沖區的數據隊列中;將當前接收的所述數據包增加到所述主緩沖區中的數據 隊列的隊尾具體包括將當前接收的所述數據包增加到所述音 頻主緩沖區中的數據隊列的隊尾。
全文摘要
本發明提供了一種流媒體數據的緩存處理方法,包括以下步驟順序地接收流媒體業務的多個數據包;將數據包按照其在流媒體業務中的順序有序地緩存于緩沖區的數據隊列中;先進先出地從數據隊列中讀取數據包,以用于流媒體業務的消費。本發明因為對緩存數據包采取了排序,所以克服了緩存數據包不排序導致的多媒體業務錯幀和亂幀的問題,能夠實現流暢的多媒體業務,給客戶帶來更好的體驗。
文檔編號H04Q7/22GK101330472SQ20081014475
公開日2008年12月24日 申請日期2008年7月28日 優先權日2008年7月28日
發明者尚國強, 王勝娟 申請人:中興通訊股份有限公司