專利名稱:一種rtp數(shù)據(jù)包接收處理方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及通信領(lǐng)域中流媒體等數(shù)據(jù)傳輸技術(shù),具體地,涉及一種實(shí)時(shí)傳輸協(xié)議 (Real-time Transport Protocol,簡(jiǎn)稱RTP)數(shù)據(jù)包接收處理方法及裝置。
背景技術(shù):
RTP是用于流媒體業(yè)務(wù)的標(biāo)準(zhǔn)傳輸協(xié)議,由互聯(lián)網(wǎng)工程任務(wù)組(The Internet Engineering Task Force,簡(jiǎn)稱IETF)制定,其標(biāo)準(zhǔn)文檔是RFC 3550,該文檔中規(guī)定了 RTP 包的格式。在所有流媒體相關(guān)業(yè)務(wù)中,幾乎所有的媒體內(nèi)容在IP網(wǎng)絡(luò)上進(jìn)行傳輸之前都需 要封裝為RTP數(shù)據(jù)包的形式。由于RTP協(xié)議本身和流媒體業(yè)務(wù)的特點(diǎn),在處理RTP數(shù)據(jù)包 接收時(shí)一般會(huì)遇到以下問(wèn)題 A.由于RTP協(xié)議的底層一般由UDP協(xié)議承載,因此造成傳輸具有不可靠性,UDP傳 輸?shù)膩G包、亂序、重復(fù)等問(wèn)題在RTP傳輸時(shí)會(huì)出現(xiàn)。 B.在流媒體通訊中,音視頻同步,去抖動(dòng)等需求,往往有實(shí)時(shí)性要求。 C. RTP數(shù)據(jù)包接收的實(shí)現(xiàn)一般使用回調(diào)機(jī)制,回調(diào)函數(shù)操作時(shí)間過(guò)長(zhǎng)會(huì)引起底層
緩沖區(qū)溢出。 D.移動(dòng)終端本身的處理能力和功耗等限制,接收操作的步驟越少越好。 由于RTP數(shù)據(jù)包有嚴(yán)格的先后順序,在接收以后必須在緩沖中進(jìn)行重新排序才能
交給下一級(jí)進(jìn)行處理,現(xiàn)有技術(shù)中RTP接收處理方式主要有兩種 —、兩級(jí)緩沖加插入排序采用兩級(jí)緩沖的機(jī)制,第一級(jí)按照到達(dá)順序把接收的數(shù) 據(jù)放入第一級(jí)緩沖,在二級(jí)緩沖處理中從第一級(jí)緩沖取出數(shù)據(jù)并使用插入排序算法將數(shù)據(jù) 包按照RTP的序列號(hào)形成一維鏈表。 二、兩級(jí)緩沖加插空排序采用兩級(jí)緩沖的機(jī)制,第一級(jí)的處理機(jī)制與上述方式一 相同,第二級(jí)使用預(yù)設(shè)緩沖,根據(jù)RTP的序列號(hào)將數(shù)據(jù)包插入預(yù)設(shè)好的緩沖,緩沖區(qū)滿時(shí)丟 棄后續(xù)到達(dá)的數(shù)據(jù)包。 在實(shí)現(xiàn)本發(fā)明過(guò)程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)RTP接收處理方式至少存在如下問(wèn)題
1.第一種方式填充二級(jí)緩沖的時(shí)候使用的插入排序算法效率比較低,算法復(fù)雜度 為0(n2),屬于效率較低的排序算法。 2.第二種方式中亂序包或錯(cuò)誤包可能占據(jù)正常包的位置,造成正常包到達(dá)后無(wú)法 插入而丟棄;二級(jí)緩沖的長(zhǎng)度固定,當(dāng)緩沖滿時(shí)對(duì)后續(xù)數(shù)據(jù)包直接丟棄,無(wú)法根據(jù)網(wǎng)絡(luò)流量 進(jìn)行自適應(yīng)處理;緩沖分配過(guò)大則浪費(fèi),過(guò)小則可能不夠用;且第二種方式對(duì)網(wǎng)絡(luò)接收到 的數(shù)據(jù)進(jìn)行了兩次拷貝,增加了內(nèi)存復(fù)制的開支。 3.上述兩種方式均存在共同缺點(diǎn)二級(jí)緩沖復(fù)雜度較高、二級(jí)緩沖整體由此造成 處理效率低。
發(fā)明內(nèi)容
本發(fā)明的目的是針對(duì)現(xiàn)有技術(shù)中RTP接收處理方式處理效率低的缺陷,提出一種
4RTP數(shù)據(jù)包接收處理方法及裝置,以實(shí)現(xiàn)提高RTP數(shù)據(jù)包的接收處理效率。為實(shí)現(xiàn)上述目的,根據(jù)本發(fā)明的一個(gè)方面,提供了一種RTP數(shù)據(jù)包接收處理方法。 根據(jù)本發(fā)明實(shí)施例的RTP數(shù)據(jù)包接收處理方法,包括從網(wǎng)絡(luò)接收RTP數(shù)據(jù)包;對(duì)
接收的RTP數(shù)據(jù)包進(jìn)行一級(jí)緩沖預(yù)排序處理;將預(yù)排序處理后的RTP數(shù)據(jù)包進(jìn)行二級(jí)緩沖處理。 優(yōu)選地,可以采用隊(duì)列組作為一級(jí)緩沖和/或二級(jí)緩沖,對(duì)接收的RTP數(shù)據(jù)包進(jìn)行 一級(jí)緩沖預(yù)排序處理和二級(jí)緩沖處理,其中,隊(duì)列組可以包括鏈表組和/或數(shù)組組。
優(yōu)選地,隊(duì)列組可以為兩個(gè),對(duì)接收的所述RTP數(shù)據(jù)包進(jìn)行一級(jí)緩沖預(yù)排序處理 的操作可以包括對(duì)接收的RTP數(shù)據(jù)包進(jìn)行一級(jí)緩沖預(yù)排序,將RTP數(shù)據(jù)包保存至當(dāng)前正接 收數(shù)據(jù)包的隊(duì)列組的隊(duì)列中;當(dāng)隊(duì)列組的所有隊(duì)列已用完,或者隊(duì)列組保存的RTP數(shù)據(jù)包 總數(shù)目大于預(yù)設(shè)的閥值時(shí),該隊(duì)列組停止接收數(shù)據(jù)包,啟動(dòng)另一個(gè)隊(duì)列組,將當(dāng)前接收到的 數(shù)據(jù)包放入該另一個(gè)隊(duì)列組中;其中,停止接收數(shù)據(jù)包的隊(duì)列組執(zhí)行二級(jí)緩沖處理的操作。
優(yōu)選地,將預(yù)排序處理后的RTP數(shù)據(jù)包進(jìn)行二級(jí)緩沖處理的操作可以包括將啟 動(dòng)二級(jí)緩沖的隊(duì)列組中的所有隊(duì)列進(jìn)行合并以及排序;將所述合并以及排序后的隊(duì)列分為 穩(wěn)定段和非穩(wěn)定段,將穩(wěn)定段直接放入二級(jí)緩沖。 為實(shí)現(xiàn)上述目的,根據(jù)本發(fā)明的另一個(gè)方面,還提供了一種RTP數(shù)據(jù)包接收處理裝置。
根據(jù)本發(fā)明實(shí)施例的RTP數(shù)據(jù)包接收處理裝置,包括接收單元,用于從網(wǎng)絡(luò)側(cè)接 收RTP數(shù)據(jù)包;一級(jí)緩沖處理單元,用于對(duì)接收的RTP數(shù)據(jù)包進(jìn)行一級(jí)緩沖預(yù)排序處理;二 次緩沖處理單元,用于對(duì)一級(jí)緩沖預(yù)排序處理后的結(jié)果進(jìn)行二級(jí)緩沖處理。
優(yōu)選地, 一級(jí)緩沖處理單元可以包括 存儲(chǔ)模塊,用于存儲(chǔ)至少兩個(gè)隊(duì)列組及預(yù)設(shè)的閾值,其中,每個(gè)隊(duì)列組存儲(chǔ)一級(jí)緩 沖預(yù)排序處理及二級(jí)緩沖處理后的RTP數(shù)據(jù)包,該閾值為每個(gè)所述隊(duì)列組能存儲(chǔ)的最大 RTP數(shù)據(jù)包的總數(shù)目,隊(duì)列組包括鏈表組和/或數(shù)組組; 分析模塊,用于將當(dāng)前接收的RTP數(shù)據(jù)包的序列號(hào)與上次最后接收的RTP包的序 列號(hào)進(jìn)行比較,將RTP數(shù)據(jù)包總數(shù)目與預(yù)設(shè)的閥值進(jìn)行比較; 處理模塊,用于接收分析模塊的比較結(jié)果,對(duì)當(dāng)前接收的RTP數(shù)據(jù)包進(jìn)行一級(jí)緩 沖預(yù)排序并存入存儲(chǔ)模塊的隊(duì)列組中;當(dāng)隊(duì)列組的所有隊(duì)列已用完,或者RTP數(shù)據(jù)包總數(shù) 目大于預(yù)設(shè)的閥值時(shí),觸發(fā)二次緩沖處理單元,并將當(dāng)前接收到的數(shù)據(jù)包放入存儲(chǔ)模塊的 另一個(gè)隊(duì)列組中。 優(yōu)選地,二次緩沖處理單元可以包括 合并排序模塊,用于接收一級(jí)緩沖處理單元的觸發(fā)消息,將存儲(chǔ)模塊中啟動(dòng)二級(jí) 緩沖的隊(duì)列組進(jìn)行合并排序; 處理模塊,用于將合并排序后的隊(duì)列分為穩(wěn)定段和非穩(wěn)定段,將非穩(wěn)定段中RTP
數(shù)據(jù)包序列號(hào)的第一個(gè)非連續(xù)點(diǎn)之前的RTP數(shù)據(jù)包與穩(wěn)定段合并,放入二級(jí)緩沖;將非穩(wěn)
定段的剩余RTP數(shù)據(jù)包放入所述存儲(chǔ)模塊中當(dāng)前正在接收數(shù)據(jù)的隊(duì)列組中。 本發(fā)明的RTP數(shù)據(jù)包接收處理裝置可以為網(wǎng)絡(luò)機(jī)頂盒,手機(jī)等用于流媒體點(diǎn)播/
直播類的客戶端。 本發(fā)明各實(shí)施例的RTP數(shù)據(jù)包接收處理方法及裝置,可以有效利用網(wǎng)絡(luò)數(shù)據(jù)包到達(dá)的時(shí)間間隙進(jìn)行數(shù)據(jù)包的預(yù)排序,從而平衡一級(jí)緩沖和二級(jí)緩沖的處理復(fù)雜度,簡(jiǎn)化整 體排序過(guò)程,有效提高整體處理效率。 本發(fā)明還有一些實(shí)施例采用鏈表組或者數(shù)組等隊(duì)列組作為一級(jí)緩沖和二級(jí)緩沖, 不會(huì)由于亂序包提前到達(dá)造成正常包無(wú)法排序;二級(jí)緩將合并沖排序隊(duì)列分為穩(wěn)定段和非 穩(wěn)定段,有效解決亂序包滯后到達(dá)問(wèn)題,減少由于數(shù)據(jù)包亂序造成的誤判斷。
附圖用來(lái)提供對(duì)本發(fā)明的進(jìn)一步理解,并且構(gòu)成說(shuō)明書的一部分,與本發(fā)明的實(shí) 施例一起用于解釋本發(fā)明,并不構(gòu)成對(duì)本發(fā)明的限制。在附圖中
圖1為根據(jù)本發(fā)明RTP數(shù)據(jù)包接收處理方法實(shí)施例流程圖; 圖2 (a)為根據(jù)本發(fā)明RTP數(shù)據(jù)包接收處理方法中以鏈表組為一級(jí)緩沖的實(shí)施例 解析示意圖; 圖2 (b)為根據(jù)本發(fā)明RTP數(shù)據(jù)包接收處理方法中以數(shù)組為一級(jí)緩沖的實(shí)施例解 析示意圖; 圖3為根據(jù)本發(fā)明RTP數(shù)據(jù)包接收處理方法中一級(jí)緩沖預(yù)排序?qū)嵤├鞒虉D;
圖4為根據(jù)本發(fā)明RTP數(shù)據(jù)包接收處理方法中二級(jí)緩沖處理過(guò)程實(shí)施例流程圖;
圖5為根據(jù)本發(fā)明RTP數(shù)據(jù)包接收處理裝置實(shí)施例示意圖;
圖6為根據(jù)本發(fā)明RTP數(shù)據(jù)包接收處理裝置另一實(shí)施例示意圖。
具體實(shí)施例方式
以下結(jié)合附圖對(duì)本發(fā)明的實(shí)施例進(jìn)行說(shuō)明,應(yīng)當(dāng)理解,此處所描述的優(yōu)選實(shí)施例 僅用于說(shuō)明和解釋本發(fā)明,并不用于限定本發(fā)明。
方法實(shí)施例 圖1為根據(jù)本發(fā)明RTP數(shù)據(jù)包接收處理方法實(shí)施例流程圖,如圖1所示,本實(shí)施例 包括 步驟S102 :從網(wǎng)絡(luò)接收RTP數(shù)據(jù)包; 步驟S104 :對(duì)接收的RTP數(shù)據(jù)包進(jìn)行一級(jí)緩沖預(yù)排序處理;
步驟S106 :將預(yù)排序處理后的RTP數(shù)據(jù)包進(jìn)行二級(jí)緩沖處理。 本實(shí)施例可以有效地利用網(wǎng)絡(luò)數(shù)據(jù)包到達(dá)的時(shí)間間隙進(jìn)行數(shù)據(jù)包的預(yù)排序,平衡 了一級(jí)緩沖和二級(jí)緩沖的處理復(fù)雜度,簡(jiǎn)化了整體排序過(guò)程,提高了整體處理效率。本發(fā)明 中一級(jí)緩沖和二級(jí)緩沖可以采用接收隊(duì)列組的形式,其中,隊(duì)列組可以為鏈表組、數(shù)組等, 隊(duì)列組的每個(gè)隊(duì)列對(duì)應(yīng)為鏈表或者數(shù)組。 本發(fā)明中一級(jí)緩沖預(yù)排序處理主要利用網(wǎng)絡(luò)接收的間隔對(duì)接收到的RTP數(shù)據(jù)包 進(jìn)行初步排序,得到一系列有序RTP隊(duì)列。從而在使用這些有序RTP隊(duì)列進(jìn)行二級(jí)緩沖排序 的時(shí)候能夠提高排序速度。 一級(jí)緩沖的預(yù)排序機(jī)制可以有多種實(shí)現(xiàn)方式,例如預(yù)排序后進(jìn) 行二級(jí)緩沖處理的有序RTP隊(duì)列可以是鏈表形式,也可以是數(shù)組形式,下面通過(guò)圖2(a)-圖 2 (b)對(duì)本發(fā)明 一級(jí)緩沖的預(yù)排序過(guò)程進(jìn)行解釋說(shuō)明。 圖2 (a)為根據(jù)本發(fā)明RTP數(shù)據(jù)包接收處理方法中以鏈表組為一級(jí)緩沖的實(shí)施例 解析示意圖,如圖2 (a)所示, 一級(jí)緩沖中設(shè)置2個(gè)接收鏈表組,每一組有n個(gè)鏈表,用于保
6存收到的RTP數(shù)據(jù)包,兩個(gè)接收鏈表組交替使用。其中一個(gè)鏈表組用于實(shí)時(shí)接收RTP數(shù)據(jù) 包,同時(shí)另一個(gè)鏈表組用于進(jìn)行二次緩沖排序處理,具體在圖4中會(huì)進(jìn)行詳細(xì)說(shuō)明。下面對(duì) 照?qǐng)D2(a)對(duì)本發(fā)明的一級(jí)緩沖的處理機(jī)制進(jìn)行解釋說(shuō)明圖2(a)的情況下,假設(shè)每個(gè)接收 鏈表組能夠容納的最大RTP數(shù)據(jù)包的數(shù)量為max—proc—pkt,每個(gè)接收隊(duì)列組(鏈表組)由 n個(gè)接收鏈表組成。假設(shè)RTP數(shù)據(jù)包到達(dá)的順序依次為1, 4, 2, 3, 7, 8, 9, 10, 5, 6, 16, 20, 11, 12,13,15,14,17,19,18,20.。 1.每一鏈表組的第一個(gè)鏈表保留給二級(jí)緩沖排序后剩余的RTP包組成的鏈表使 用的,不用于接收過(guò)程,其余鏈表用于實(shí)時(shí)接收數(shù)據(jù)包。如圖2(a)中接收鏈表1不接收RTP 數(shù)據(jù)包,具體可參見(jiàn)圖4實(shí)施例中對(duì)于二級(jí)緩沖的相關(guān)說(shuō)明。 2.在隊(duì)列組開始接收RTP包之前所有鏈表都是空的,沒(méi)有任何RTP數(shù)據(jù)包。每一 鏈表組從第二個(gè)鏈表開始使用,接收到的RTP數(shù)據(jù)包從第二個(gè)鏈表開始放入。在收到一個(gè) RTP數(shù)據(jù)包以后,首先需要判斷其序列號(hào)是否正確(序列號(hào)不能為負(fù)數(shù))。如果序列號(hào)正確, 則把它與本組上一次放入的RTP包的序列號(hào)(作比較。如果相等,則表示這是一個(gè)重復(fù)包, 應(yīng)該丟棄;如果新到達(dá)的數(shù)據(jù)包比上一次的數(shù)據(jù)包的序列號(hào)大,則添加到當(dāng)前鏈表的末尾, 否則將其放入當(dāng)前鏈表組的下一個(gè)未使用的空鏈表,這樣保證每個(gè)鏈表中的數(shù)據(jù)包是遞增 的,不同鏈表的第一序列號(hào)與前一個(gè)鏈表的最后一個(gè)序號(hào)則不是遞增的,為二級(jí)緩沖處理 做好準(zhǔn)備。如圖2(a)所示,按照RTP包到達(dá)的順序?qū)⑸鲜鰯?shù)據(jù)包存儲(chǔ)到接收鏈表2到鏈表 7中,其中,每個(gè)鏈表中的數(shù)據(jù)包序列號(hào)保持遞增。 3.當(dāng)某一鏈表組的所有的接收鏈表都用完,或者接收到的RTP數(shù)據(jù)包數(shù)目大于鏈 表組預(yù)設(shè)的閥值,如接收到的RTP數(shù)據(jù)包數(shù)目大于鏈表組能夠容納的最大RTP數(shù)據(jù)包的數(shù) 量maX_pr0C_pkt時(shí),停止對(duì)該鏈表組的使用,對(duì)其啟動(dòng)二級(jí)緩沖排序處理流程,具體如圖4 所示。在停止該鏈表組的同時(shí)啟用另一鏈表組,把接收到的RTP數(shù)據(jù)包放入另一組鏈表組 (接收鏈表組2,未示出,與接收鏈表組1結(jié)構(gòu)相同)。 4.兩個(gè)鏈表組反復(fù)交替使用,當(dāng)啟動(dòng)二級(jí)緩沖進(jìn)行排序的鏈表組處理完畢后,加 入一級(jí)緩沖進(jìn)行一級(jí)緩沖的接收預(yù)處理。 本實(shí)施例以鏈表組為一級(jí)緩沖進(jìn)行舉例,為一級(jí)緩沖的優(yōu)選實(shí)現(xiàn)方式,本領(lǐng)域普
通技術(shù)人員應(yīng)當(dāng)了解,還可以數(shù)組等其它隊(duì)列組的方式實(shí)現(xiàn)一級(jí)緩沖預(yù)處理。 圖2 (b)為根據(jù)本發(fā)明RTP數(shù)據(jù)包接收處理方法中以數(shù)組為一級(jí)緩沖的實(shí)施例解
析示意圖。同樣假設(shè)一個(gè)接收數(shù)組組能夠容納的最大RTP數(shù)據(jù)包的數(shù)量為maX_pr0C_pkt,
每個(gè)接收隊(duì)列組(本圖中為數(shù)組組)由n個(gè)接收數(shù)組組成。假設(shè)RTP包到達(dá)的順序?yàn)?,
4, 2, 3, 7, 8, 9, 10, 5, 6, 16, 20, 11, 12, 13, 15, 14, 17, 19, 18,20.。 如圖2(b)所示,其一級(jí)緩沖的處理過(guò)程與圖2(a)鏈表組的處理過(guò)程相類似,不再 重復(fù)舉例說(shuō)明。對(duì)于圖2(b)所示數(shù)組實(shí)現(xiàn)方式,由于數(shù)組大小固定,因此每個(gè)數(shù)組的大小 按照冗余都固定為本組數(shù)組能夠容納的最大RTP數(shù)據(jù)包的數(shù)量,在本例中即為max—proc— pkt。 圖2(a)鏈表組中每個(gè)鏈表的大小不固定,如果接收的數(shù)據(jù)包是連續(xù)的,則鏈表最 大可以接收連續(xù)的max—proc—pkt個(gè)數(shù)據(jù)包。如果采用圖2(b)中的數(shù)組作為一級(jí)緩沖,由 于每個(gè)數(shù)組的大小是固定的,則可能有些數(shù)組中的固定長(zhǎng)度由于數(shù)據(jù)包序列號(hào)不連續(xù)沒(méi)有 被充分利用而空閑,因此,鏈表組為一級(jí)緩沖的優(yōu)選實(shí)現(xiàn)方式,但本發(fā)明各實(shí)施例中的一級(jí)緩沖不僅限于鏈表組,還可以通過(guò)其他隊(duì)列組的方式實(shí)現(xiàn)。 上述實(shí)施例的一級(jí)緩沖處理中,利用數(shù)據(jù)包到達(dá)的間隙進(jìn)行數(shù)據(jù)包的預(yù)處理排 序,可以使用鏈表組保存到達(dá)的數(shù)據(jù)包,并使用雙鏈表組切換使用,由于使用鏈表進(jìn)行數(shù)據(jù) 包的存儲(chǔ),可以減少內(nèi)存復(fù)制操作,不會(huì)產(chǎn)生由于亂序包提前到達(dá)造成的正常包無(wú)法入隊(duì) 現(xiàn)象。 圖3為根據(jù)本發(fā)明RTP數(shù)據(jù)包接收處理方法中一級(jí)緩沖預(yù)排序?qū)嵤├鞒虉D, 為說(shuō)明方便,將當(dāng)前收到的RTP包序列號(hào)記為"curr_Seq",上次最后收到的RTP包的序列 號(hào)記為"last—seq";將當(dāng)前接收鏈表的索引記為"curr—list",鏈表組的總鏈表數(shù)量記為 "list—皿m",第一個(gè)接收鏈表記為list[O],最后一個(gè)接收鏈表記為list[list_num-l];將 本接收鏈表組接收到的總RTP包的數(shù)量記為list—pkt—皿m,將鏈表組預(yù)設(shè)的最大閾值記為 maX_pr0C_pkt。如圖3所示,本實(shí)施例的一級(jí)緩沖預(yù)排序處理過(guò)程包括
步驟S301 :從兩個(gè)鏈表組中選擇一個(gè)接收鏈表組進(jìn)行接收,從該鏈表組的第二個(gè) 鏈表進(jìn)行接收,將第二個(gè)鏈表(如圖2(a)中的鏈表2)作為當(dāng)前接收鏈表;
步驟S302 :從網(wǎng)絡(luò)獲取當(dāng)前RTP數(shù)據(jù)包; 步驟S304 :判斷本鏈表組接收到的總RTP包的數(shù)量是否小于預(yù)設(shè)的閾值,如圖3 中接收鏈表組的RTP數(shù)據(jù)包數(shù)量加l,判斷l(xiāng)ist_pkt_num++ < = max_proc_pkt是否正確; 是則執(zhí)行步驟S310,否則執(zhí)行步驟S306 ; 步驟S306 :鏈表組接收到的總RTP包的數(shù)量大于或等于能接收的閾值,因此切換 到另一個(gè)接收鏈表組; 步驟S308 :在切換的接收鏈表組中做如下設(shè)置curr_list = 1、 last_Seq = -1、
1181_。1^_皿111++,執(zhí)行步驟S310 ; 步驟S310 :判斷當(dāng)前收到的RTP包序列號(hào)"curr_Seq"是否正確,是則執(zhí)行步驟 S312,否則當(dāng)前數(shù)據(jù)包錯(cuò)誤,丟棄該當(dāng)前數(shù)據(jù)包,繼續(xù)執(zhí)行步驟S302 ; 步驟S312 :判斷當(dāng)前收到的RTP包序列號(hào)"curr—seq"是否與上次最后收到的RTP 包的序列號(hào)"last—seq"相同,即如圖3所示,判斷curr—seq ! = last—seq ;是則執(zhí)行步驟 S314,否則為重復(fù)接收的數(shù)據(jù)包,丟棄后繼續(xù)執(zhí)行步驟S302 ; 步驟S314 :判斷當(dāng)前收到的RTP包序列號(hào)是否大于次最后收到的RTP包的序列 號(hào),即如圖3所示,判斷curr_seq > kast_seq ;是則執(zhí)行步驟S320,否則執(zhí)行步驟S316 ;
步驟S316 :當(dāng)前收到的RTP包序列號(hào)小于上次最后收到的RTP包的序列號(hào),說(shuō) 明為當(dāng)前包為滯后到達(dá)的亂序包,進(jìn)一步判斷當(dāng)前接收鏈表是否為本鏈表組的最后一個(gè) 鏈表,即當(dāng)前鏈表的索引"currjist"是否小于鏈表組的總鏈表數(shù)量減1,是則執(zhí)行步驟 S318,否則執(zhí)行步驟S317 ; 步驟S317 :當(dāng)前接收鏈表為最后一個(gè)接收鏈表,且當(dāng)前數(shù)據(jù)包與前一數(shù)據(jù)包的序 列號(hào)不遞增,則可以有兩種處理方式 A、從前往后,找到最后一個(gè)當(dāng)前節(jié)點(diǎn)最少的鏈表,即鏈表中的數(shù)據(jù)包數(shù)量最少,將 該鏈表的所有數(shù)據(jù)包作為錯(cuò)誤包丟棄,將當(dāng)前包放入該鏈表,并繼續(xù)執(zhí)行步驟S302 ;
B、將當(dāng)前包丟棄,繼續(xù)執(zhí)行步驟S306,切換到另一個(gè)鏈表組; 步驟S318 :當(dāng)前接收鏈表不是最后一個(gè)接收鏈表,且當(dāng)前數(shù)據(jù)包與前一數(shù)據(jù)包的 序列號(hào)不遞增,則把本鏈表組的下一個(gè)尚未使用的鏈表作為當(dāng)前接收鏈表,將當(dāng)前RTP數(shù)據(jù)包放入該鏈表中,如圖3所示,curr_list++,然后把當(dāng)前數(shù)據(jù)包放入list [curr_list]的 末尾,繼續(xù)執(zhí)行步驟S302 ; 步驟S320 :當(dāng)前數(shù)據(jù)包與前一數(shù)據(jù)包序列號(hào)是遞增的,將當(dāng)前包放入當(dāng)前鏈表的 末尾,并對(duì)序列號(hào)、數(shù)據(jù)包總數(shù)量進(jìn)行更新,如last_seq = curr_seq, list_pkt_num++ ;
步驟S322 :判斷是否退出,是則結(jié)束,否則執(zhí)行步驟S302,在實(shí)際應(yīng)用時(shí)如果用戶 終端繼續(xù)接收,則繼續(xù)執(zhí)行步驟S302,如果用戶終端停止接收或播放RTP等流媒體數(shù)據(jù),則 結(jié)束。 本實(shí)施例中,針對(duì)目前在流媒體相關(guān)業(yè)務(wù)中,UDP傳輸?shù)膩G包,亂序,重復(fù)等問(wèn)題同 流媒體通訊中實(shí)時(shí)性要求的矛盾,提出一種可以對(duì)接收到的RTP包進(jìn)行快速排序,迅速檢 查出丟包,亂序,重復(fù)等情況,從而簡(jiǎn)化下一級(jí)處理過(guò)程,本實(shí)施例對(duì)接收的RTP數(shù)據(jù)包進(jìn) 行預(yù)排序的過(guò)程,利用網(wǎng)絡(luò)數(shù)據(jù)包到達(dá)間隙進(jìn)行預(yù)排序,使用雙鏈表組切換使用保存到達(dá) 的數(shù)據(jù)包,由于使用鏈表進(jìn)行數(shù)據(jù)包的存儲(chǔ),可以減少內(nèi)存復(fù)制操作,不會(huì)產(chǎn)生由于亂序包 提前到達(dá)造成的正常包無(wú)法入隊(duì)現(xiàn)象。 下面對(duì)本發(fā)明中一級(jí)緩沖預(yù)處理后進(jìn)行的二級(jí)緩沖排序處理流程進(jìn)行簡(jiǎn)要說(shuō)明, 以下以鏈表作為二級(jí)緩沖為例進(jìn)行說(shuō)明 對(duì)啟動(dòng)二級(jí)緩沖,停止接收數(shù)據(jù)包的鏈表組從第一個(gè)鏈表開始對(duì)該組的所有鏈表 進(jìn)行合并以及排序,形成一個(gè)鏈表??紤]到RTP數(shù)據(jù)包在亂序后可能會(huì)滯后到達(dá),因此對(duì)合 并以及排序后的鏈表從中間一分為二,前半段為穩(wěn)定段,后半段為非穩(wěn)定段。將穩(wěn)定段直 接放入二級(jí)緩沖,進(jìn)行后續(xù)處理。非穩(wěn)定段則進(jìn)行掃描,如果發(fā)現(xiàn)某個(gè)數(shù)據(jù)包的序列號(hào)和 前面的相鄰包的序列號(hào)不連續(xù),則將該數(shù)據(jù)包記為非連續(xù)點(diǎn),從該非連續(xù)節(jié)點(diǎn)處把再把非 穩(wěn)定鏈表分為二部分,前一部分(不包括非連續(xù)點(diǎn))與穩(wěn)定段合并,放入二級(jí)緩沖,后一部 分(包括非連續(xù)點(diǎn))則放入一級(jí)緩沖中另一當(dāng)前正在接收數(shù)據(jù)包的鏈表組的第一個(gè)鏈表 中。圖2實(shí)施例中的相關(guān)說(shuō)明,正在接收的鏈表組的第一個(gè)鏈表保存二級(jí)緩沖排序后剩余 的RTP包組成的鏈表,以進(jìn)行下一次排序。 本領(lǐng)域技術(shù)人員應(yīng)當(dāng)了解,采用數(shù)組作為二級(jí)緩沖的處理過(guò)程與采用鏈表類似, 在此不對(duì)相同或類似技術(shù)方案進(jìn)行重復(fù)說(shuō)明。 圖4為根據(jù)本發(fā)明RTP數(shù)據(jù)包接收處理方法中二級(jí)緩沖處理過(guò)程實(shí)施例流程圖, 如圖4所示,本實(shí)施例的二級(jí)緩沖處理流程包括 步驟S402 :對(duì)啟動(dòng)二級(jí)緩沖,停止接收數(shù)據(jù)包的鏈表組從第一個(gè)鏈表開始對(duì)該組 的所有鏈表進(jìn)行合并排序,得到排序后的一個(gè)鏈表,記為orderjist,設(shè)其長(zhǎng)度為n ;
步驟S404 :讀取該合并排序后的鏈表的中間節(jié)點(diǎn)order_liSt[n/2],記錄該數(shù)據(jù) 包的序列號(hào)為last_seq ; 步驟S406 :判斷當(dāng)前數(shù)據(jù)包是否到達(dá)鏈表尾,是則執(zhí)行步驟S414,否則步驟 S408 ; 步驟S408 :讀取下一節(jié)點(diǎn),得到當(dāng)前讀取RTP數(shù)據(jù)包的序列號(hào)curr_Seq ;
步驟S410 :判斷當(dāng)前數(shù)據(jù)包的序列號(hào)是否為上次讀取數(shù)據(jù)包的序列號(hào)加一,判斷 curr_Seq = last_Seq+l,即判斷前后讀取的兩個(gè)數(shù)據(jù)包是否連續(xù),是則執(zhí)行步驟S411,否 則步驟S412 ; 步驟S411 :前后讀取的兩個(gè)數(shù)據(jù)包連續(xù),對(duì)序列號(hào)進(jìn)行更新,last_Seq = curr_
9seq,繼續(xù)執(zhí)行步驟S406 ; 步驟S412 :前后讀取的兩個(gè)數(shù)據(jù)包不連續(xù),從當(dāng)前節(jié)點(diǎn)將該鏈表分為兩部分,當(dāng) 前節(jié)點(diǎn)為不連續(xù)點(diǎn); 步驟S414 :掃描結(jié)束,將不連續(xù)點(diǎn)前的鏈表與order_liSt[n/2]之前的穩(wěn)定段合 并,放入二級(jí)緩沖,將不連續(xù)點(diǎn)后的鏈表放入一級(jí)緩沖中當(dāng)前正在接收的鏈表組的第一個(gè) 節(jié)點(diǎn),以進(jìn)行下一次排序。 下面對(duì)照?qǐng)D4進(jìn)行舉例說(shuō)明假設(shè)每個(gè)接收鏈表組或數(shù)組組能夠容納的最大RTP 數(shù)據(jù)包的數(shù)量為50,需要將序列號(hào)為1-60的60個(gè)RTP數(shù)據(jù)包在網(wǎng)絡(luò)上先后到達(dá)客戶端,其 中序列號(hào)為40的數(shù)據(jù)包在第51個(gè)到達(dá),其它的RTP數(shù)據(jù)包仍然按順序到達(dá)。
按照穩(wěn)定段和非穩(wěn)定段的處理方式,序列號(hào)為1-25的25個(gè)RTP數(shù)據(jù)包直接作為 穩(wěn)定段放入二級(jí)緩沖區(qū)中。后續(xù)的序列號(hào)為26-39和41-51的RTP包屬于非穩(wěn)定段。從序 列號(hào)26的數(shù)據(jù)包進(jìn)行掃描,掃描直到序號(hào)為39的RTP包都是連續(xù)的,它們將和前面的穩(wěn)定 段,即序列號(hào)為1-25的RTP數(shù)據(jù)包合并, 一起放入穩(wěn)定段,而列序號(hào)為41-51的RTP數(shù)據(jù)包 則被放入另一組接收鏈表或數(shù)組的第一個(gè)鏈表。 本實(shí)施例中的二級(jí)緩沖不僅進(jìn)行合并以及排序,還進(jìn)行了分段處理,將合并排序 后的鏈表分為穩(wěn)定段和非穩(wěn)定段,可有效解決亂序包后到達(dá)的問(wèn)題,本實(shí)施例在一級(jí)緩沖 的預(yù)處理后進(jìn)行的二次處理,可以平衡一級(jí)緩沖和二級(jí)緩沖的處理復(fù)雜度,簡(jiǎn)化數(shù)據(jù)包整 體的排序處理過(guò)程,可有效提高整體處理效率。 上述二級(jí)緩沖處理的實(shí)施例中,可以使用合并排序算法來(lái)提高二次緩沖的排序效 率,可以把排序復(fù)雜度降低為O(nlgn) , n指待排序的數(shù)據(jù)的個(gè)數(shù)。與現(xiàn)有技術(shù)中的復(fù)雜度 為0(n2)相比,可以大大提高排序效率。 上述各方法實(shí)施例,在一級(jí)緩沖中有效利用了網(wǎng)絡(luò)數(shù)據(jù)包到達(dá)的時(shí)間間隙進(jìn)行了
數(shù)據(jù)包的預(yù)排序,使其能夠?qū)W(wǎng)絡(luò)接收到的RTP數(shù)據(jù)包進(jìn)行丟包檢測(cè),重復(fù)包丟棄和亂序
包重排等操作,平衡了一級(jí)緩沖和二級(jí)緩沖的處理復(fù)雜度,簡(jiǎn)化了整體排序過(guò)程,提高了整 體處理效率;并且,上述各實(shí)施例可以對(duì)亂序包和錯(cuò)誤包提供較好的處理機(jī)制,對(duì)網(wǎng)絡(luò)流量
變化較大的情況也有很好的適應(yīng)能力。在經(jīng)過(guò)二級(jí)緩沖的處理后,后續(xù)可以直接從二級(jí)緩 沖獲取排序好的RTP數(shù)據(jù)包鏈表,用于后續(xù)的組幀處理和RTCP包生成過(guò)程。本發(fā)明上述 各實(shí)施例中,還可以在一級(jí)緩沖及二級(jí)緩沖過(guò)程中統(tǒng)計(jì)亂序包個(gè)數(shù)、重復(fù)包個(gè)數(shù)、錯(cuò)誤包個(gè) 數(shù),丟失包個(gè)數(shù)等統(tǒng)計(jì)信息,并用于后續(xù)的組幀處理和RTCP包生成過(guò)程。
綜上所述,上述一個(gè)或多個(gè)實(shí)施例具有如下有益效果 1.平衡一級(jí)緩沖和二級(jí)緩沖的處理復(fù)雜度有效地利用了網(wǎng)絡(luò)數(shù)據(jù)包到達(dá)的時(shí) 間間隙進(jìn)行了數(shù)據(jù)包的預(yù)排序,簡(jiǎn)化二級(jí)緩沖的計(jì)算量。 2.提高接收處理效率及運(yùn)算復(fù)雜度二級(jí)緩沖使用合并排序算法可以提高排序 效率,將排序復(fù)雜度降低為O(nlgn)。 3. 二級(jí)緩將合并沖排序鏈表分為穩(wěn)定段和非穩(wěn)定段,有效解決亂序包滯后到達(dá)問(wèn) 題,減少由于數(shù)據(jù)包亂序造成的誤判斷。 4.使用鏈表存儲(chǔ),減少內(nèi)存復(fù)制操作,不會(huì)由于亂序包提前到達(dá)造成正常包無(wú)法 入隊(duì)。 5.由于二級(jí)緩沖采用了鏈表的形式,可以動(dòng)態(tài)修改緩沖的大小,因此對(duì)網(wǎng)絡(luò)流量
10變化較大的情況也有很好的適應(yīng)能力,不會(huì)由于網(wǎng)絡(luò)突發(fā)流量過(guò)大而造成丟包。
裝置實(shí)施例 圖5為根據(jù)本發(fā)明RTP數(shù)據(jù)包接收處理裝置實(shí)施例示意圖,如圖5所示,本實(shí)施例 包括接收單元2,用于從網(wǎng)絡(luò)側(cè)接收RTP數(shù)據(jù)包;一級(jí)緩沖處理單元4,用于對(duì)接收的RTP 數(shù)據(jù)包進(jìn)行一級(jí)緩沖預(yù)排序處理;二次緩沖處理單元6,用于對(duì)一級(jí)緩沖預(yù)排序處理后的 結(jié)果進(jìn)行二級(jí)緩沖處理。 對(duì)于一級(jí)緩沖預(yù)排序處理可參見(jiàn)圖2-圖3方法實(shí)施例的相關(guān)說(shuō)明,二級(jí)緩沖處理 可參見(jiàn)圖4方法實(shí)施例的相關(guān)說(shuō)明,本裝置實(shí)施例具體可以是機(jī)頂盒、手機(jī)等用戶設(shè)備,對(duì) 網(wǎng)絡(luò)側(cè)的RTP數(shù)據(jù)包進(jìn)行接收處理。 圖6為根據(jù)本發(fā)明RTP數(shù)據(jù)包接收處理裝置另一實(shí)施例示意圖,如圖6所示,本實(shí) 施例對(duì)圖5實(shí)施例進(jìn)一步細(xì)化,如圖6所示,一級(jí)緩沖處理單元可以包括
存儲(chǔ)模塊42,用于存儲(chǔ)至少兩個(gè)隊(duì)列組及預(yù)設(shè)的閾值,其中,每個(gè)隊(duì)列組存儲(chǔ)一級(jí) 緩沖預(yù)排序處理及二級(jí)緩沖處理后的RTP數(shù)據(jù)包,預(yù)設(shè)的閾值為每個(gè)隊(duì)列組能存儲(chǔ)的最大 RTP數(shù)據(jù)包的總數(shù)目,隊(duì)列組包括鏈表組和/或數(shù)組組,具體可參見(jiàn)圖2 (a)或圖2 (b);
分析模塊44,用于將當(dāng)前接收的RTP數(shù)據(jù)包的序列號(hào)與上次最后接收的RTP包的 序列號(hào)進(jìn)行比較,將存儲(chǔ)模塊42中存儲(chǔ)的RTP數(shù)據(jù)包總數(shù)目與預(yù)設(shè)的閥值進(jìn)行比較;
處理模塊43,用于接收分析模塊44的比較結(jié)果,對(duì)當(dāng)前接收的RTP數(shù)據(jù)包進(jìn)行一 級(jí)緩沖預(yù)排序并存入存儲(chǔ)模塊42當(dāng)前正在接收RTP數(shù)據(jù)包的隊(duì)列組中,預(yù)排序過(guò)程可參見(jiàn) 圖3實(shí)施例的處理過(guò)程;當(dāng)隊(duì)列組的所有隊(duì)列組已用完,或者RTP數(shù)據(jù)包總數(shù)目大于預(yù)設(shè)的 閥值時(shí),觸發(fā)二次緩沖處理單元,并將當(dāng)前接收到的數(shù)據(jù)包放入存儲(chǔ)模塊42的另一個(gè)隊(duì)列 組中。 如圖6所示,二次緩沖處理單元可以包括合并排序模塊62,用于接收一級(jí)緩沖處 理單元處理模塊43的觸發(fā)消息,如,存儲(chǔ)模塊42中其中一個(gè)鏈表組啟動(dòng)二級(jí)緩沖觸發(fā)合并 排序模塊62,將存儲(chǔ)模塊42中啟動(dòng)二級(jí)緩沖的隊(duì)列組進(jìn)行合并排序,具體參見(jiàn)圖4實(shí)施例 的相關(guān)說(shuō)明;處理模塊64,用于將合并排序后的隊(duì)列分為穩(wěn)定段和非穩(wěn)定段,將非穩(wěn)定段 中RTP數(shù)據(jù)包序列號(hào)的第一個(gè)非連續(xù)點(diǎn)之前的RTP數(shù)據(jù)包與穩(wěn)定段合并,放入二級(jí)緩沖區(qū); 將非穩(wěn)定段的剩余RTP數(shù)據(jù)包放入存儲(chǔ)模塊42中當(dāng)前正在接收數(shù)據(jù)的隊(duì)列組中。
上述方法發(fā)明的圖1-圖4實(shí)施例可以在具備圖5-圖6結(jié)構(gòu)圖所示結(jié)構(gòu)的裝置中 實(shí)現(xiàn)。本發(fā)明的RTP數(shù)據(jù)包接收處理裝置可以為網(wǎng)絡(luò)機(jī)頂盒,手機(jī)等用于流媒體點(diǎn)播/直 播類的客戶端。 綜上所述,上述一個(gè)或多個(gè)方法或裝置實(shí)施例與現(xiàn)有技術(shù)相比。
具有如下優(yōu)點(diǎn) 1.平衡一級(jí)緩沖和二級(jí)緩沖的處理復(fù)雜度。 2.提高接收處理效率及運(yùn)算復(fù)雜度二級(jí)緩沖使用合并排序算法可以提高排序 效率,將排序復(fù)雜度降低為O(nlgn)。 3. 二級(jí)緩將合并沖排序鏈表分為穩(wěn)定段和非穩(wěn)定段,有效解決亂序包滯后到達(dá)問(wèn) 題,減少由于數(shù)據(jù)包亂序造成的誤判斷。 4.使用鏈表存儲(chǔ),減少內(nèi)存復(fù)制操作,不會(huì)由于亂序包提前到達(dá)造成正常包無(wú)法 入隊(duì)。
5.對(duì)網(wǎng)絡(luò)流量變化較大的情況也有很好的適應(yīng)能力,不會(huì)由于網(wǎng)絡(luò)突發(fā)流量過(guò)大 而造成丟包。 本發(fā)明上述各方法和裝置實(shí)施例針對(duì)網(wǎng)絡(luò)質(zhì)量較差,終端處理能力較低的情況, 具有實(shí)際應(yīng)用的市場(chǎng)前景,且具有很強(qiáng)的魯棒性和較低的處理復(fù)雜度。 本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述方法實(shí)施例的全部或部分步驟可以通過(guò) 程序指令相關(guān)的硬件來(lái)完成,前述的程序可以存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中,該程序 在執(zhí)行時(shí),執(zhí)行包括上述方法實(shí)施例的步驟;而前述的存儲(chǔ)介質(zhì)包括R0M、 RAM、磁碟或者 光盤等各種可以存儲(chǔ)程序代碼的介質(zhì)。 最后應(yīng)說(shuō)明的是以上所述僅為本發(fā)明的優(yōu)選實(shí)施例而已,并不用于限制本發(fā)明, 盡管參照前述實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說(shuō)明,對(duì)于本領(lǐng)域的技術(shù)人員來(lái)說(shuō),其依然可 以對(duì)前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分技術(shù)特征進(jìn)行等同替換。 凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的 保護(hù)范圍之內(nèi)。
權(quán)利要求
一種RTP數(shù)據(jù)包接收處理方法,其特征在于,包括從網(wǎng)絡(luò)接收RTP數(shù)據(jù)包;對(duì)接收的所述RTP數(shù)據(jù)包進(jìn)行一級(jí)緩沖預(yù)排序處理;將預(yù)排序處理后的RTP數(shù)據(jù)包進(jìn)行二級(jí)緩沖處理。
2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,采用隊(duì)列組作為一級(jí)緩沖和/或二級(jí)緩 沖,對(duì)接收的所述RTP數(shù)據(jù)包進(jìn)行一級(jí)緩沖預(yù)排序處理和二級(jí)緩沖處理,其中,所述隊(duì)列組 包括鏈表組和/或數(shù)組組。
3. 根據(jù)權(quán)利要求2所述的方法,其特征在于,所述隊(duì)列組至少為兩個(gè),所述對(duì)接收的所 述RTP數(shù)據(jù)包進(jìn)行一級(jí)緩沖預(yù)排序處理的操作包括對(duì)接收的所述RTP數(shù)據(jù)包進(jìn)行一級(jí)緩沖預(yù)排序,將所述RTP數(shù)據(jù)包保存至當(dāng)前正接收 數(shù)據(jù)包的隊(duì)列組的隊(duì)列中,所述隊(duì)列包括鏈表、或者數(shù)組;當(dāng)所述隊(duì)列組的所有隊(duì)列已用完,或者所述隊(duì)列組保存的RTP數(shù)據(jù)包總數(shù)目大于預(yù)設(shè) 的閥值時(shí),所述隊(duì)列組停止接收數(shù)據(jù)包,啟動(dòng)另一個(gè)隊(duì)列組,將當(dāng)前接收到的數(shù)據(jù)包放入所 述另一個(gè)隊(duì)列組中;其中,所述停止接收數(shù)據(jù)包的隊(duì)列組執(zhí)行所述二級(jí)緩沖處理的操作。
4. 根據(jù)權(quán)利要求2或3所述的方法,其特征在于,所述對(duì)接收的所述RTP數(shù)據(jù)包進(jìn)行一 級(jí)緩沖預(yù)排序處理包括若當(dāng)前接收的RTP包序列號(hào)等于上次最后接收的RTP包的序列號(hào),則丟棄; 若當(dāng)前接收的RTP包序列號(hào)大于上次最后接收的RTP包的序列號(hào),則添加到當(dāng)前隊(duì)列組的當(dāng)前隊(duì)列的末尾;若當(dāng)前接收的RTP包序列號(hào)小于上次最后接收的RTP包的序列號(hào),則將當(dāng)前接收的RTP數(shù)據(jù)包放入當(dāng)前隊(duì)列的下一個(gè)隊(duì)列。
5. 根據(jù)權(quán)利要求2或3所述的方法,其特征在于,所述將預(yù)排序處理后的RTP數(shù)據(jù)包進(jìn) 行二級(jí)緩沖處理的操作包括將啟動(dòng)二級(jí)緩沖的隊(duì)列組中的所有隊(duì)列進(jìn)行合并以及排序;將所述合并以及排序后的隊(duì)列分為穩(wěn)定段和非穩(wěn)定段,將所述穩(wěn)定段直接放入二級(jí)緩沖。
6. 根據(jù)權(quán)利要求5所述的方法,其特征在于,所述將預(yù)排序處理后的RTP數(shù)據(jù)包進(jìn)行二 級(jí)緩沖處理的操作還包括按順序讀取所述非穩(wěn)定段中RTP數(shù)據(jù)包的序列號(hào),獲得所述非穩(wěn)定段中RTP數(shù)據(jù)包序 列號(hào)的第一個(gè)非連續(xù)點(diǎn);將所述非穩(wěn)定段中所述第一個(gè)非連續(xù)點(diǎn)之前的RTP數(shù)據(jù)包與所述穩(wěn)定段合并,放入所 述二級(jí)緩沖;將所述非穩(wěn)定段的剩余RTP數(shù)據(jù)包放入當(dāng)前正在接收數(shù)據(jù)的一級(jí)緩沖中。
7. 根據(jù)權(quán)利要求6所述的方法,其特征在于,將所述非穩(wěn)定段的剩余RTP數(shù)據(jù)包放入所 述當(dāng)前正在接收數(shù)據(jù)的一級(jí)緩沖中具體包括將所述剩余RTP數(shù)據(jù)包放入一級(jí)緩沖中當(dāng)前正在接收數(shù)據(jù)包的隊(duì)列組的第一個(gè)隊(duì)列;其中,所述一級(jí)緩沖的每個(gè)隊(duì)列組的第一個(gè)隊(duì)列用于二級(jí)緩沖排序后的剩余RTP數(shù)據(jù) 包組成的隊(duì)列使用。
8. —種RTP數(shù)據(jù)包接收處理裝置,其特征在于,包括接收單元,用于從網(wǎng)絡(luò)側(cè)接收RTP數(shù)據(jù)包;一級(jí)緩沖處理單元,用于對(duì)接收的所述RTP數(shù)據(jù)包進(jìn)行一級(jí)緩沖預(yù)排序處理;二次緩沖處理單元,用于對(duì)一級(jí)緩沖預(yù)排序處理后的結(jié)果進(jìn)行二級(jí)緩沖處理。
9. 根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述一級(jí)緩沖處理單元包括存儲(chǔ)模塊,用于存儲(chǔ)至少兩個(gè)隊(duì)列組及預(yù)設(shè)的閾值,其中,每個(gè)所述隊(duì)列組存儲(chǔ)一級(jí)緩沖預(yù)排序處理及二級(jí)緩沖處理后的RTP數(shù)據(jù)包,所述閾值為每個(gè)所述隊(duì)列組能存儲(chǔ)的最大RTP數(shù)據(jù)包的總數(shù)目,所述隊(duì)列組包括鏈表組和/或數(shù)組組;分析模塊,用于將當(dāng)前接收的RTP數(shù)據(jù)包的序列號(hào)與上次最后接收的RTP包的序列號(hào)進(jìn)行比較,所述存儲(chǔ)模塊中存儲(chǔ)的RTP數(shù)據(jù)包總數(shù)目與所述閥值進(jìn)行比較;處理模塊,用于接收所述分析模塊的比較結(jié)果,對(duì)當(dāng)前接收的RTP數(shù)據(jù)包進(jìn)行一級(jí)緩 沖預(yù)排序并存入所述存儲(chǔ)模塊的隊(duì)列組中;當(dāng)所述隊(duì)列組的所有隊(duì)列已用完,或者RTP數(shù) 據(jù)包總數(shù)目大于預(yù)設(shè)的閥值時(shí),觸發(fā)所述二次緩沖處理單元,并將當(dāng)前接收到的數(shù)據(jù)包放 入所述存儲(chǔ)模塊的另一個(gè)隊(duì)列組中。
10. 根據(jù)權(quán)利要求9所述的裝置,其特征在于,所述二次緩沖處理單元包括合并排序模塊,用于接收所述一級(jí)緩沖處理單元的觸發(fā)消息,將所述存儲(chǔ)模塊中啟動(dòng)二級(jí)緩沖的隊(duì)列組進(jìn)行合并排序;處理模塊,用于將合并排序后的隊(duì)列分為穩(wěn)定段和非穩(wěn)定段,將所述非穩(wěn)定段中RTP 數(shù)據(jù)包序列號(hào)的第一個(gè)非連續(xù)點(diǎn)之前的RTP數(shù)據(jù)包與所述穩(wěn)定段合并,放入二級(jí)緩沖;將所述非穩(wěn)定段的剩余RTP數(shù)據(jù)包放入所述存儲(chǔ)模塊中當(dāng)前正在接收數(shù)據(jù)的隊(duì)列組中。
11. 根據(jù)權(quán)利要求8-10中任一項(xiàng)所述的裝置,其特征在于,所述RTP數(shù)據(jù)包接收處理裝 置設(shè)置于用于流媒體點(diǎn)播/直播類的客戶端設(shè)備中,所述客戶端設(shè)備包括網(wǎng)絡(luò)機(jī)頂盒、手 機(jī)終端。
全文摘要
本發(fā)明公開了一種RTP數(shù)據(jù)包接收處理方法及裝置,其中,該方法包括從網(wǎng)絡(luò)接收RTP數(shù)據(jù)包;對(duì)接收的RTP數(shù)據(jù)包進(jìn)行一級(jí)緩沖預(yù)排序處理;將預(yù)排序處理后的RTP數(shù)據(jù)包進(jìn)行二級(jí)緩沖處理。其中,采用隊(duì)列組作為一級(jí)緩沖,對(duì)接收的RTP數(shù)據(jù)包進(jìn)行一級(jí)緩沖預(yù)排序處理,其中,隊(duì)列組包括鏈表組、數(shù)組組。本發(fā)明可解決現(xiàn)有技術(shù)中RTP接收處理方式處理效率低的缺陷,實(shí)現(xiàn)提高RTP數(shù)據(jù)包的接收處理效率。
文檔編號(hào)H04L29/06GK101771599SQ200810241110
公開日2010年7月7日 申請(qǐng)日期2008年12月26日 優(yōu)先權(quán)日2008年12月26日
發(fā)明者于蓉蓉, 楊黎波, 袁潮, 郭毅峰, 黃曉偉 申請(qǐng)人:中國(guó)移動(dòng)通信集團(tuán)公司