本發(fā)明涉及計算機數(shù)據(jù)處理技術領域,具體而言,涉及一種數(shù)據(jù)包處理方法及裝置。
背景技術:
近年來,移動互聯(lián)網(wǎng)音視頻直播業(yè)務在教育、醫(yī)療、娛樂和體育等行業(yè)呈現(xiàn)井噴式增長,作為一種典型的實時多媒體通信業(yè)務,視頻直播具有時效性、廣播性、數(shù)據(jù)速率的相對穩(wěn)定性等特性。
視頻直播的主要過程為,數(shù)據(jù)源端將實時視頻數(shù)據(jù)發(fā)送至視頻直播服務器,視頻直播服務器接收數(shù)據(jù)源端發(fā)送的實時視頻數(shù)據(jù),并發(fā)送至播放端進行播放,其中,視頻直播服務器作為數(shù)據(jù)源端和播放端之間的數(shù)據(jù)中轉媒介,需要實時存儲一定量的數(shù)據(jù),以響應播放端的重傳請求。相關技術中,視頻直播服務器通常采用順序存儲的方式存儲接收到的數(shù)據(jù)包,具體過程為,視頻直播服務器內(nèi)設置有數(shù)組,視頻直播服務器按照接收數(shù)據(jù)包的時間先后順序,將各個數(shù)據(jù)包依次存儲在數(shù)組中,且各個數(shù)據(jù)包在數(shù)組中的順序與各個數(shù)據(jù)包的接收順序一致。
由于相關技術中視頻直播服務器存儲數(shù)據(jù)包時,各個數(shù)據(jù)包在數(shù)組中的順序與各個數(shù)據(jù)包的接收順序一致,而視頻直播服務器接收數(shù)據(jù)包的時間先后順序與各個數(shù)據(jù)包之間的序號順序可能并不一致,如視頻直播服務器先接收到序號為3的數(shù)據(jù)包,再接收到序號為2的數(shù)據(jù)包,因此采用相關技術中的存儲方式可能導致各個數(shù)據(jù)包在數(shù)組中的順序與各個數(shù)據(jù)包之間的序號順序不一致,如數(shù)組內(nèi)序號為3的數(shù)據(jù)包在序號為2的數(shù)據(jù)包之前,導致查找某個序號的數(shù)據(jù)包時需要從數(shù)組的起始元素遍歷到數(shù)組的結束元素,查找的時間復雜度高,查找效率低,不便于數(shù)據(jù)包的查找。
針對上述提到的相關技術中查找某個序號的數(shù)據(jù)包時,查找的時間復雜度高,查找效率低,不便于數(shù)據(jù)包查找的問題,目前尚未提出有效解決方案。
技術實現(xiàn)要素:
有鑒于此,本發(fā)明的目的在于提供一種數(shù)據(jù)包處理方法及裝置,以解決相關技術中查找某個序號的數(shù)據(jù)包時,查找的時間復雜度高,查找效率低,不便于數(shù)據(jù)包查找的問題。
第一方面,本發(fā)明實施例提供了一種數(shù)據(jù)包處理方法,所述方法包括:獲取待存儲數(shù)據(jù)包以及所述待存儲數(shù)據(jù)包攜帶的待存儲數(shù)據(jù)包序號,所述待存儲數(shù)據(jù)包包括直播視頻流的數(shù)據(jù)包;提供用于存儲所述待存儲數(shù)據(jù)包的第一數(shù)組,根據(jù)所述第一數(shù)組的長度值和所述待存儲數(shù)據(jù)包序號,確定所述第一數(shù)組中用于存儲所述待存儲數(shù)據(jù)包的第一位置和所述待存儲數(shù)據(jù)包對應的掩碼值;提供用于存儲所述待存儲數(shù)據(jù)包對應的掩碼值的第二數(shù)組,將所述待存儲數(shù)據(jù)包存儲于所述第一數(shù)組中所述第一位置對應的存儲空間內(nèi),將所述待存儲數(shù)據(jù)包對應的掩碼值存儲在所述第二數(shù)組中、與所述第一位置相同位置對應的存儲空間內(nèi);獲取待查找數(shù)據(jù)包攜帶的待查找數(shù)據(jù)包序號,所述待查找數(shù)據(jù)包包括直播視頻流的數(shù)據(jù)包;根據(jù)所述第一數(shù)組的長度值和所述待查找數(shù)據(jù)包序號,確定所述第一數(shù)組中用于存儲所述待查找數(shù)據(jù)包的第二位置和所述待查找數(shù)據(jù)包對應的掩碼值,根據(jù)所述第二位置和所述待查找數(shù)據(jù)包對應的掩碼值,判斷所述待查找數(shù)據(jù)包是否存儲于所述第一數(shù)組中。
結合第一方面,本發(fā)明實施例提供了第一方面第一種可能的實施方式,其中,所述根據(jù)所述第二位置和所述待查找數(shù)據(jù)包對應的掩碼值,判斷所述待查找數(shù)據(jù)包是否存儲于所述第一數(shù)組中,包括:查找所述第二數(shù)組中與所述第二位置相同位置對應的存儲空間,判斷查找到的所述存儲空間內(nèi)存儲的內(nèi)容是否為所述待查找數(shù)據(jù)包對應的掩碼值;若是,則確定所述待查找數(shù)據(jù)包存儲在所述第一數(shù)組中所述第二位置對應的存儲空間內(nèi),否則,確定所述待查找數(shù)據(jù)包未存儲在所述第一數(shù)組中。
結合第一方面,本發(fā)明實施例提供了第一方面第二種可能的實施方式,其中,所述根據(jù)所述第一數(shù)組的長度值和所述待存儲數(shù)據(jù)包序號,確定所述第一數(shù)組中用于存儲所述待存儲數(shù)據(jù)包的第一位置和所述待存儲數(shù)據(jù)包對應的掩碼值,包括:計算所述待存儲數(shù)據(jù)包序號相對于所述第一數(shù)組的長度值的取模結果和整除結果,將下標為所述取模結果的位置作為所述第一數(shù)組中用于存儲所述待存儲數(shù)據(jù)包的第一位置,將所述整除結果作為所述待存儲數(shù)據(jù)包對應的掩碼值。
結合第一方面,本發(fā)明實施例提供了第一方面第三種可能的實施方式,其中,所述獲取待查找數(shù)據(jù)包攜帶的待查找數(shù)據(jù)包序號,包括:判斷當前接收到的直播視頻流的數(shù)據(jù)包攜帶的數(shù)據(jù)包序號與前一個接收到的直播視頻流的數(shù)據(jù)包攜帶的數(shù)據(jù)包序號是否連續(xù);若不連續(xù),則將數(shù)據(jù)包序號位于前一個所述數(shù)據(jù)包序號和當前的所述數(shù)據(jù)包序號之間的直播視頻流的數(shù)據(jù)包確定為所述待查找數(shù)據(jù)包,將位于前一個所述數(shù)據(jù)包序號和當前的所述數(shù)據(jù)包序號之間的數(shù)據(jù)包序號確定為所述待查找數(shù)據(jù)包攜帶的所述待查找數(shù)據(jù)包序號。
結合第一方面,本發(fā)明實施例提供了第一方面第四種可能的實施方式,其中,所述將所述待存儲數(shù)據(jù)包存儲于所述第一數(shù)組中所述第一位置對應的存儲空間內(nèi),包括:利用所述待存儲數(shù)據(jù)包覆蓋所述第一數(shù)組中所述第一位置對應的存儲空間內(nèi)的內(nèi)容,將所述待存儲數(shù)據(jù)包存儲于所述第一數(shù)組中所述第一位置對應的存儲空間內(nèi)。
第二方面,本發(fā)明實施例提供了一種數(shù)據(jù)包處理裝置,所述裝置包括:第一獲取模塊,用于獲取待存儲數(shù)據(jù)包以及所述待存儲數(shù)據(jù)包攜帶的待存儲數(shù)據(jù)包序號,所述待存儲數(shù)據(jù)包包括直播視頻流的數(shù)據(jù)包;確定模塊,用于提供用于存儲所述待存儲數(shù)據(jù)包的第一數(shù)組,根據(jù)所述第一數(shù)組的長度值和所述待存儲數(shù)據(jù)包序號,確定所述第一數(shù)組中用于存儲所述待存儲數(shù)據(jù)包的第一位置和所述待存儲數(shù)據(jù)包對應的掩碼值;存儲模塊,用于提供用于存儲所述待存儲數(shù)據(jù)包對應的掩碼值的第二數(shù)組,將所述待存儲數(shù)據(jù)包存儲于所述第一數(shù)組中所述第一位置對應的存儲空間內(nèi),將所述待存儲數(shù)據(jù)包對應的掩碼值存儲在所述第二數(shù)組中、與所述第一位置相同位置對應的存儲空間內(nèi);第二獲取模塊,用于獲取待查找數(shù)據(jù)包攜帶的待查找數(shù)據(jù)包序號,所述待查找數(shù)據(jù)包包括直播視頻流的數(shù)據(jù)包;查找模塊,用于根據(jù)所述第一數(shù)組的長度值和所述待查找數(shù)據(jù)包序號,確定所述第一數(shù)組中用于存儲所述待查找數(shù)據(jù)包的第二位置和所述待查找數(shù)據(jù)包對應的掩碼值,根據(jù)所述第二位置和所述待查找數(shù)據(jù)包對應的掩碼值,判斷所述待查找數(shù)據(jù)包是否存儲于所述第一數(shù)組中。
結合第二方面,本發(fā)明實施例提供了第二方面第一種可能的實施方式,其中,所述查找模塊包括:內(nèi)容判斷子模塊,用于查找所述第二數(shù)組中與所述第二位置相同位置對應的存儲空間,判斷查找到的所述存儲空間內(nèi)存儲的內(nèi)容是否為所述待查找數(shù)據(jù)包對應的掩碼值;結果確定子模塊,用于若是,則確定所述待查找數(shù)據(jù)包存儲在所述第一數(shù)組中所述第二位置對應的存儲空間內(nèi),否則,確定所述待查找數(shù)據(jù)包未存儲在所述第一數(shù)組中。
結合第二方面,本發(fā)明實施例提供了第二方面第二種可能的實施方式,其中,所述確定模塊包括:計算子模塊,用于計算所述待存儲數(shù)據(jù)包序號相對于所述第一數(shù)組的長度值的取模結果和整除結果,將下標為所述取模結果的位置作為所述第一數(shù)組中用于存儲所述待存儲數(shù)據(jù)包的第一位置,將所述整除結果作為所述待存儲數(shù)據(jù)包對應的掩碼值。
結合第二方面,本發(fā)明實施例提供了第二方面第三種可能的實施方式,其中,所述第二獲取模塊包括:連續(xù)判斷子模塊,用于判斷當前接收到的直播視頻流的數(shù)據(jù)包攜帶的數(shù)據(jù)包序號與前一個接收到的直播視頻流的數(shù)據(jù)包攜帶的數(shù)據(jù)包序號是否連續(xù);序號確定子模塊,用于若不連續(xù),則將數(shù)據(jù)包序號位于前一個所述數(shù)據(jù)包序號和當前的所述數(shù)據(jù)包序號之間的直播視頻流的數(shù)據(jù)包確定為所述待查找數(shù)據(jù)包,將位于前一個所述數(shù)據(jù)包序號和當前的所述數(shù)據(jù)包序號之間的數(shù)據(jù)包序號確定為所述待查找數(shù)據(jù)包攜帶的所述待查找數(shù)據(jù)包序號。
結合第二方面,本發(fā)明實施例提供了第二方面第四種可能的實施方式,其中,所述存儲模塊包括:覆蓋存儲子模塊,用于利用所述待存儲數(shù)據(jù)包覆蓋所述第一數(shù)組中所述第一位置對應的存儲空間內(nèi)的內(nèi)容,將所述待存儲數(shù)據(jù)包存儲于所述第一數(shù)組中所述第一位置對應的存儲空間內(nèi)。
本發(fā)明實施例的數(shù)據(jù)包處理方法及裝置,在存儲數(shù)據(jù)包時,首先確定數(shù)據(jù)包的存儲位置和掩碼值,然后在第一數(shù)組中該存儲位置存儲數(shù)據(jù)包,在第二數(shù)組的該存儲位置中存儲該掩碼值,依靠這種對應存儲的方式,在查找某個數(shù)據(jù)包時,只需要計算數(shù)據(jù)包對應的掩碼值和存儲位置,根據(jù)該掩碼值和存儲位置就能夠判斷出該數(shù)據(jù)包是否被存儲,無需在存儲數(shù)據(jù)包的數(shù)組中從數(shù)組的起始元素遍歷到數(shù)組的結束元素,因此能夠降低時間復雜度,提高數(shù)據(jù)包的查找效率,解決相關技術中查找某個序號的數(shù)據(jù)包時,查找的時間復雜度高,查找效率低,不便于數(shù)據(jù)包查找的問題。
為使本發(fā)明的上述目的、特征和優(yōu)點能更明顯易懂,下文特舉較佳實施例,并配合所附附圖,作詳細說明如下。
附圖說明
為了更清楚地說明本發(fā)明實施例的技術方案,下面將對實施例中所需要使用的附圖作簡單地介紹,應當理解,以下附圖僅示出了本發(fā)明的某些實施例,因此不應被看作是對范圍的限定,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他相關的附圖。
圖1為本發(fā)明實施例提供的數(shù)據(jù)包處理方法的流程示意圖;
圖2為本發(fā)明實施例提供的第二數(shù)據(jù)存儲待存儲數(shù)據(jù)包對應的掩碼值的示意圖;
圖3為本發(fā)明實施例提供的數(shù)據(jù)包處理裝置的第一種結構示意圖;
圖4為本發(fā)明實施例提供的數(shù)據(jù)包處理裝置的第二種結構示意圖。
具體實施方式
為使本發(fā)明實施例的目的、技術方案和優(yōu)點更加清楚,下面將結合本發(fā)明實施例中附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例。通常在此處附圖中描述和示出的本發(fā)明實施例的組件可以以各種不同的配置來布置和設計。因此,以下對在附圖中提供的本發(fā)明的實施例的詳細描述并非旨在限制要求保護的本發(fā)明的范圍,而是僅僅表示本發(fā)明的選定實施例?;诒景l(fā)明的實施例,本領域技術人員在沒有做出創(chuàng)造性勞動的前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
考慮到相關技術中查找某個序號的數(shù)據(jù)包時,查找的時間復雜度高,查找效率低,不便于數(shù)據(jù)包查找的問題,本發(fā)明提供了一種數(shù)據(jù)包處理方法及裝置,下面通過實施例進行具體描述。
圖1為本發(fā)明實施例提供的數(shù)據(jù)包處理方法的流程示意圖,該方法應用于服務器側,如圖1所示,該方法包括以下步驟:
步驟S102,獲取待存儲數(shù)據(jù)包以及該待存儲數(shù)據(jù)包攜帶的待存儲數(shù)據(jù)包序號,該待存儲數(shù)據(jù)包包括直播視頻流的數(shù)據(jù)包。
以視頻直播為例,服務器獲取視頻源對應的終端發(fā)送的直播視頻流的數(shù)據(jù)包,將該數(shù)據(jù)包作為待存儲數(shù)據(jù)包,每個待存儲數(shù)據(jù)包都攜帶有唯一的一個序號,該序號為待存儲數(shù)據(jù)包序號,在采用數(shù)組存儲各個待存儲數(shù)據(jù)包時,理想狀態(tài)下,按照各個待存儲數(shù)據(jù)包序號存儲各個待存儲數(shù)據(jù)包,使得在服務器內(nèi),各個待存儲數(shù)據(jù)包在數(shù)組內(nèi)的順序與各個待存儲數(shù)據(jù)包序號的順序一致。其中,待存儲數(shù)據(jù)包的待存儲數(shù)據(jù)包序號可以是視頻源對應的終端在發(fā)送數(shù)據(jù)包時定義的。
步驟S104,提供用于存儲待存儲數(shù)據(jù)包的第一數(shù)組,根據(jù)第一數(shù)組的長度值和待存儲數(shù)據(jù)包序號,確定第一數(shù)組中用于存儲待存儲數(shù)據(jù)包的第一位置和待存儲數(shù)據(jù)包對應的掩碼值。
在獲取待存儲數(shù)據(jù)包以及待存儲數(shù)據(jù)包序號后,提供用于存儲待存儲數(shù)據(jù)包的第一數(shù)組,第一數(shù)組中包括多個數(shù)組元素,第一數(shù)組的長度為數(shù)組元素的數(shù)量和。在利用數(shù)組存儲數(shù)據(jù)時,首先確定存儲位置,如數(shù)組包括a1、a2、a3三個數(shù)組元素,每個數(shù)組元素對應一個存儲位置,假設確定存儲位置為a2,在確定存儲位置后,將被存儲的數(shù)據(jù)賦值給a2,從而將被存儲的數(shù)據(jù)存儲在位置a2對應的存儲空間內(nèi)。
本步驟中,根據(jù)第一數(shù)組的長度值和待存儲數(shù)據(jù)包序號,確定第一數(shù)組中用于存儲待存儲數(shù)據(jù)包的第一位置和待存儲數(shù)據(jù)包對應的掩碼值,具體過程為:計算待存儲數(shù)據(jù)包序號相對于第一數(shù)組的長度值的取模結果和整除結果,將下標為取模結果的位置確定第一數(shù)組中用于存儲待存儲數(shù)據(jù)包的第一位置,將整除結果作為待存儲數(shù)據(jù)包對應的掩碼值。
具體地,第一數(shù)組中包括多個數(shù)組元素,第一數(shù)組的長度為數(shù)組元素的數(shù)量和。設定待存儲數(shù)據(jù)包序號為seq,第一數(shù)組的長度為size,經(jīng)過以下取模和整除的運算:
index=seq%size
mask=seq/size
能夠得到index和mask,其中,index可以理解為索引值,表示第一數(shù)組中用于存儲待存儲數(shù)據(jù)包的第一位置的下標,mask為待存儲數(shù)據(jù)包對應的掩碼值。需要說明的是,第一數(shù)組中各個數(shù)組元素從0開始計算下標,當index為0時,表示下標為0的位置,當index為1時,表示下標為1的位置,以此類推。
步驟S106,提供用于存儲待存儲數(shù)據(jù)包對應的掩碼值的第二數(shù)組,將待存儲數(shù)據(jù)包存儲于第一數(shù)組中第一位置對應的存儲空間內(nèi),將待存儲數(shù)據(jù)包對應的掩碼值存儲在第二數(shù)組中、與第一位置相同位置對應的存儲空間內(nèi)。
在確定第一位置和掩碼值之后,將待存儲數(shù)據(jù)包存儲于第一數(shù)組中第一位置對應的存儲空間內(nèi),將待存儲數(shù)據(jù)包對應的掩碼值存儲在第二數(shù)組中、與第一位置相同位置對應的存儲空間內(nèi),其中,第二數(shù)組與第一數(shù)組長度相同,并各個數(shù)組元素一一對應,且第二數(shù)組與第一數(shù)組中數(shù)組元素的下標均從0開始。其中,第一數(shù)組和第二數(shù)組中元素的數(shù)量可以根據(jù)需要任意設定。
本實施例中,將待存儲數(shù)據(jù)包存儲于第一數(shù)組中第一位置對應的存儲空間內(nèi),包括:利用待存儲數(shù)據(jù)包覆蓋第一數(shù)組中第一位置對應的存儲空間內(nèi)的內(nèi)容,將待存儲數(shù)據(jù)包存儲于第一數(shù)組中第一位置對應的存儲空間內(nèi),并且,將該待存儲數(shù)據(jù)包作為第一數(shù)組中第一位置對應的元素。
比如,確定第一位置的下標為5,則將待存儲數(shù)據(jù)包存儲于第一數(shù)組中下標為5的位置對應的存儲空間內(nèi),并將該待存儲數(shù)據(jù)包作為第一數(shù)組中下標為5的元素。
本實施例中,采用數(shù)據(jù)覆蓋的形式存儲待存儲數(shù)據(jù)包,同時,也采用數(shù)據(jù)覆蓋的形式存儲掩碼值。
圖2為本發(fā)明實施例提供的第二數(shù)據(jù)存儲待存儲數(shù)據(jù)包對應的掩碼值的示意圖。圖2中,第二數(shù)組包括6個數(shù)組元素,也即包括6個存儲位置,由于第一數(shù)組的布局與第二數(shù)組除了占用空間存在差異外,排列布局完全一致,因此圖中省略第一數(shù)組。
在存儲序號為233的數(shù)據(jù)包時,計算得到index為5、mask為38,因此將數(shù)據(jù)包存儲在第一數(shù)組中下標為5的位置,將“38”存儲在第二數(shù)組中下標為5的位置。
同理,在存儲序號為235的數(shù)據(jù)包時,計算得到index為1、mask為39,因此將數(shù)據(jù)包存儲在第一數(shù)組中下標為1的位置,將“39”存儲在第二數(shù)組中下標為1的位置。
同理,在存儲序號為234的數(shù)據(jù)包時,計算得到index為0、mask為39,因此將數(shù)據(jù)包存儲在第一數(shù)組中的下標為0的位置,將“39”存儲在第二數(shù)組中下標為0的位置。如此類推,將序號為236、237、238的數(shù)據(jù)包依次存儲在第一數(shù)組中,將對應的掩碼值依次存儲在第二數(shù)組中。
圖2中,步驟3和4展示了亂序插入序號為235和234的數(shù)據(jù)包,步驟8示例了序號為239的數(shù)據(jù)包替代序號為233的數(shù)據(jù)包的過程,據(jù)此可以看出,掩碼值在存儲時覆蓋存儲空間內(nèi)之前存儲的內(nèi)容,使得掩碼值的存儲符合數(shù)據(jù)先入先出的原則,同樣地,數(shù)據(jù)包在存儲時覆蓋存儲空間內(nèi)之前存儲的內(nèi)容,使得數(shù)據(jù)包的存儲符合數(shù)據(jù)先入先出的原則,并且使得數(shù)據(jù)包和掩碼值的刪除無需額外操作。
由圖2可知,序號相鄰的數(shù)據(jù)包,數(shù)組的存儲位置也相鄰,或者首位相接;先后被寫入相同index位置的數(shù)據(jù)包,可以通過mask值的不同來區(qū)分,便于數(shù)據(jù)包序號的區(qū)分。
本實施例中,第二數(shù)組每個元素占用的比特數(shù)n,只需滿足n>log(max(seq))/size即可;例如RTP協(xié)議定義的包序號為2個字節(jié),取值范圍0到65535,若數(shù)據(jù)包存儲數(shù)組長度為512,則n只需要7比特,即一個字節(jié)即可;當size取1時,n得到最大值16,此時每個掩碼值也僅需要2個字節(jié)。由此可知,第二數(shù)組所占用的存儲空間較小,不會對存儲數(shù)據(jù)包造成影響,也不會影響數(shù)據(jù)包存儲的效率。
步驟S108,獲取待查找數(shù)據(jù)包攜帶的待查找數(shù)據(jù)包序號,該待查找數(shù)據(jù)包包括直播視頻流的數(shù)據(jù)包。
在服務器存儲數(shù)據(jù)包的過程中,最常用到的是查找數(shù)據(jù)包,即在獲知某個數(shù)據(jù)包的序號時,查找該序號的數(shù)據(jù)包是否存儲。
本步驟中,通過以下方式獲取待查找數(shù)據(jù)包攜帶的待查找數(shù)據(jù)包序號:
(1)判斷當前接收到的直播視頻流的數(shù)據(jù)包攜帶的數(shù)據(jù)包序號與前一個接收到的直播視頻流的數(shù)據(jù)包攜帶的數(shù)據(jù)包序號是否連續(xù);
(2)若不連續(xù),則將數(shù)據(jù)包序號位于前一個數(shù)據(jù)包序號和當前的數(shù)據(jù)包序號之間的直播視頻流的數(shù)據(jù)包確定為待查找數(shù)據(jù)包,將位于前一個數(shù)據(jù)包序號和當前的數(shù)據(jù)包序號之間的數(shù)據(jù)包序號確定為待查找數(shù)據(jù)包攜帶的待查找數(shù)據(jù)包序號。
服務器在接收直播視頻流的數(shù)據(jù)包的過程中,若發(fā)現(xiàn)當前接收到的數(shù)據(jù)包的數(shù)據(jù)包序號與前一個接收到的數(shù)據(jù)包的數(shù)據(jù)包序號不連續(xù),則將二者之間的數(shù)據(jù)包確定為待查找數(shù)據(jù)包,同時將二者之間的序號確定為待查找數(shù)據(jù)包攜帶的待查找數(shù)據(jù)包序號。
比如,服務器當前接收到序號為3的數(shù)據(jù)包,前一個接收到序號為1的數(shù)據(jù)包,因此將序號為2的數(shù)據(jù)包確定為待查找數(shù)據(jù)包,將“2”確定為待查找數(shù)據(jù)包攜帶的待查找數(shù)據(jù)包序號。
又如,服務器當前接收到序號為4的數(shù)據(jù)包,前一個接收到序號為1的數(shù)據(jù)包,因此將序號為2、3的數(shù)據(jù)包確定為待查找數(shù)據(jù)包,將“2和3”確定為待查找數(shù)據(jù)包攜帶的待查找數(shù)據(jù)包序號。
步驟S110,根據(jù)第一數(shù)組的長度值和待查找數(shù)據(jù)包序號,確定第一數(shù)組中用于存儲待查找數(shù)據(jù)包的第二位置和待查找數(shù)據(jù)包對應的掩碼值,根據(jù)該第二位置和待查找數(shù)據(jù)包對應的掩碼值,判斷待查找數(shù)據(jù)包是否存儲于第一數(shù)組中。
由于本實施例中在存儲數(shù)據(jù)包時,先計算取模結果和整除結果,將下標為取模結果的位置作為數(shù)據(jù)包的存儲位置,將整除結果作為數(shù)據(jù)包對應的掩碼值,并在第一數(shù)組的該存儲位置中存儲數(shù)據(jù)包,在第二數(shù)據(jù)的該存儲位置中存儲掩碼值,因此在查找數(shù)據(jù)包時,只需要獲知該被查找數(shù)據(jù)包的存儲位置和掩碼值,并判斷第二數(shù)組中該存儲位置存儲的是否為正確的掩碼值即可。
因此本步驟中,根據(jù)第一數(shù)組的長度值和待查找數(shù)據(jù)包序號,確定第一數(shù)組中用于存儲待查找數(shù)據(jù)包的第二位置和待查找數(shù)據(jù)包對應的掩碼值,具體過程為,計算待查找數(shù)據(jù)包序號相對于第一數(shù)組的長度值的取模結果和整除結果,將下標為該取模結果的位置作為第一數(shù)組中用于存儲待查找數(shù)據(jù)包的第二位置,將整除結果作為待查找數(shù)據(jù)包對應的掩碼值。
然后,根據(jù)該第二位置和待查找數(shù)據(jù)包對應的掩碼值,判斷待查找數(shù)據(jù)包是否存儲于第一數(shù)組中,具體為,查找第二數(shù)組中與第二位置相同位置對應的存儲空間,判斷查找到的存儲空間內(nèi)存儲的內(nèi)容是否為待查找數(shù)據(jù)包對應的掩碼值;若是,則確定待查找數(shù)據(jù)包存儲在第一數(shù)組中第二位置對應的存儲空間內(nèi),否則,確定待查找數(shù)據(jù)包未存儲在第一數(shù)組中。
比如,計算得到待查找數(shù)據(jù)包相對于第一數(shù)組的長度值的取模結果為3,整除結果為60,則判斷第二數(shù)組中下標為3的位置對應的存儲空間內(nèi)存儲的是否為60,若是,確定待查找數(shù)據(jù)包存儲在第一數(shù)組中下標為3的位置對應的存儲空間內(nèi),否則,確定待查找數(shù)據(jù)包未存儲在第一數(shù)組中。
本實施例中,在存儲數(shù)據(jù)包時,首先確定數(shù)據(jù)包的存儲位置和掩碼值,然后在第一數(shù)組中該存儲位置存儲數(shù)據(jù)包,在第二數(shù)組的該存儲位置中存儲該掩碼值,依靠這種對應存儲的方式,在查找某個數(shù)據(jù)包時,只需要計算數(shù)據(jù)包對應的掩碼值和存儲位置,根據(jù)該掩碼值和存儲位置就能夠判斷出該數(shù)據(jù)包是否被存儲,無需在存儲數(shù)據(jù)包的數(shù)組中從數(shù)組的起始元素遍歷到數(shù)組的結束元素,因此能夠降低時間復雜度,提高數(shù)據(jù)包的查找效率,解決相關技術中查找某個序號的數(shù)據(jù)包時,查找的時間復雜度高,查找效率低,不便于數(shù)據(jù)包查找的問題。
本發(fā)明的核心在于引入了第二數(shù)組來控制數(shù)據(jù)包隊列的訪問,與相關技術中的順序存儲、基于平衡二叉樹的關聯(lián)存儲容器存儲、基于哈希表的散列存儲容器存儲方式相比,本實施例中的數(shù)據(jù)包處理方法能夠降低時間復雜度、并且支持先入先出的存儲方式、而且支持正序遍歷,并且由于第二數(shù)組僅占用很小的存儲空間,因此除了數(shù)據(jù)包本身的存儲空間之外,只額外消耗極少的存儲空間即可實現(xiàn),不僅滿足視頻直播服務器數(shù)據(jù)緩存隊列的所有需求,并且達到了時間復雜度和空間復雜度最優(yōu)的性能。
對應上述的數(shù)據(jù)包處理方法,本發(fā)明實施例還提供了一種數(shù)據(jù)包處理裝置,圖3為本發(fā)明實施例提供的數(shù)據(jù)包處理裝置的第一種結構示意圖,如圖3所示,該裝置包括:
第一獲取模塊31,用于獲取待存儲數(shù)據(jù)包以及所述待存儲數(shù)據(jù)包攜帶的待存儲數(shù)據(jù)包序號,所述待存儲數(shù)據(jù)包包括直播視頻流的數(shù)據(jù)包;
確定模塊32,用于提供用于存儲所述待存儲數(shù)據(jù)包的第一數(shù)組,根據(jù)所述第一數(shù)組的長度值和所述待存儲數(shù)據(jù)包序號,確定所述第一數(shù)組中用于存儲所述待存儲數(shù)據(jù)包的第一位置和所述待存儲數(shù)據(jù)包對應的掩碼值;
存儲模塊33,用于提供用于存儲所述待存儲數(shù)據(jù)包對應的掩碼值的第二數(shù)組,將所述待存儲數(shù)據(jù)包存儲于所述第一數(shù)組中所述第一位置對應的存儲空間內(nèi),將所述待存儲數(shù)據(jù)包對應的掩碼值存儲在所述第二數(shù)組中、與所述第一位置相同位置對應的存儲空間內(nèi);
第二獲取模塊34,用于獲取待查找數(shù)據(jù)包攜帶的待查找數(shù)據(jù)包序號,所述待查找數(shù)據(jù)包包括直播視頻流的數(shù)據(jù)包;
查找模塊35,用于根據(jù)所述第一數(shù)組的長度值和所述待查找數(shù)據(jù)包序號,確定所述第一數(shù)組中用于存儲所述待查找數(shù)據(jù)包的第二位置和所述待查找數(shù)據(jù)包對應的掩碼值,根據(jù)所述第二位置和所述待查找數(shù)據(jù)包對應的掩碼值,判斷所述待查找數(shù)據(jù)包是否存儲于所述第一數(shù)組中。
圖4為本發(fā)明實施例提供的數(shù)據(jù)包處理裝置的第二種結構示意圖,如圖4所示:
確定模塊32包括:計算子模塊321,用于計算所述待存儲數(shù)據(jù)包序號相對于所述第一數(shù)組的長度值的取模結果和整除結果,將下標為所述取模結果的位置作為所述第一數(shù)組中用于存儲所述待存儲數(shù)據(jù)包的第一位置,將所述整除結果作為所述待存儲數(shù)據(jù)包對應的掩碼值。
存儲模塊33包括:覆蓋存儲子模塊331,用于利用所述待存儲數(shù)據(jù)包覆蓋所述第一數(shù)組中所述第一位置對應的存儲空間內(nèi)的內(nèi)容,將所述待存儲數(shù)據(jù)包存儲于所述第一數(shù)組中所述第一位置對應的存儲空間內(nèi)。
第二獲取模塊34包括:連續(xù)判斷子模塊341,用于判斷當前接收到的直播視頻流的數(shù)據(jù)包攜帶的數(shù)據(jù)包序號與前一個接收到的直播視頻流的數(shù)據(jù)包攜帶的數(shù)據(jù)包序號是否連續(xù);序號確定子模塊342,用于若不連續(xù),則將數(shù)據(jù)包序號位于前一個所述數(shù)據(jù)包序號和當前的所述數(shù)據(jù)包序號之間的直播視頻流的數(shù)據(jù)包確定為所述待查找數(shù)據(jù)包,將位于前一個所述數(shù)據(jù)包序號和當前的所述數(shù)據(jù)包序號之間的數(shù)據(jù)包序號確定為所述待查找數(shù)據(jù)包攜帶的所述待查找數(shù)據(jù)包序號。
查找模塊35包括:內(nèi)容判斷子模塊351,用于查找所述第二數(shù)組中與所述第二位置相同位置對應的存儲空間,判斷查找到的所述存儲空間內(nèi)存儲的內(nèi)容是否為所述待查找數(shù)據(jù)包對應的掩碼值;結果確定子模塊352,用于若是,則確定所述待查找數(shù)據(jù)包存儲在所述第一數(shù)組中所述第二位置對應的存儲空間內(nèi),否則,確定所述待查找數(shù)據(jù)包未存儲在所述第一數(shù)組中。
本發(fā)明實施例的數(shù)據(jù)包處理裝置,在存儲數(shù)據(jù)包時,首先確定數(shù)據(jù)包的存儲位置和掩碼值,然后在第一數(shù)組中該存儲位置存儲數(shù)據(jù)包,在第二數(shù)組的該存儲位置中存儲該掩碼值,依靠這種對應存儲的方式,在查找某個數(shù)據(jù)包時,只需要計算數(shù)據(jù)包對應的掩碼值和存儲位置,根據(jù)該掩碼值和存儲位置就能夠判斷出該數(shù)據(jù)包是否被存儲,無需在存儲數(shù)據(jù)包的數(shù)組中從數(shù)組的起始元素遍歷到數(shù)組的結束元素,因此能夠降低時間復雜度,提高數(shù)據(jù)包的查找效率,解決相關技術中查找某個序號的數(shù)據(jù)包時,查找的時間復雜度高,查找效率低,不便于數(shù)據(jù)包查找的問題。
本發(fā)明的核心在于引入了第二數(shù)組來控制數(shù)據(jù)包隊列的訪問,與相關技術中的順序存儲、基于平衡二叉樹的關聯(lián)存儲容器存儲、基于哈希表的散列存儲容器存儲方式相比,本實施例中的數(shù)據(jù)包處理方法能夠降低時間復雜度、并且支持先入先出的存儲方式、而且支持正序遍歷,并且由于第二數(shù)組僅占用很小的存儲空間,因此除了數(shù)據(jù)包本身的存儲空間之外,只額外消耗極少的存儲空間即可實現(xiàn),不僅滿足視頻直播服務器數(shù)據(jù)緩存隊列的所有需求,并且達到了時間復雜度和空間復雜度最優(yōu)的性能。
本發(fā)明實施例所提供的數(shù)據(jù)包處理裝置可以為設備上的特定硬件或者安裝于設備上的軟件或固件等。本發(fā)明實施例所提供的裝置,其實現(xiàn)原理及產(chǎn)生的技術效果和前述方法實施例相同,為簡要描述,裝置實施例部分未提及之處,可參考前述方法實施例中相應內(nèi)容。所屬領域的技術人員可以清楚地了解到,為描述的方便和簡潔,前述描述的系統(tǒng)、裝置和單元的具體工作過程,均可以參考上述方法實施例中的對應過程,在此不再贅述。
在本發(fā)明所提供的實施例中,應該理解到,所揭露裝置和方法,可以通過其它的方式實現(xiàn)。以上所描述的裝置實施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實際實現(xiàn)時可以有另外的劃分方式,又例如,多個單元或組件可以結合或者可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些通信接口,裝置或單元的間接耦合或通信連接,可以是電性,機械或其它的形式。
所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡單元上。可以根據(jù)實際的需要選擇其中的部分或者全部單元來實現(xiàn)本實施例方案的目的。
另外,在本發(fā)明提供的實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。
所述功能如果以軟件功能單元的形式實現(xiàn)并作為獨立的產(chǎn)品銷售或使用時,可以存儲在一個計算機可讀取存儲介質中?;谶@樣的理解,本發(fā)明的技術方案本質上或者說對現(xiàn)有技術做出貢獻的部分或者該技術方案的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在一個存儲介質中,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網(wǎng)絡設備等)執(zhí)行本發(fā)明各個實施例所述方法的全部或部分步驟。而前述的存儲介質包括:U盤、移動硬盤、只讀存儲器(ROM,Read-Only Memory)、隨機存取存儲器(RAM,Random Access Memory)、磁碟或者光盤等各種可以存儲程序代碼的介質。
應注意到:相似的標號和字母在下面的附圖中表示類似項,因此,一旦某一項在一個附圖中被定義,則在隨后的附圖中不需要對其進行進一步定義和解釋,此外,術語“第一”、“第二”、“第三”等僅用于區(qū)分描述,而不能理解為指示或暗示相對重要性。
最后應說明的是:以上所述實施例,僅為本發(fā)明的具體實施方式,用以說明本發(fā)明的技術方案,而非對其限制,本發(fā)明的保護范圍并不局限于此,盡管參照前述實施例對本發(fā)明進行了詳細的說明,本領域的普通技術人員應當理解:任何熟悉本技術領域的技術人員在本發(fā)明揭露的技術范圍內(nèi),其依然可以對前述實施例所記載的技術方案進行修改或可輕易想到變化,或者對其中部分技術特征進行等同替換;而這些修改、變化或者替換,并不使相應技術方案的本質脫離本發(fā)明實施例技術方案的精神和范圍。都應涵蓋在本發(fā)明的保護范圍之內(nèi)。因此,本發(fā)明的保護范圍應所述以權利要求的保護范圍為準。