專利名稱:一種多個媒體流同步的方法、裝置及系統的制作方法
技術領域:
本發明涉及多媒體領域,特別是一種多個媒體流同步的方法、裝置及系統。
背景技術:
在采用實時傳送協議(Real-time Transport Protocol,簡稱RTP)進行媒體傳輸和媒體控制傳輸中,媒體分組包中攜帶有媒體的RTP時間戳(timestamp),如圖1所示。該時間戳(32比特)反映了 RTP數據包中第一個字節的采樣時間。時鐘頻率依賴于負載數據格式,并在描述文件(profile)中進行描述。也可以通過RTP方法對負載格式動態描述。如果RTP包是周期性產生的,那么將使用由采樣時鐘決定的名義上的采樣時刻,而不是讀取系統時間。例如,對一個固定速率的音頻,采樣時鐘將在每個周期內增加1。如果一個音頻從輸入設備中讀取含有160個采樣周期的塊,那么對每個塊,時間戳的值增加160。時間戳的初始值應當是隨機的。幾個連續的RTP包如果是同時產生的。如屬于同一個視頻幀的 RTP包,將有相同的時間戳。不同媒體流的RTP時間戳可能以不同的速率增長。而且會有獨立的隨機偏移量。因此,雖然這些時間戳足以重構一個單獨的流的時間,但直接比較不同的媒體流的時間戳不能進行同步。對于每一個媒體,我們可以把與采樣時刻相關聯的RTP時間戳與來自于參考時鐘上的時間戳,例如采用網絡時間協議(NTP)的時間戳相關聯。NTP時間戳解決了 RTP時間戳有隨機偏移量的問題。參考時鐘用于同步所有媒體的共同時間。這一時間戳對(RTP時間戳和NTP時間戳),用于判斷RTP時間戳和NTP時間戳的對應關系,以進行媒體流的同步。 它們不是在每一個數據包中都被發送,而在發送速率更低的實時控制協議(RTCP)的SR(發送者報告)中。基于上述RTP同步機制,可以看出RTP的多個媒體流之間的同步是比較麻煩的。 首先RTP本身所帶的時戳并不具備時間同步的功能,它要依賴RTCP發送報告中攜帶的絕對時間(NTP時間戳)和對應的RTP時戳進行一個關聯映射,才能得到各個媒體流的時間相關性。
發明內容
本發明要解決的技術問題是,提供一種多個媒體流同步的方法、裝置及系統,通過在RFC3550定義的RTP頭的基礎上進行改進來解決當前RTP協議定義的時戳不能夠獨立承擔進行多個媒體流同步的任務。為了解決上述技術問題,本發明提出一種多個媒體流同步的方法,包括發送端在將多個媒體流封裝為實時傳送協議RTP數據包時,使用初始值相同、精度相同的時鐘時間為RTP數據包打時間戳。進一步地,上述方法還可具有以下特點接收端在接收到所述RTP數據包后,解碼出所述多個流媒體的數據,并根據封裝各流媒體的RTP數據包中的時間戳對所述多個流媒體的數據進行同步處理。
進一步地,上述方法還可具有以下特點所述發送端為RTP數據包打時間戳包括所述發送端分別為所述各媒體流維護一初始值相同的數據時長信息,并根據所述各流媒體被封裝的數據時長,更新所述各媒體流的數據時長信息;所述發送端在為一媒體流打時間戳時,將時間戳的值設置為所述時鐘時間的初始值與該媒體流的數據時長信息之和。進一步地,上述方法還可具有以下特點所述多個媒體流為視頻流和/或音頻流;所述發送端在從視頻流獲取視頻幀打成RTP包后,為該RTP包打時間戳;所述發送端在從音頻流獲取音頻幀打成RTP包后,且該音頻幀為所述RTP包中的首個幀時,才為該RTP包打時間戳。為了解決上述技術問題,本發明還提出一種多個媒體流同步的發送裝置,包括打時間戳模塊,用于在將多個媒體流封裝為實時傳送協議RTP數據包時,使用初始值相同、精度相同的時鐘時間為RTP數據包打時間戳;發送模塊,用于將打上所述時間戳的RTP數據包發送出去。進一步地,上述裝置還可具有以下特點所述打時間戳模塊包括第一運算模塊和第二運算模塊,其中所述第一運算模塊,用于分別為所述各媒體流維護一初始值相同的數據時長信息,并根據所述各流媒體被封裝的數據時長,更新所述各媒體流的數據時長信息;所述第二運算模塊,用于在為一媒體流打時間戳時,將時間戳的值設置為所述時鐘時間的初始值與該媒體流的數據時長信息之和。進一步地,上述裝置還可具有以下特點所述多個媒體流為視頻流和/或音頻流,其中所述第二運算模塊,在從視頻流獲取視頻幀打成RTP包后,為該RTP包打時間戳;所述第二運算模塊,在從音頻流獲取音頻幀打成RTP包后,且該音頻幀為所述RTP 包中的首個幀時,才為該RTP包打時間戳。為了解決上述技術問題,本發明還提出一種多個媒體流同步的接收裝置,包括解析模塊,用于在接收到所述RTP數據包后,解碼出所述多個流媒體的數據,以及封裝各流媒體的RTP數據包中的時間戳,所述時間戳使用初始值相同、精度相同的時鐘時間;同步處理模塊,用于根據所述封裝各流媒體的RTP數據包中的時間戳對所述多個流媒體的數據進行同步處理。為了解決上述技術問題,本發明還提出一種多個媒體流同步的系統,包括發送端,在將多個媒體流封裝為實時傳送協議RTP數據包時,使用初始值相同、精度相同的時鐘時間為RTP數據包打時間戳;接收端,在接收到所述RTP數據包后,解碼出所述多個流媒體的數據,并根據封裝各流媒體的RTP數據包中的時間戳對所述多個流媒體的數據進行同步處理。進一步地,上述系統還可具有以下特點所述發送端為RTP數據包打時間戳包括
所述發送端分別為所述各媒體流維護一初始值相同的數據時長信息,并根據所述各流媒體被封裝的數據時長,更新所述各媒體流的數據時長信息;所述發送端在為一媒體流打時間戳時,將時間戳的值設置為所述時鐘時間的初始值與該媒體流的數據時長信息之和。本發明提供的一種多個媒體流同步的方法、裝置及系統,能夠克服現有技術中多媒體流之間的同步稍嫌復雜的問題,進而降低客戶端同步音視頻的處理負荷和降低對RTCP 的依賴。
圖1為RFC3550定義的RTP頭的前12個字節的示意圖;圖2為本發明實施例定義的RTP頭的前12個字節;圖3為本發明實施例發送端為RTP數據包打時間戳的方法流程圖;圖4為本發明實施例發送裝置方框圖;圖5為本發明實施例接收裝置方框圖;圖6為本發明應用實例生成NTP時戳的RTP打包的流程圖;圖7為本發明應用實例使用NTP時戳進行同步的客戶端處理的流程圖。
具體實施例方式為使本發明的目的、技術方案和優點更加清楚,下面將結合附圖及具體實施例對本發明進行詳細描述。本發明實施例巧妙地在RFC3550定義的RTP頭的基礎上進行的一種改進來解決當前RTP協議定義的時戳不能夠獨立承擔進行多個媒體流同步的任務。如圖1是RFC3550定義的標準的RTP頭。圖2為本實施例一定義的RTP頭,對 timestamp字段的計算方式重新定義。即,在打時間戳時,巧妙地提出使用初始值相同、精度相同(即具有相同的步進,度量的基準相同)的時鐘時間為RTP數據包打時間戳的方案。 從而實現了各流媒體的時間戳運算時采用同一基準、同一度量單位。相應地,接收端在接收到所述RTP數據包后,解碼出所述多個流媒體的數據后,根據對封裝各流媒體的RTP數據包中的時間戳進行簡單比較即可實現對所述多個流媒體的數據進行同步處理。較佳地,所述發送端為RTP數據包打時間戳可以包括圖3所示步驟步驟S301 所述發送端分別為所述各媒體流維護一初始值相同的數據時長信息, 并根據所述各流媒體被封裝的數據時長,更新所述各媒體流的數據時長信息;步驟S302 所述發送端在為一媒體流打時間戳時,將時間戳的值設置為所述時鐘時間的初始值與該媒體流的數據時長信息之和。較佳地,所述多個媒體流為視頻流和/或音頻流所述發送端在為視頻流的RTP包打時間戳的時機為所述發送端在從視頻流獲取視頻幀打成RTP包后,為該RTP包打時間戳。所述發送端在為音頻流的RTP包打時間戳的時機為所述發送端在從音頻流獲取音頻幀打成RTP包后,且該音頻幀為所述RTP包中的首個幀時,才為該RTP包打時間戳。
為了實現上述方法,本發明實施例還提供了一種多個媒體流同步的發送裝置,如圖4所示,包括打時間戳模塊,用于在將多個媒體流封裝為實時傳送協議RTP數據包時,使用初始值相同、精度相同的時鐘時間為RTP數據包打時間戳;發送模塊,用于將打上所述時間戳的RTP數據包發送出去。其中,所述打時間戳模塊包括第一運算模塊和第二運算模塊,其中所述第一運算模塊,用于分別為所述各媒體流維護一初始值相同的數據時長信息,并根據所述各流媒體被封裝的數據時長,更新所述各媒體流的數據時長信息;所述第二運算模塊,用于在為一媒體流打時間戳時,將時間戳的值設置為所述時鐘時間的初始值與該媒體流的數據時長信息之和。其中,所述多個媒體流為視頻流和/或音頻流所述第二運算模塊,在從視頻流獲取視頻幀打成RTP包后,為該RTP包打時間戳;所述第二運算模塊,在從音頻流獲取音頻幀打成RTP包后,且該音頻幀為所述RTP 包中的首個幀時,才為該RTP包打時間戳。為了實現上述方法,本發明實施例還提供了一種多個媒體流同步的接收裝置,如圖5所示,包括解析模塊,用于在接收到所述RTP數據包后,解碼出所述多個流媒體的數據,以及封裝各流媒體的RTP數據包中的時間戳,所述時間戳使用初始值相同、精度相同的時鐘時間;同步處理模塊,用于根據所述封裝各流媒體的RTP數據包中的時間戳對所述多個流媒體的數據進行同步處理。為了實現上述方法,本發明實施例還提供了一種多個媒體流同步的接收系統,包括上述接收裝置和上述發送裝置。通過在發送端使用初始值相同、精度相同(即具有相同的步進,度量的基準相同)的時鐘時間為RTP數據包打時間戳的方案,從而實現了各流媒體的時間戳運算時采用同一基準、同一度量單位。在接收端只需要對所述時間戳進行簡單的比較處理,即可實現同步控制。為了進一步說明本發明實施方案,在此以對包含一個音頻流和一個視頻流的多媒體流進行同步為一具體應用實例進行說明。應用實例如圖6所述,使用本發明的生成NTP時戳的RTP打包的流程圖。在其他應用實例中,也可以應用其他時鐘時間打時間戳,只要能夠保證所述時鐘時間的初始值相同、精度相同即可。因為音視頻RTP打包是交替進行的,故本圖中的步驟編號無嚴格的時間先后順序。步驟S601 定義一個初始NTP時間;步驟S602 定義一個音頻總時長,初始值設為0 ;步驟S603 定義一個視頻總時長,初始值設為0 ;步驟S604 判斷視頻幀是否讀取完畢,如果否,則進入步驟S605 ;如果是,則進入步驟S609 ;
步驟S605 讀取視頻幀;步驟S606 獲取該視頻幀的時長;步驟S607 將視頻幀打成RTP包,RTP包頭的NTP時間為NTP初始值加上視頻幀總長;步驟S608 視頻總時長加上該視頻幀的時長,返回步驟S604 ;步驟S609 視頻幀RTP打包結束;步驟S610 判斷音頻幀是否讀取完畢,如果是,則進入步驟S617,否則,進入步驟 S611 ;步驟S611 讀取音頻幀;步驟S612 獲取該音頻幀的時長;步驟S613 將該音頻幀打成RTP包;步驟S614 判斷該幀是否為RTP包的第一幀,如果是,則進入步驟S615,否則,進入步驟S616 ;步驟S615 該RTP的NTP時間為初始NTP時間加上音頻的總時長;步驟S616 音頻總時長加上該音頻幀的時長,返回步驟S610 ;步驟S617 頻幀RTP打包結束。如圖7所述,使用本發明應用實例使用NTP時戳進行同步的客戶端處理的流程圖。 因為音視頻解析是交替進行的,故本圖中的步驟編號無嚴格的時間先后順序。步驟S701 解析收到的RTP視頻包;步驟S702 將解析后視頻數據進行組幀操作,拼成一個完整的視頻幀;步驟S703 將視頻幀送入緩沖區;步驟S704 解碼所述視頻幀;步驟S705 將解碼后的視頻數據送入緩沖區;步驟S706 解析收到的RTP音頻包;步驟S707 將音頻幀送入解碼緩沖區;步驟S708 解碼所述音頻幀;步驟S709 將解碼后的音頻數據送入同步緩沖區;步驟S710 根據所述RTP視頻包和所述RTP音頻包中的SBSN時戳進行音視頻同步輸出;步驟S711:播放。以上所述僅是本發明的優選實施方式,應當指出,只要是將RTP的時戳變換成同一基準同一度量單位的時間都在本發明的保護范圍內。對于本技術領域的技術人員來說, 在不脫離本發明原理的前提下,還可以作出若干改進和潤飾,這些改進和潤飾也應視為本發明的保護范圍。
權利要求
1.一種多個媒體流同步的方法,其特征在于,包括發送端在將多個媒體流封裝為實時傳送協議RTP數據包時,使用初始值相同、精度相同的時鐘時間為RTP數據包打時間戳。
2.如權利要求1所述的方法,其特征在于接收端在接收到所述RTP數據包后,解碼出所述多個流媒體的數據,并根據封裝各流媒體的RTP數據包中的時間戳對所述多個流媒體的數據進行同步處理。
3.如權利要求1所述的方法,其特征在于,所述發送端為RTP數據包打時間戳包括 所述發送端分別為所述各媒體流維護一初始值相同的數據時長信息,并根據所述各流媒體被封裝的數據時長,更新所述各媒體流的數據時長信息;所述發送端在為一媒體流打時間戳時,將時間戳的值設置為所述時鐘時間的初始值與該媒體流的數據時長信息之和。
4.如權利要求3所述的方法,其特征在于 所述多個媒體流為視頻流和/或音頻流;所述發送端在從視頻流獲取視頻幀打成RTP包后,為該RTP包打時間戳; 所述發送端在從音頻流獲取音頻幀打成RTP包后,且該音頻幀為所述RTP包中的首個幀時,才為該RTP包打時間戳。
5.一種多個媒體流同步的發送裝置,其特征在于,包括打時間戳模塊,用于在將多個媒體流封裝為實時傳送協議RTP數據包時,使用初始值相同、精度相同的時鐘時間為RTP數據包打時間戳;發送模塊,用于將打上所述時間戳的RTP數據包發送出去。
6.如權利要求5所述的裝置,其特征在于,所述打時間戳模塊包括第一運算模塊和第二運算模塊,其中所述第一運算模塊,用于分別為所述各媒體流維護一初始值相同的數據時長信息,并根據所述各流媒體被封裝的數據時長,更新所述各媒體流的數據時長信息;所述第二運算模塊,用于在為一媒體流打時間戳時,將時間戳的值設置為所述時鐘時間的初始值與該媒體流的數據時長信息之和。
7.如權利要求6所述的裝置,其特征在于,所述多個媒體流為視頻流和/或音頻流,其中所述第二運算模塊,在從視頻流獲取視頻幀打成RTP包后,為該RTP包打時間戳; 所述第二運算模塊,在從音頻流獲取音頻幀打成RTP包后,且該音頻幀為所述RTP包中的首個幀時,才為該RTP包打時間戳。
8.—種多個媒體流同步的接收裝置,其特征在于,包括解析模塊,用于在接收到所述RTP數據包后,解碼出所述多個流媒體的數據,以及封裝各流媒體的RTP數據包中的時間戳,所述時間戳使用初始值相同、精度相同的時鐘時間;同步處理模塊,用于根據所述封裝各流媒體的RTP數據包中的時間戳對所述多個流媒體的數據進行同步處理。
9.一種多個媒體流同步的系統,其特征在于,包括發送端,在將多個媒體流封裝為實時傳送協議RTP數據包時,使用初始值相同、精度相同的時鐘時間為RTP數據包打時間戳;接收端,在接收到所述RTP數據包后,解碼出所述多個流媒體的數據,并根據封裝各流媒體的RTP數據包中的時間戳對所述多個流媒體的數據進行同步處理。
10.如權利要求9所述的系統,其特征在于,所述發送端為RTP數據包打時間戳包括 所述發送端分別為所述各媒體流維護一初始值相同的數據時長信息,并根據所述各流媒體被封裝的數據時長,更新所述各媒體流的數據時長信息;所述發送端在為一媒體流打時間戳時,將時間戳的值設置為所述時鐘時間的初始值與該媒體流的數據時長信息之和。
全文摘要
本發明提供了一種多個媒體流同步的方法、裝置及系統,該方法包括發送端在將多個媒體流封裝為實時傳送協議RTP數據包時,使用初始值相同、精度相同的時鐘時間為RTP數據包打時間戳。該方法能夠克服現有技術中多媒體流之間的同步稍嫌復雜的問題,進而降低客戶端同步音視頻的處理負荷和降低對實時控制協議RTCP的依賴。
文檔編號H04N21/2365GK102595202SQ20111000507
公開日2012年7月18日 申請日期2011年1月11日 優先權日2011年1月11日
發明者劉繼年, 孫健, 趙宇, 阮亞平, 陳光亮 申請人:中興通訊股份有限公司