亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種網(wǎng)絡(luò)數(shù)據(jù)包處理方法及裝置與流程

文檔序號:12134394閱讀:281來源:國知局
一種網(wǎng)絡(luò)數(shù)據(jù)包處理方法及裝置與流程

本發(fā)明涉及數(shù)據(jù)通信領(lǐng)域,具體而言,涉及一種網(wǎng)絡(luò)數(shù)據(jù)包處理方法及裝置。



背景技術(shù):

現(xiàn)有技術(shù)中,當終端設(shè)備從網(wǎng)卡緩存中獲取到網(wǎng)絡(luò)數(shù)據(jù)包時,一般采用網(wǎng)絡(luò)協(xié)議棧進行處理,將網(wǎng)絡(luò)數(shù)據(jù)包傳輸至硬件鏈路層、網(wǎng)絡(luò)層、傳輸層、BSD(BerkeleySoftware Distribution,伯克利軟件發(fā)布)Socket層、及應(yīng)用層,每一層分別進行網(wǎng)絡(luò)數(shù)據(jù)包的解析處理。這種方式下,對終端設(shè)備的性能要求較高,例如,網(wǎng)卡處理能力及CPU處理能力等,若想提高終端設(shè)備對網(wǎng)絡(luò)數(shù)據(jù)包的處理能力,只能選擇性能更強的主芯片,可是這種方式將會增加終端設(shè)備的成本。



技術(shù)實現(xiàn)要素:

有鑒于此,本發(fā)明實施例的目的在于提供一種網(wǎng)絡(luò)數(shù)據(jù)包處理方法及裝置。

第一方面,本發(fā)明實施例提供一種網(wǎng)絡(luò)數(shù)據(jù)包處理方法,所述方法包括:判斷網(wǎng)卡緩存中的網(wǎng)絡(luò)數(shù)據(jù)包是否為視頻數(shù)據(jù)包;若所述網(wǎng)絡(luò)數(shù)據(jù)包不為視頻數(shù)據(jù)包時,將所述網(wǎng)絡(luò)數(shù)據(jù)包存儲至第一數(shù)據(jù)隊列,由網(wǎng)絡(luò)協(xié)議棧對所述第一數(shù)據(jù)隊列中的所述網(wǎng)絡(luò)數(shù)據(jù)包進行處理;若所述網(wǎng)絡(luò)數(shù)據(jù)包為視頻數(shù)據(jù)包時,將所述視頻數(shù)據(jù)包存儲至第二數(shù)據(jù)隊列,當?shù)竭_預(yù)設(shè)條件時,視頻數(shù)據(jù)處理線程對所述第二數(shù)據(jù)隊列中的所述視頻數(shù)據(jù)包進行處理。

第二方面,本發(fā)明實施例提供一種網(wǎng)絡(luò)數(shù)據(jù)包處理裝置,所述裝置包括:判斷模塊,用于判斷網(wǎng)卡緩存中的網(wǎng)絡(luò)數(shù)據(jù)包是否為視頻數(shù)據(jù)包;第一處理模塊,用于若所述網(wǎng)絡(luò)數(shù)據(jù)包不為視頻數(shù)據(jù)包時,將所述網(wǎng)絡(luò)數(shù)據(jù)包存儲至第一數(shù)據(jù)隊列,由網(wǎng)絡(luò)協(xié)議棧對所述第一數(shù)據(jù)隊列中的所述網(wǎng)絡(luò)數(shù)據(jù)包進行處理;第二處理模塊,用于若所述網(wǎng)絡(luò)數(shù)據(jù)包為視頻數(shù)據(jù)包時,將所述視頻數(shù)據(jù)包存儲至第二數(shù)據(jù)隊列,當?shù)竭_預(yù)設(shè)條件時,視頻數(shù)據(jù)處理線程對所述第二數(shù)據(jù)隊列中的所述視頻數(shù)據(jù)包進行處理。

與現(xiàn)有技術(shù)相比,本發(fā)明實施例提供的一種網(wǎng)絡(luò)數(shù)據(jù)包處理方法及裝置,通過首先判斷網(wǎng)卡緩存中的網(wǎng)絡(luò)數(shù)據(jù)包是否為視頻數(shù)據(jù)包,當所述網(wǎng)絡(luò)數(shù)據(jù)包為視頻數(shù)據(jù)包時,將所述網(wǎng)絡(luò)數(shù)據(jù)包存儲至第二數(shù)據(jù)隊列,并且當?shù)竭_預(yù)設(shè)條件時,視頻數(shù)據(jù)處理線程對所述第二數(shù)據(jù)隊列中的所述網(wǎng)絡(luò)數(shù)據(jù)包進行處理,通過這種方式,使得不需要將從網(wǎng)卡緩存中獲取的每個網(wǎng)絡(luò)數(shù)據(jù)包都傳輸至網(wǎng)絡(luò)協(xié)議棧進行處理,將視頻數(shù)據(jù)包采用視頻數(shù)據(jù)處理線程進行處理,有效降低了終端設(shè)備采用網(wǎng)絡(luò)協(xié)議棧處理網(wǎng)絡(luò)數(shù)據(jù)包的次數(shù),優(yōu)化了網(wǎng)絡(luò)數(shù)據(jù)包收包效率,可以在無需增加終端設(shè)備的成本的情況下,實現(xiàn)更多網(wǎng)絡(luò)數(shù)據(jù)包的處理。

為使本發(fā)明的上述目的、特征和優(yōu)點能更明顯易懂,下文特舉較佳實施例,并配合所附附圖,作詳細說明如下。

附圖說明

為了更清楚地說明本發(fā)明實施例的技術(shù)方案,下面將對實施例中所需要使用的附圖作簡單地介紹,應(yīng)當理解,以下附圖僅示出了本發(fā)明的某些實施例,因此不應(yīng)被看作是對范圍的限定,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他相關(guān)的附圖。

圖1是本發(fā)明實施例提供的終端設(shè)備之間交互的示意圖。

圖2是本發(fā)明第一實施例提供的一種網(wǎng)絡(luò)數(shù)據(jù)包處理方法的流程圖。

圖3是本發(fā)明第一實施例提供的將網(wǎng)絡(luò)數(shù)據(jù)包存儲至第一數(shù)據(jù)隊列的原理示意圖。

圖4是本發(fā)明第一實施例提供的一種對所述網(wǎng)絡(luò)數(shù)據(jù)包的校驗和字段進行驗證的方法的流程圖。

圖5是本發(fā)明第一實施例提供的一種網(wǎng)絡(luò)數(shù)據(jù)包處理方法中的步驟S520的一種詳細流程圖。

圖6是本發(fā)明第一實施例提供的將網(wǎng)絡(luò)數(shù)據(jù)包存儲至第二數(shù)據(jù)隊列的原理示意圖。

圖7是本發(fā)明第一實施例提供的一種網(wǎng)絡(luò)數(shù)據(jù)包處理方法中的步驟S530的一種詳細流程圖。

圖8是本發(fā)明第一實施例提供的一種網(wǎng)絡(luò)數(shù)據(jù)包處理方法中的步驟S540的一種詳細流程圖。

圖9是本發(fā)明第二實施例提供的一種網(wǎng)絡(luò)數(shù)據(jù)包處理裝置的功能模塊示意圖。

具體實施方式

下面將結(jié)合本發(fā)明實施例中附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例。通常在此處附圖中描述和示出的本發(fā)明實施例的組件可以以各種不同的配置來布置和設(shè)計。因此,以下對在附圖中提供的本發(fā)明的實施例的詳細描述并非旨在限制要求保護的本發(fā)明的范圍,而是僅僅表示本發(fā)明的選定實施例?;诒景l(fā)明的實施例,本領(lǐng)域技術(shù)人員在沒有做出創(chuàng)造性勞動的前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。

應(yīng)注意到:相似的標號和字母在下面的附圖中表示類似項,因此,一旦某一項在一個附圖中被定義,則在隨后的附圖中不需要對其進行進一步定義和解釋。同時,在本發(fā)明的描述中,術(shù)語“第一”、“第二”等僅用于區(qū)分描述,而不能理解為指示或暗示相對重要性或時間先后。

圖1示出了本發(fā)明實施例提供的多個終端設(shè)備之間進行交互的示意圖。多個所述終端設(shè)備(圖中所示101至103)之間通過網(wǎng)絡(luò)200進行通信連接,以進行數(shù)據(jù)通信或交互。所述終端設(shè)備(圖中所示101至103)可以是視頻監(jiān)控服務(wù)器VM、網(wǎng)絡(luò)硬盤錄像機NVR、網(wǎng)絡(luò)攝像機、網(wǎng)絡(luò)服務(wù)器、數(shù)據(jù)庫服務(wù)器、個人電腦(personal computer,PC)、穿戴設(shè)備等。

作為一種實施方式,所述終端設(shè)備101為網(wǎng)絡(luò)硬盤錄像機NVR,所述終端設(shè)備102及所述終端設(shè)備103均為網(wǎng)絡(luò)攝像機,此時本發(fā)明實施例提供的網(wǎng)絡(luò)數(shù)據(jù)包處理方法及裝置運行于網(wǎng)絡(luò)硬盤錄像機NVR上,網(wǎng)絡(luò)硬盤錄像機NVR的網(wǎng)卡用于接收網(wǎng)絡(luò)攝像機發(fā)送的網(wǎng)絡(luò)數(shù)據(jù)包,并緩存在網(wǎng)卡緩存中。

圖2示出了本發(fā)明第一實施例提供的一種網(wǎng)絡(luò)數(shù)據(jù)包處理方法的流程圖,請參閱圖2,所述方法包括:

步驟S300,判斷網(wǎng)卡緩存中的網(wǎng)絡(luò)數(shù)據(jù)包是否為視頻數(shù)據(jù)包。

所述網(wǎng)絡(luò)數(shù)據(jù)包,是由終端設(shè)備(發(fā)送端)對數(shù)據(jù)內(nèi)容經(jīng)過從應(yīng)用層、BSD Socket層、傳輸層、網(wǎng)絡(luò)層、直至硬件鏈路層的層層封裝后形成的,其為TCP/IP協(xié)議通信傳輸中的數(shù)據(jù)單位。

當終端設(shè)備(接收端)的網(wǎng)卡接收到來自其它終端設(shè)備(發(fā)送端)發(fā)送的網(wǎng)絡(luò)數(shù)據(jù)包時,將網(wǎng)絡(luò)數(shù)據(jù)包按照一定的數(shù)據(jù)格式緩存到其網(wǎng)卡緩存中。

作為一種實施方式,當所述終端設(shè)備的操作系統(tǒng)為Linux時,終端設(shè)備將接收到的網(wǎng)絡(luò)數(shù)據(jù)包,由于Linux內(nèi)核中定義SKB包作為存儲網(wǎng)絡(luò)數(shù)據(jù)包的數(shù)據(jù)結(jié)構(gòu),因此將接收到的網(wǎng)絡(luò)數(shù)據(jù)包解析并生成對應(yīng)的SKB包格式的SKB包,并將所述SKB包存儲在網(wǎng)卡緩存中。

請參閱圖3,圖3中黑色圓圈1-8所示為第一數(shù)據(jù)隊列中流鏈表,所述流鏈表中每個節(jié)點(即一個黑色圓圈)代表一個數(shù)據(jù)流頭信息(后續(xù)用head_skb表示),每個head_skb對應(yīng)一個數(shù)據(jù)鏈表,每個數(shù)據(jù)鏈表上有多個網(wǎng)絡(luò)數(shù)據(jù)包。所述終端設(shè)備每次從網(wǎng)卡緩存中讀取一個網(wǎng)絡(luò)數(shù)據(jù)包,判斷所述第一數(shù)據(jù)隊列(Linux內(nèi)核中為gro_list隊列)是否存儲所述網(wǎng)絡(luò)數(shù)據(jù)包對應(yīng)的數(shù)據(jù)流頭信息(后續(xù)用head_skb表示),若沒有,則創(chuàng)建所述所述網(wǎng)絡(luò)數(shù)據(jù)包對應(yīng)的head_skb掛載到如圖3中所示的流鏈表的尾部??梢岳斫獾氖?,所述第一數(shù)據(jù)隊列(即Linux內(nèi)核中為gro_list隊列)中的流鏈表存儲了所有網(wǎng)絡(luò)緩存中網(wǎng)絡(luò)數(shù)據(jù)包(包括視頻數(shù)據(jù)包和非視頻數(shù)據(jù)包)對應(yīng)的數(shù)據(jù)鏈表頭信息(即head_skb)。

進一步的,判斷所述網(wǎng)絡(luò)數(shù)據(jù)包是否為視頻數(shù)據(jù)包。其中,判斷所述網(wǎng)絡(luò)數(shù)據(jù)包是否為視頻數(shù)據(jù)包的實施方式有很多種,由于所述網(wǎng)絡(luò)數(shù)據(jù)包都是經(jīng)過層層封裝后得到,其遵循一定的數(shù)據(jù)封包格式。常用視頻流封包格式包括RTP流、TS流、PS流等,每種格式都有固定的頭部信息,按照每種封包頭部格式去校驗載荷字段,就可以得到載荷類型,從而判斷出是否是視頻數(shù)據(jù)包。

步驟S400,若所述網(wǎng)絡(luò)數(shù)據(jù)包不為視頻數(shù)據(jù)包時,將所述網(wǎng)絡(luò)數(shù)據(jù)包存儲至第一數(shù)據(jù)隊列,由網(wǎng)絡(luò)協(xié)議棧對所述第一數(shù)據(jù)隊列中的所述網(wǎng)絡(luò)數(shù)據(jù)包進行處理。

作為一種實施方式,當所述網(wǎng)絡(luò)數(shù)據(jù)包不為視頻數(shù)據(jù)包且所述第一數(shù)據(jù)隊列中的網(wǎng)絡(luò)數(shù)據(jù)包的數(shù)量不再增加時,由網(wǎng)絡(luò)協(xié)議棧對所述第一數(shù)據(jù)隊列中的所述網(wǎng)絡(luò)數(shù)據(jù)包進行處理。

請繼續(xù)參閱圖3,若所述網(wǎng)絡(luò)數(shù)據(jù)包不為視頻數(shù)據(jù)包時,將所述網(wǎng)絡(luò)數(shù)據(jù)包掛載到所述第一數(shù)據(jù)隊列(即Linux內(nèi)核中為gro_list隊列)中,即掛載至所述網(wǎng)絡(luò)數(shù)據(jù)包對應(yīng)的head_skb(如圖3中所示灰色圓圈1)的數(shù)據(jù)鏈表的尾部,同時更新所述網(wǎng)絡(luò)數(shù)據(jù)包對應(yīng)的head_skb中的數(shù)據(jù)長度字段。

步驟S500,若所述網(wǎng)絡(luò)數(shù)據(jù)包為視頻數(shù)據(jù)包時,將所述視頻數(shù)據(jù)包存儲至第二數(shù)據(jù)隊列,當?shù)竭_預(yù)設(shè)條件時,視頻數(shù)據(jù)處理線程對所述第二數(shù)據(jù)隊列中的所述視頻數(shù)據(jù)包進行處理。

請參閱圖3,若所述網(wǎng)絡(luò)數(shù)據(jù)包為視頻數(shù)據(jù)包,作為一種實施方式,將所述第一數(shù)據(jù)隊列中所述網(wǎng)絡(luò)數(shù)據(jù)包對應(yīng)的head_skb(如圖3中所示灰色圓圈2)的process_flag字段設(shè)置為1,當網(wǎng)絡(luò)協(xié)議棧對所述第一數(shù)據(jù)隊列中的所述網(wǎng)絡(luò)數(shù)據(jù)包進行處理時,若發(fā)現(xiàn)所述網(wǎng)絡(luò)數(shù)據(jù)包對應(yīng)的head_skb的process_flag字段為1,則不進行處理,通過這種方式,可以減少網(wǎng)絡(luò)協(xié)議棧處理網(wǎng)絡(luò)數(shù)據(jù)包的次數(shù)。

進一步的,作為一種實施方式,若所述網(wǎng)絡(luò)數(shù)據(jù)包為視頻數(shù)據(jù)包且所述網(wǎng)絡(luò)數(shù)據(jù)包的校驗和字段驗證成功時,將所述視頻數(shù)據(jù)包存儲至第二數(shù)據(jù)隊列。

大多數(shù)終端設(shè)備支持硬件計算校驗和的操作,此時根據(jù)已經(jīng)計算好的校驗和來判斷網(wǎng)絡(luò)數(shù)據(jù)包是否有效即可,即完成網(wǎng)絡(luò)數(shù)據(jù)包的校驗和字段進行驗證;如果終端設(shè)備不支持硬件校驗和計算,則可以自行計算校驗和。

可以理解的是,由于當所述網(wǎng)絡(luò)數(shù)據(jù)包為視頻數(shù)據(jù)包時,會將所述網(wǎng)絡(luò)數(shù)據(jù)包存儲至第二數(shù)據(jù)隊列,并且當?shù)竭_預(yù)設(shè)條件時,視頻數(shù)據(jù)處理線程對所述第二數(shù)據(jù)隊列中的所述網(wǎng)絡(luò)數(shù)據(jù)包進行處理。也就是說,當視頻數(shù)據(jù)處理線程對所述第二數(shù)據(jù)隊列中的所述網(wǎng)絡(luò)數(shù)據(jù)包進行處理后,不會再由網(wǎng)絡(luò)協(xié)議棧對網(wǎng)絡(luò)數(shù)據(jù)包進行處理,即后續(xù)將不再執(zhí)行校驗和字段的驗證,因此在此處先進行校驗和字段的驗證,能夠保證數(shù)據(jù)傳輸?shù)挠行约皽蚀_性。

其中,對所述網(wǎng)絡(luò)數(shù)據(jù)包的校驗和字段進行驗證的實施方式有多種,例如,可以驗證所述網(wǎng)絡(luò)數(shù)據(jù)包中與網(wǎng)絡(luò)層對應(yīng)的第一校驗和字段,也可以驗證所述網(wǎng)絡(luò)數(shù)據(jù)包中與傳輸層對應(yīng)的第二校驗和字段。

進一步的,請參閱圖4,作為一種實施方式,所述對所述網(wǎng)絡(luò)數(shù)據(jù)包的校驗和字段進行驗證的步驟包括:

步驟S511,對所述網(wǎng)絡(luò)數(shù)據(jù)包的第一校驗和字段進行驗證,所述第一校驗和字段與網(wǎng)絡(luò)層對應(yīng)。

步驟S512,若所述第一校驗和字段驗證成功,則對所述網(wǎng)絡(luò)數(shù)據(jù)包的第二校驗和字段進行驗證,所述第二校驗和字段與傳輸層對應(yīng)。

可以理解的是,所述第二校驗和字段可以與TCP傳輸層對應(yīng),也可以與UDP傳輸層對應(yīng)。

步驟S513,若所述第二校驗和字段驗證成功,則驗證成功。

若驗證失敗,則直接丟棄所述網(wǎng)絡(luò)數(shù)據(jù)包,生成并發(fā)送ACK報文到發(fā)送端請求重傳數(shù)據(jù)。

通過對第一校驗和字段及第二校驗和字段的兩層驗證,能夠進一步保證傳輸?shù)挠行约皽蚀_性。

作為一種實施方式,請參閱圖5,當所述網(wǎng)絡(luò)數(shù)據(jù)包為視頻數(shù)據(jù)包時,將所述視頻數(shù)據(jù)包存儲至第二數(shù)據(jù)隊列之前,所述方法還包括:

步驟S521,查詢是否存儲有所述視頻數(shù)據(jù)包對應(yīng)的視頻流頭信息。

若已存儲有所述視頻數(shù)據(jù)包對應(yīng)的視頻流頭信息,則執(zhí)行步驟S522,否則,執(zhí)行步驟S523。

步驟S522,將所述視頻數(shù)據(jù)包關(guān)聯(lián)至所述視頻流頭信息,并更新所述視頻流頭信息中的長度字段。

步驟S523,創(chuàng)建并存儲所述視頻數(shù)據(jù)包對應(yīng)的視頻流頭信息。

請參閱圖6,圖6中白色圓圈2-5及8所示為第二數(shù)據(jù)隊列中流鏈表,所述流鏈表中每個節(jié)點(即一個帶數(shù)字的白色圓圈)代表一個視頻流頭信息(后續(xù)用head_skb表示),每個head_skb對應(yīng)一個數(shù)據(jù)鏈表,每個數(shù)據(jù)鏈表上有多個視頻數(shù)據(jù)包(即不帶數(shù)字的白色圓圈)。當所述網(wǎng)絡(luò)數(shù)據(jù)包為視頻數(shù)據(jù)包且所述網(wǎng)絡(luò)數(shù)據(jù)包的校驗和字段驗證成功時,判斷所述第二數(shù)據(jù)隊列的流鏈表中是否有所述網(wǎng)絡(luò)數(shù)據(jù)包對應(yīng)的head_skb,若沒有,則創(chuàng)建所述所述視頻數(shù)據(jù)包對應(yīng)的head_skb,并將所述視頻數(shù)據(jù)包掛載到所述head_skb對應(yīng)的數(shù)據(jù)鏈表;若有,則直接將所述視頻數(shù)據(jù)包掛載到所述head_skb對應(yīng)的數(shù)據(jù)鏈表,并更新第一隊列中所述視頻數(shù)據(jù)包對應(yīng)的視頻流頭信息head_skb中的長度字段。例如,若所述第二數(shù)據(jù)隊列的流鏈表中已存儲有所述視頻數(shù)據(jù)包對應(yīng)的視頻流頭信息head_skb,假設(shè)為圖6中所示的視頻隊列2的視頻流頭信息head_skb,則將直接將所述視頻數(shù)據(jù)包掛載到視頻隊列2的視頻流頭信息head_skb對應(yīng)的數(shù)據(jù)鏈表的尾部,并且更新第一隊列中所述視頻數(shù)據(jù)包對應(yīng)的視頻流頭信息head_skb中的長度字段,即圖3中所示的視頻隊列2的數(shù)據(jù)流頭信息(圖3中流鏈表中從左至右第2個黑色圓圈所示)中的長度字段,假設(shè)更新前圖3中所示的視頻隊列2的數(shù)據(jù)流頭信息中的長度字段的值為100字節(jié),所述網(wǎng)絡(luò)數(shù)據(jù)包的大小為10字節(jié),則圖3中視頻隊列2的數(shù)據(jù)流頭信息中的長度字段的值更新后為110字節(jié)。

優(yōu)選的,此處可以進一步分析所述網(wǎng)絡(luò)數(shù)據(jù)包的載荷字段,將獲取的網(wǎng)絡(luò)數(shù)據(jù)包的載荷類型保存到所述網(wǎng)絡(luò)數(shù)據(jù)包對應(yīng)的head_skb中的載荷字段payload_flag中。在首次判斷出所述視頻流的載荷類型后,同一個視頻流的后續(xù)視頻數(shù)據(jù)包的載荷類型保持不變,直接按照之前判斷的結(jié)果處理即可。

作為一種實施方式,請參閱圖7,在查詢出存儲有所述視頻數(shù)據(jù)包對應(yīng)的視頻流頭信息之后,所述方法還包括:

步驟S531,判斷是否出現(xiàn)丟包情況。

步驟S532,若出現(xiàn)丟包情況,將所述視頻數(shù)據(jù)包及所述視頻數(shù)據(jù)包對應(yīng)的視頻流頭信息傳輸至網(wǎng)絡(luò)協(xié)議棧處理。

步驟S533,當所述視頻數(shù)據(jù)包對應(yīng)的視頻流頭信息傳輸至BSD Socket層時,BSD Socket層不再將所述視頻數(shù)據(jù)包對應(yīng)的視頻流頭信息傳輸至應(yīng)用層進行處理。

請參閱圖3,若視頻隊列2已經(jīng)收到了視頻數(shù)據(jù)包100,此時若收到了視頻數(shù)據(jù)包102,則可以判斷出此時出現(xiàn)了丟包的情況。當出現(xiàn)了丟包情況,則將所述視頻數(shù)據(jù)包102及所述視頻數(shù)據(jù)包102對應(yīng)的視頻流頭信息head_skb(如圖中所示的灰色圓圈2)傳輸至網(wǎng)絡(luò)協(xié)議棧處理,同時將所述視頻數(shù)據(jù)包102對應(yīng)的視頻流頭信息head_skb中的數(shù)據(jù)長度字段清零,將所述head_skb的數(shù)據(jù)鏈表清空。當所述視頻數(shù)據(jù)包102對應(yīng)的視頻流頭信息head_skb傳輸至BSD Socket層時,BSD Socket層不再將所述視頻數(shù)據(jù)包對應(yīng)的視頻流頭信息head_skb傳輸至應(yīng)用層進行處理,即不再將所述視頻數(shù)據(jù)包對應(yīng)的視頻流頭信息head_skb拷貝至應(yīng)用層的業(yè)務(wù)緩存中進行處理。相對于現(xiàn)有的網(wǎng)絡(luò)協(xié)議棧的處理,通過這種方式,能夠減少一次數(shù)據(jù)拷貝,從而進一步優(yōu)化了網(wǎng)絡(luò)收包的效率。并且若此時所述視頻數(shù)據(jù)包102為TCP連接,則網(wǎng)絡(luò)協(xié)議??梢愿鶕?jù)所述視頻數(shù)據(jù)包102及所述視頻數(shù)據(jù)包102對應(yīng)的視頻流頭信息head_skb判斷出此時出現(xiàn)了丟包情況,并根據(jù)這兩個信息,向發(fā)送端請求重傳網(wǎng)絡(luò)數(shù)據(jù)包101,能夠保證數(shù)據(jù)的傳輸?shù)挠行约罢_性。

將所述視頻數(shù)據(jù)包存儲至第二數(shù)據(jù)隊列之后,當?shù)竭_預(yù)設(shè)條件時,視頻數(shù)據(jù)處理線程對所述第二數(shù)據(jù)隊列中的所述視頻數(shù)據(jù)包進行處理。

所述預(yù)設(shè)條件的實施方式有多種,例如,可以是當所述第二數(shù)據(jù)隊列中所述網(wǎng)絡(luò)數(shù)據(jù)包的數(shù)量不為零時,喚醒視頻數(shù)據(jù)處理線程對所述第二數(shù)據(jù)隊列中的所述網(wǎng)絡(luò)數(shù)據(jù)包進行處理;也可以是在每當所述第二數(shù)據(jù)隊列中收滿一幀數(shù)據(jù)時,喚醒視頻數(shù)據(jù)處理線程對所述第二數(shù)據(jù)隊列中的所述網(wǎng)絡(luò)數(shù)據(jù)包進行處理;還可以是在每當所述第二數(shù)據(jù)隊列中收滿一個I幀組時,喚醒視頻數(shù)據(jù)處理線程對所述第二數(shù)據(jù)隊列中的所述網(wǎng)絡(luò)數(shù)據(jù)包進行處理。

即當?shù)竭_預(yù)設(shè)條件時,喚醒視頻數(shù)據(jù)處理線程對所述第二數(shù)據(jù)隊列中的所述網(wǎng)絡(luò)數(shù)據(jù)包進行處理;當未到達預(yù)設(shè)條件時,視頻數(shù)據(jù)處理線程進行休眠狀態(tài)。這種方式下,當未到達預(yù)設(shè)條件時,所述視頻數(shù)據(jù)處理線程始終處于休眠狀態(tài),能夠降低終端設(shè)備的處理負載。

作為一種所述方式,可以在判斷出所述網(wǎng)絡(luò)數(shù)據(jù)包為視頻數(shù)據(jù)包,將所述網(wǎng)絡(luò)數(shù)據(jù)包存儲至第二數(shù)據(jù)隊列之后,由GRO收包處理函數(shù)來判斷是否到達預(yù)設(shè)條件,若到達預(yù)設(shè)條件時,由GRO收包處理函數(shù)喚醒視頻數(shù)據(jù)處理線程執(zhí)行后續(xù)處理操作。

進一步的,所述視頻數(shù)據(jù)處理線程對所述第二數(shù)據(jù)隊列中的所述網(wǎng)絡(luò)數(shù)據(jù)包進行處理,包括:視頻數(shù)據(jù)處理線程分別將所述第二數(shù)據(jù)隊列中的各個所述網(wǎng)絡(luò)數(shù)據(jù)包存儲至對應(yīng)的第三數(shù)據(jù)隊列,以使業(yè)務(wù)處理線程或進程對所述第三數(shù)據(jù)隊列中的網(wǎng)絡(luò)數(shù)據(jù)包進行處理。

請參閱圖8,作為一種具體的實施方式,可以包括:

步驟S541,判斷所述第二數(shù)據(jù)隊列中所述網(wǎng)絡(luò)數(shù)據(jù)包的數(shù)量是否為零。

若所述第二數(shù)據(jù)隊列中所述網(wǎng)絡(luò)數(shù)據(jù)包的數(shù)量不為零,執(zhí)行步驟S542,否則,執(zhí)行步驟S548。

步驟S542,所述視頻數(shù)據(jù)處理線程根據(jù)各個所述網(wǎng)絡(luò)數(shù)據(jù)包對應(yīng)的四元組,分別將各個所述網(wǎng)絡(luò)數(shù)據(jù)包關(guān)聯(lián)至對應(yīng)的第三數(shù)據(jù)隊列。

所述四元組包括所述網(wǎng)絡(luò)數(shù)據(jù)包的源地址、目的地址、源端口、及目的端口。

所述第三數(shù)據(jù)隊列是指與視頻通道對應(yīng)的業(yè)務(wù)緩存,即對于來自于同一個終端設(shè)備的視頻數(shù)據(jù)包會關(guān)聯(lián)在同一個與視頻通道對應(yīng)的業(yè)務(wù)緩存中。

作為一種實施方式,所述視頻數(shù)據(jù)處理線程依次讀取并處理第二數(shù)據(jù)隊列中所述網(wǎng)絡(luò)數(shù)據(jù)包,此時,第二數(shù)據(jù)隊列中的網(wǎng)絡(luò)數(shù)據(jù)包均為視頻數(shù)據(jù)包。將當前處理的所述視頻數(shù)據(jù)包的源地址、目的地址、源端口、及目的端口依次與已存儲視頻通道對應(yīng)的業(yè)務(wù)緩存(即第三數(shù)據(jù)隊列)的網(wǎng)絡(luò)數(shù)據(jù)包對應(yīng)的源地址、目的地址、源端口、及目的端口進行匹配,若匹配成功,則將所述視頻數(shù)據(jù)包與所述對應(yīng)的第三數(shù)據(jù)隊列關(guān)聯(lián)起來。

步驟S543,所述視頻數(shù)據(jù)處理線程根據(jù)各個所述網(wǎng)絡(luò)數(shù)據(jù)包的載荷字段,分別將各個所述網(wǎng)絡(luò)數(shù)據(jù)包按照預(yù)定數(shù)據(jù)格式存儲至對應(yīng)的第三數(shù)據(jù)隊列,以使業(yè)務(wù)處理線程或進程對所述第三數(shù)據(jù)隊列中的網(wǎng)絡(luò)數(shù)據(jù)包進行處理。

通過步驟S542可以將屬于來自于同一個終端設(shè)備的視頻數(shù)據(jù)包會關(guān)聯(lián)在同一個與視頻通道對應(yīng)的業(yè)務(wù)緩存中。進一步的,來自于同一個終端設(shè)備的視頻數(shù)據(jù)包,可能是不同的視頻流,因此所述視頻數(shù)據(jù)處理線程根據(jù)各個所述網(wǎng)絡(luò)數(shù)據(jù)包的載荷字段,對來自同一個終端設(shè)備的視頻數(shù)據(jù)包的不同視頻流進行區(qū)分,并分別將各個所述網(wǎng)絡(luò)數(shù)據(jù)包按照預(yù)定數(shù)據(jù)格式存儲至對應(yīng)的第三數(shù)據(jù)隊列。

作為步驟S543的一種實施方式,所述視頻數(shù)據(jù)處理線程分析SKB包的載荷字段payload_flag得到載荷類型,根據(jù)載荷類型獲取視頻碼流(RTP流、TS流、PS流或其它視頻流等),并根據(jù)業(yè)務(wù)需求,按照預(yù)定的格式將其拷貝到對應(yīng)通道的業(yè)務(wù)緩存(即第三數(shù)據(jù)隊列)中。例如,若業(yè)務(wù)處理線程或進程的業(yè)務(wù)需求是解碼流程,則需要按照幀為單位將其拷貝到對應(yīng)通道的業(yè)務(wù)緩存(即第三數(shù)據(jù)隊列)中,由業(yè)務(wù)處理線程或進程進行拼幀處理;若業(yè)務(wù)處理線程或進程的業(yè)務(wù)需求是存儲流程,則需要按照存儲格式將其拷貝到對應(yīng)通道的業(yè)務(wù)緩存(即第三數(shù)據(jù)隊列)中,由業(yè)務(wù)處理線程或進程進行數(shù)據(jù)拼接處理。

步驟S544,釋放所述網(wǎng)絡(luò)數(shù)據(jù)包。

步驟S545,判斷所述網(wǎng)絡(luò)數(shù)據(jù)包是否屬于TCP流。

若是,執(zhí)行步驟S546,否則,執(zhí)行步驟S541。

步驟S546,是否已經(jīng)接收到了指定數(shù)目的網(wǎng)絡(luò)數(shù)據(jù)包。

若是,執(zhí)行步驟S547,否則,執(zhí)行步驟S541。

步驟S547,生成并返回ACK報文。

通過步驟S546至步驟S547,能夠保證TCP流的有序和正常傳輸。

步驟S548,視頻數(shù)據(jù)處理線程休眠。

當?shù)诙?shù)據(jù)隊列中沒有網(wǎng)絡(luò)數(shù)據(jù)包可處理時,視頻數(shù)據(jù)處理線程再次進入休眠狀態(tài)。

可以理解的是,當所述終端設(shè)備為網(wǎng)絡(luò)硬盤錄像機NVR,由于其接收到的網(wǎng)絡(luò)數(shù)據(jù)包大部分都是來自于網(wǎng)絡(luò)攝像機的視頻網(wǎng)絡(luò)數(shù)據(jù)包,當在網(wǎng)絡(luò)硬盤錄像機NVR上運行本發(fā)明實施例提供的網(wǎng)絡(luò)數(shù)據(jù)包處理方法,更能夠大大降低了終端設(shè)備采用網(wǎng)絡(luò)協(xié)議棧處理網(wǎng)絡(luò)數(shù)據(jù)包的次數(shù),優(yōu)化了網(wǎng)絡(luò)數(shù)據(jù)包收包效率,進一步的,提高了網(wǎng)絡(luò)硬盤錄像機NVR接入網(wǎng)絡(luò)攝像機的路數(shù)。

本發(fā)明實施例提供的網(wǎng)絡(luò)數(shù)據(jù)包處理方法,通過首先判斷網(wǎng)卡緩存中的網(wǎng)絡(luò)數(shù)據(jù)包是否為視頻數(shù)據(jù)包,當所述網(wǎng)絡(luò)數(shù)據(jù)包為網(wǎng)絡(luò)數(shù)據(jù)包時,將所述網(wǎng)絡(luò)數(shù)據(jù)包存儲至第二數(shù)據(jù)隊列,并且當?shù)竭_預(yù)設(shè)條件時,視頻數(shù)據(jù)處理線程對所述第二數(shù)據(jù)隊列中的所述網(wǎng)絡(luò)數(shù)據(jù)包進行處理,通過這種方式,使得不需要將從網(wǎng)卡緩存中獲取的每個網(wǎng)絡(luò)數(shù)據(jù)包都傳輸至網(wǎng)絡(luò)協(xié)議棧進行處理,將視頻數(shù)據(jù)包采用視頻數(shù)據(jù)處理線程進行處理,有效降低了終端設(shè)備采用網(wǎng)絡(luò)協(xié)議棧處理網(wǎng)絡(luò)數(shù)據(jù)包的次數(shù),優(yōu)化了網(wǎng)絡(luò)數(shù)據(jù)包收包效率,可以在無需增加終端設(shè)備的成本的情況下,實現(xiàn)更多網(wǎng)絡(luò)數(shù)據(jù)包的處理。

請參閱圖9,是本發(fā)明第二實施例提供的一種網(wǎng)絡(luò)數(shù)據(jù)包處理裝置110的功能模塊示意圖。所述網(wǎng)絡(luò)數(shù)據(jù)包處理裝置110運行于終端設(shè)備(圖1中所示101至103)中。所述網(wǎng)絡(luò)數(shù)據(jù)包處理裝置110包括判斷模塊111、第一處理模塊112、以及第二處理模塊113。

所述判斷模塊111,用于判斷網(wǎng)卡緩存中的網(wǎng)絡(luò)數(shù)據(jù)包是否為視頻數(shù)據(jù)包。

第一處理模塊112,用于若所述網(wǎng)絡(luò)數(shù)據(jù)包不為視頻數(shù)據(jù)包時,將所述網(wǎng)絡(luò)數(shù)據(jù)包存儲至第一數(shù)據(jù)隊列,由網(wǎng)絡(luò)協(xié)議棧對所述第一數(shù)據(jù)隊列中的所述網(wǎng)絡(luò)數(shù)據(jù)包進行處理。

作為一種具體的實施方式,所述第一處理模塊112,具體用于:若所述網(wǎng)絡(luò)數(shù)據(jù)包不為視頻數(shù)據(jù)包且所述第一數(shù)據(jù)隊列中的網(wǎng)絡(luò)數(shù)據(jù)包的數(shù)量不再增加時,由網(wǎng)絡(luò)協(xié)議棧對所述第一數(shù)據(jù)隊列中的所述網(wǎng)絡(luò)數(shù)據(jù)包進行處理。

第二處理模塊113,用于若所述網(wǎng)絡(luò)數(shù)據(jù)包為視頻數(shù)據(jù)包時,將所述視頻數(shù)據(jù)包存儲至第二數(shù)據(jù)隊列,當?shù)竭_預(yù)設(shè)條件時,視頻數(shù)據(jù)處理線程對所述第二數(shù)據(jù)隊列中的所述視頻數(shù)據(jù)包進行處理。

作為一種具體的實施方式,所述第二處理模塊113,具體用于:所述視頻數(shù)據(jù)處理線程根據(jù)各個所述網(wǎng)絡(luò)數(shù)據(jù)包對應(yīng)的四元組,分別將各個所述網(wǎng)絡(luò)數(shù)據(jù)包關(guān)聯(lián)至對應(yīng)的第三數(shù)據(jù)隊列,其中,所述四元組包括所述網(wǎng)絡(luò)數(shù)據(jù)包的源地址、目的地址、源端口、及目的端口;所述視頻數(shù)據(jù)處理線程根據(jù)各個所述網(wǎng)絡(luò)數(shù)據(jù)包的載荷字段,分別將各個所述網(wǎng)絡(luò)數(shù)據(jù)包按照預(yù)定數(shù)據(jù)格式存儲至對應(yīng)的第三數(shù)據(jù)隊列。

作為另一種具體的實施方式,所述第二處理模塊113,具體用于:若所述網(wǎng)絡(luò)數(shù)據(jù)包為視頻數(shù)據(jù)包且所述網(wǎng)絡(luò)數(shù)據(jù)包的校驗和字段驗證成功時,將所述視頻數(shù)據(jù)包存儲至第二數(shù)據(jù)隊列。

進一步的,對所述網(wǎng)絡(luò)數(shù)據(jù)包的校驗和字段驗證的方法包括:對所述網(wǎng)絡(luò)數(shù)據(jù)包的第一校驗和字段進行驗證,所述第一校驗和字段與網(wǎng)絡(luò)層對應(yīng);若所述第一校驗和字段驗證成功,則對所述網(wǎng)絡(luò)數(shù)據(jù)包的第二校驗和字段進行驗證,所述第二校驗和字段與傳輸層對應(yīng);若所述第二校驗和字段驗證成功,則驗證成功。

作為又一種具體的實施方式,所述預(yù)設(shè)條件包括所述第二數(shù)據(jù)隊列中所述網(wǎng)絡(luò)數(shù)據(jù)包的數(shù)量不為零或每當所述第二數(shù)據(jù)隊列中收滿一幀數(shù)據(jù)時或每當所述第二數(shù)據(jù)隊列中收滿一個I幀組時。

作為再一種具體的實施方式,所述第二處理模塊113,具體用于:在所述若所述網(wǎng)絡(luò)數(shù)據(jù)包為視頻數(shù)據(jù)包時,將所述視頻數(shù)據(jù)包存儲至第二數(shù)據(jù)隊列之前,查詢是否存儲有所述視頻數(shù)據(jù)包對應(yīng)的視頻流頭信息;若是,將所述視頻數(shù)據(jù)包關(guān)聯(lián)至所述視頻流頭信息,并更新所述視頻流頭信息中的長度字段;若否,創(chuàng)建并存儲所述視頻數(shù)據(jù)包對應(yīng)的視頻流頭信息。

進一步的,所述第二處理模塊113,還用于:在查詢出存儲有所述視頻數(shù)據(jù)包對應(yīng)的視頻流頭信息之后,判斷是否出現(xiàn)丟包情況;若出現(xiàn)丟包情況,將所述視頻數(shù)據(jù)包及所述視頻數(shù)據(jù)包對應(yīng)的視頻流頭信息傳輸至網(wǎng)絡(luò)協(xié)議棧處理;當所述視頻數(shù)據(jù)包對應(yīng)的視頻流頭信息傳輸至BSD Socket層時,BSD Socket層不再將所述視頻數(shù)據(jù)包對應(yīng)的視頻流頭信息傳輸至應(yīng)用層進行處理。

以上各模塊可以是由軟件代碼實現(xiàn),也同樣可以由硬件例如集成電路芯片實現(xiàn)。

需要說明的是,本說明書中的各個實施例均采用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似的部分互相參見即可。

本發(fā)明實施例所提供的網(wǎng)絡(luò)數(shù)據(jù)包處理裝置,其實現(xiàn)原理及產(chǎn)生的技術(shù)效果和前述方法實施例相同,為簡要描述,裝置實施例部分未提及之處,可參考前述方法實施例中相應(yīng)內(nèi)容。

在本申請所提供的幾個實施例中,應(yīng)該理解到,所揭露的裝置和方法,也可以通過其它的方式實現(xiàn)。以上所描述的裝置實施例僅僅是示意性的,例如,附圖中的流程圖和框圖顯示了根據(jù)本發(fā)明的多個實施例的裝置、方法和計算機程序產(chǎn)品的可能實現(xiàn)的體系架構(gòu)、功能和操作。在這點上,流程圖或框圖中的每個方框可以代表一個模塊、程序段或代碼的一部分,所述模塊、程序段或代碼的一部分包含一個或多個用于實現(xiàn)規(guī)定的邏輯功能的可執(zhí)行指令。也應(yīng)當注意,在有些作為替換的實現(xiàn)方式中,方框中所標注的功能也可以以不同于附圖中所標注的順序發(fā)生。例如,兩個連續(xù)的方框?qū)嶋H上可以基本并行地執(zhí)行,它們有時也可以按相反的順序執(zhí)行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個方框、以及框圖和/或流程圖中的方框的組合,可以用執(zhí)行規(guī)定的功能或動作的專用的基于硬件的系統(tǒng)來實現(xiàn),或者可以用專用硬件與計算機指令的組合來實現(xiàn)。

另外,在本發(fā)明各個實施例中的各功能模塊可以集成在一起形成一個獨立的部分,也可以是各個模塊單獨存在,也可以兩個或兩個以上模塊集成形成一個獨立的部分。

所述功能如果以軟件功能模塊的形式實現(xiàn)并作為獨立的產(chǎn)品銷售或使用時,可以存儲在一個計算機可讀取存儲介質(zhì)中。基于這樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻的部分或者該技術(shù)方案的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺計算機設(shè)備(可以是個人計算機,服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實施例所述方法的全部或部分步驟。而前述的存儲介質(zhì)包括:U盤、移動硬盤、只讀存儲器(ROM,Read-Only Memory)、隨機存取存儲器(RAM,Random Access Memory)、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。需要說明的是,在本文中,諸如第一和第二等之類的關(guān)系術(shù)語僅僅用來將一個實體或者操作與另一個實體或操作區(qū)分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關(guān)系或者順序。而且,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設(shè)備中還存在另外的相同要素。

以上所述僅為本發(fā)明的優(yōu)選實施例而已,并不用于限制本發(fā)明,對于本領(lǐng)域的技術(shù)人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。應(yīng)注意到:相似的標號和字母在下面的附圖中表示類似項,因此,一旦某一項在一個附圖中被定義,則在隨后的附圖中不需要對其進行進一步定義和解釋。

以上所述,僅為本發(fā)明的具體實施方式,但本發(fā)明的保護范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應(yīng)涵蓋在本發(fā)明的保護范圍之內(nèi)。因此,本發(fā)明的保護范圍應(yīng)所述以權(quán)利要求的保護范圍為準。

當前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1