亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

一種基于公共移動通信的視頻包多鏈路接收和播放方法

文檔序號:7720775閱讀:212來源:國知局
專利名稱:一種基于公共移動通信的視頻包多鏈路接收和播放方法
技術領域
本發(fā)明涉及視頻通信領域,尤其涉及一種基于公共數(shù)字移動通信網(wǎng)絡的視頻包多
鏈路接收和播放方法。
背景技術
無線視頻傳輸技術廣泛應用于安防監(jiān)控領域中。其通過無線信道傳送攝像監(jiān)控器 獲取的視頻圖像,大大降低了安防監(jiān)控設備的安裝布線成本。 當前無線視頻傳輸若采用單鏈路傳輸,受實際無線帶寬影響,會因傳輸速率不夠 大而造成大量視頻幀丟失或傳輸延遲,從而造成視頻播放時圖像馬賽克現(xiàn)象或者不夠流暢 且延遲大;若采用多鏈路傳輸,可解決傳輸帶寬限制問題,但因視頻關鍵幀需要分包傳輸和 接收,如果處理不當,會因關鍵幀接收不完全或者數(shù)據(jù)幀順序不當,仍然會造成視頻圖像馬 賽克或者視頻延遲問題。

發(fā)明內容
為克服無線視頻傳統(tǒng)傳輸接收處理方式以上缺點,本發(fā)明提出一種基于公共數(shù)字 移動通信網(wǎng)絡的視頻包多鏈路接收方法,其特征在于包括如下步驟
步驟A、建立多個套接字(socket)接收視頻數(shù)據(jù)包; 步驟B、任意套接字收到視頻數(shù)據(jù)包,判斷是否是正確的數(shù)據(jù)包,如果是跳轉到步 驟C ;否則丟棄該包數(shù)據(jù),并跳轉步驟E ; 步驟C、啟動插包子過程,對I幀包的分包以及非I幀包進行插包緩存,形成正常的 數(shù)據(jù)幀; 步驟D、通知播放線程有視頻分包插入鏈表,跳轉步驟E ; 步驟E、判斷套接字是否已關閉,如果沒有關閉,跳轉至步驟B ;否則跳轉步驟F ; 步驟F、結束; 其中所述插包子過程包括 步驟C1、比較待插入幀的包序號與下一播放幀包序號(nNextFrameNo)的差值,如 果差值小于預定閾值跳轉到步驟C2 ; 步驟C2、檢查動態(tài)鏈表的視頻包總個數(shù),如果小于鏈表最大長度值,則將丟包標志 標記為FALSE,跳轉到步驟C3 ; 步驟C3、生成一個新的視頻包結構,根據(jù)插入幀的包序號查找插入位置,直接插入 到動態(tài)有序鏈表中,并將動態(tài)有序鏈表個數(shù)加1 。 其中,步驟C2中如果視頻包個數(shù)大于等于鏈表最大長度值則將丟包標志標記為 TRUE,并且動態(tài)鏈表丟包子過程,該動態(tài)鏈表丟包子過程包括 步驟C21、分析動態(tài)鏈表中的最小序號包,如果最小序號包是I幀分包,若包序號 大于等于nNextFrameNo,將nNextFrameNo標記為該包序號力口 1 ;否則nNextFrameNo保持不 變,刪除鏈表中所有已經(jīng)到達的該I幀分包,同時鏈表中元素個數(shù)減該已經(jīng)到達的該I幀分包的數(shù)目,標記丟包標志為TRUE,跳轉到步驟C22 ; 如果最小序號包是非I幀包,若包序號大于等于nNextFrameNo,則將nNextFrameNo 標記為該包序號加1 ;否則nNextFrameNo保持不變,并將該包從鏈表中刪除,同時鏈表中元素 個數(shù)減l,標記bCropFrame為TRUE ; 步驟C22分析動態(tài)順序鏈表,如果最小序號包是非I幀包,若該包包序號大于等于 nNextFrameNo,則將nNextFrameNo標記為該包序號力口 1 ;否則nNextFrameNo保持不變,并 將該包從鏈表中刪除,同時鏈表中元素個數(shù)減l,標記丟包標記為TRUE,跳轉到步驟C23 ;
如果最小序號包是I幀包,標記丟包標記為FALSE ;
步驟C23、動態(tài)鏈表丟包子過程結束。 本發(fā)明還提出一種相應的對多路接收的數(shù)據(jù)進行播放的方法,包括
步驟a判斷是否收到有視頻包插入的通知,是的話跳轉步驟b,否則跳轉步驟f ;
步驟b進行播放設置的初始化,其中,下一播放幀包序號(nNextFrameNo)初始化 為0,同時標記播放標志為TRUE ;丟包標志為FALSE ; 步驟c如果播放標記為FALSE,清空動態(tài)順序鏈表,跳轉步驟f ;如果播放標記為 TRUE,跳轉步驟C; 步驟d從動態(tài)鏈表中讀取包序號為nNextFrameNo的數(shù)據(jù),判斷讀取的該幀的包個 數(shù),執(zhí)行步驟e ; 步驟e如果返回包個數(shù)為l,則數(shù)據(jù)幀可能是非I幀包或者分包總數(shù)是l的一個I 幀包,將該包直接進行播放跳轉到步驟d ; 如果返回包個數(shù)大于l,則數(shù)據(jù)幀是I幀,將這幾個包順序進行播放,跳轉到步驟 d ; 如果返回包個數(shù)為0,則數(shù)據(jù)幀為空,跳轉步驟f ;
步驟f停止本輪次播放。 上述方法實現(xiàn)完整視頻數(shù)據(jù)幀的多個分包通過多鏈路傳輸后的接收處理功能,解 決無線視頻圖像馬賽克現(xiàn)象和流暢性問題,并保證視頻的實時性,相對于現(xiàn)有技術具有顯 著的進步。


圖1為基于公共數(shù)字移動通信網(wǎng)絡的視頻多鏈路接收方法實現(xiàn)原理框圖; 圖2為多路接收視頻幀插包子過程的原理框圖; 圖3為動態(tài)緩存鏈表丟包子過程的原理框圖; 圖4為動態(tài)緩存鏈表數(shù)據(jù)包定位子過程的原理框圖; 圖5為本發(fā)明實施例的視頻幀播放方法的原理框圖; 圖6為本發(fā)明實施例的動態(tài)緩存鏈表取包子過程的原理框圖。
具體實施例方式
以下結合附圖,對本發(fā)明進行進一步詳細說明。應當理解,此處所描述的具體實施 例僅用以解釋本發(fā)明,并不用以限定本發(fā)明。 在本具體實施例中,各方法以及子過程可以采用程序模塊的形式由嵌入式的計算機系統(tǒng)實現(xiàn)。
設置如下的常量參數(shù) 動態(tài)有序鏈表最大包數(shù)目MAXLISTELEMENT = 50 ;其用于限制鏈表的最大大小;
清空視頻包緩存門限值THRESHOLCREMOVEALL = 100 ; 上述設置僅僅用于說明本實施例,本領域技術人員可以根據(jù)需要在使用方法時設 置上述動態(tài)有序鏈表最大包數(shù)目、清空視頻包緩存門限值為其它值。 為便于進行說明,用nNextFrameNo代表下一個播放幀的包序號;用bCropFrame代 表丟包標志,其可被設為TRUE或FAULSE ;用bPlay代表播放標志。 在本實施例的接收方法中,由于I幀單幀數(shù)據(jù)量大,所以在傳輸過程中需要進行 分包處理,其它類型的幀單幀數(shù)據(jù)量不大,不需要分包處理。 采用帶頭結點的動態(tài)有序鏈表作為視頻數(shù)據(jù)包緩存結構,該動態(tài)有序鏈表 最大長度不能超過MAXLISTELEMENT個,一旦新到達的包因緩存使鏈表最大長度超過 MAXLISTELEMENT個,則啟動丟包程序。 由于多鏈路同時接收數(shù)據(jù)包,因此,在對動態(tài)鏈表如果有數(shù)據(jù)變動操作時應該進 行互斥上鎖操作。 對任何收到的視頻包都要先動態(tài)生成一個鏈表元素,如果是非I幀包,則按照包 序號大小順序插入到動態(tài)鏈表中,如果是I幀分包,則按照包序號大小以及分包序號大小 順序插入到動態(tài)鏈表中; 在本實施例的播放方法中,從動態(tài)有序鏈表中讀取數(shù)據(jù)時,直接查找鏈表中序號 為nNextFrameNo的包,如果是非I幀,直接取出該包元素,并返回讀取的包數(shù)目為1 ;如果 是I幀分包,先判斷該I幀的所有分包是否已經(jīng)全部到達,若沒有全部到達則直接退出,并 返回包數(shù)目為O,否則先取出全部該I幀分包,并返回讀取的包數(shù)目為該I幀分包總數(shù)。
基于公共數(shù)字移動通信網(wǎng)絡的視頻多鏈路接收算法實現(xiàn)原理
步驟101建立多個套接字(socket)接收視頻數(shù)據(jù)包; 步驟102任意套接字收到視頻數(shù)據(jù)包,判斷是否是正確的數(shù)據(jù)包,如果是跳轉到 步驟103 ;否則丟棄該包數(shù)據(jù),并跳轉步驟105 ; 步驟103啟動插包子過程,對I幀包的分包以及非I幀包進行插包緩存,形成正常 的數(shù)據(jù)幀;如果該包是非I幀包,則按照包序號大小順序插入到動態(tài)鏈表中,如果是I幀分 包,則按照包序號大小以及分包序號大小順序插入到動態(tài)鏈表中;
步驟104通知播放線程有視頻分包插入鏈表,跳轉步驟105 ; 步驟105判斷套接字是否已關閉,如果沒有關閉,跳轉至步驟102 ;否則跳轉步驟
106 ; 步驟106過程結束。 圖2示出了多路接收視頻幀插包子過程,該過程應該對鏈表上鎖以避免多個線程 同時操作鏈表導致數(shù)據(jù)出錯; 步驟201若bCropFrame為TRUE跳轉到步驟202,否則跳轉到步驟207 ; 步驟202檢查待插入幀的包類型,如果是非I幀,直接丟棄該幀,結束插入過程;否
則跳轉到步驟203 ; 步驟203比較待插入幀的包序號與nNextFrameNo的值,如果差值達到
6THRESHOLCREMOVEALL,直接清空整個有序鏈表,并將所有播放相關元素標記為初始值;否則 跳轉到步驟204 ; 步驟204若待插入幀包序號小于nNextFrameNo,直接跳轉步驟211 ;否則跳轉到步 驟205 ; 步驟205檢查動態(tài)有序鏈表的視頻包總個數(shù),如果大于等于MAXLISTELEMENT, 先將bCropFrame標記為TRUE,調用動態(tài)緩存鏈表丟包過程,跳轉到步驟201 ;否則將 bCropFrame標記為FALSE J兆轉到步驟206 ; 步驟206生成一個新的視頻包結構,查找插入位置,直接插入到動態(tài)有序鏈表中, 并將動態(tài)有序鏈表個數(shù)加l,跳轉步驟211 ; 步驟207比較待插入幀的包序號與nNextFrameNo的值,如果差值達到
THRESHOLCREMOVEALL,直接清空整個有序鏈表,并將所有播放相關元素標記為初始值; 步驟208若待插入幀包序號小于nNextFrameNo,直接跳轉到步驟211 ; 步驟209檢查動態(tài)有序鏈表的視頻包總個數(shù),如果大于等于MAXLISTELEMENT,先
將bCropFrame標記為TRUE,調用動態(tài)緩存鏈表丟包子過程,跳轉到步驟201 ; 步驟210生成一個新的視頻包結構,調用動態(tài)緩存鏈表數(shù)據(jù)包定位子過程,查找
插入位置,直接插入到動態(tài)有序鏈表中,并將動態(tài)有序鏈表個數(shù)加1 ; 步驟211退出處理算法。 圖3示出了動態(tài)緩存鏈表丟包子過程,該過程只在動態(tài)順序鏈表插入過程中使 用 步驟301如果bCropFrame的值為TRUE,分析動態(tài)鏈表中最小包序號的包;如果 bCropFrame的值為FALSE,則停止丟包,跳轉到步驟306。 步驟302如果最小序號包是I幀分包,若該包包序號大于等于nNextFrameNo,將 nNextFrameNo標記為該包序號加1 ;否則nNextFrameNo保持不變,刪除鏈表中所有已經(jīng)到 達的該I幀分包(假定已經(jīng)到達的該I幀的分包數(shù)目為m個),同時鏈表中元素個數(shù)減m, 標記bCropFrame為TRUE,跳轉到步驟304 ; 步驟303分析動態(tài)順序鏈表,如果最小序號包是非I幀包,若該包包序號大于等于 nNextFrameNo,則將nNextFrameNo標記為該包序號力口 1 ;否則nNextFrameNo保持不變,并 將該包從鏈表中刪除,同時鏈表中元素個數(shù)減l,標記bCropFrame為TRUE ;
步驟304分析動態(tài)順序鏈表,如果最小序號包是非I幀包,若該包包序號大于等 于nNextFrameNo,則將nNextFrameNo標記為該包序號力卩1 ;否則nNextFrameNo保持不變, 并將該包從鏈表中刪除,同時鏈表中元素個數(shù)減l,標記bCropFrame為TRUE,跳轉到步驟
306 ; 步驟305如果最小序號包是I幀包,標記bCropFrame為FALSE ;
步驟306丟包子過程結束。 圖4是出了動態(tài)緩存鏈表數(shù)據(jù)包定位子過程,該過程不上鎖,采用其他的公知的 鏈表搜索方法也能夠對其進行替代。 步驟401初始化,取當前結點pstTemp =動態(tài)順序鏈表(帶頭結點)頭結點,待返 回結點位置pstLocation =空; 步驟402如果pstTemp- > next為空,則pstLocation = pstTemp,跳轉步驟8 ;否則先pstLocation = pstTemp,然后pstTemp = pstTemp- > next ; 步驟403如果pstTemp不空而且待查找元素包序號大于pstTemp結點包序號,則 先pstLocation = pstT卿,然后pstTemp = pstTemp- >證t,瑕鵬步驟403 ;
步驟404如果pstTemp為空,則跳轉步驟408 ; 步驟405如果待查找結點包序號大于pstTemp結點包序號,則跳轉步驟408 ;
步驟406如果待查找結點幀類型為I幀并且pstTemp結點幀類型也為I幀,則跳 轉步驟407 ;否則返回空,跳轉步驟409 ; 步驟407如果pstTemp不為空,查找結點包序號等于pstTemp結點包序號且待查
找結點分包序號大于pstTemp結點分包序號,則先pstLocation = pstTemp,然后pstTemp
=pstTemp- > next,跳轉步驟407 ; 步驟408返回pstLocation ; 步驟409退出查找子過程。 圖5示出了本實施例的視頻幀播放方法。 步驟501判斷是否收到有視頻包插入的通知,是的話跳轉步驟502,否則跳轉步驟
506 ; 步驟502進行播放設置的初始化,其中,nNextFrameNo初始化為0,同時標記播放 標志為TRUE ;丟包標志bCropFrame為FALSE ; 步驟503 ;如果播放標記bPlay為FALSE,停止該輪次播放,并清空動態(tài)順序鏈表; 如果播放標記為TRUE,當收到視頻數(shù)據(jù)插入動態(tài)有序鏈表(無論成功與否)的通知時開始 播放; 步驟504從動態(tài)鏈表中讀取包序號為nNextFrameNo的數(shù)據(jù),判斷讀取的該幀的包 個數(shù),執(zhí)行步驟505 ; 步驟505如果返回包個數(shù)為1,則數(shù)據(jù)幀可能是非I幀包或者分包總數(shù)是1的一個 I幀包,將該包直接進行播放跳轉到步驟504 ; 如果返回包個數(shù)大于l,則數(shù)據(jù)幀是I幀,將這幾個包順序進行播放,跳轉到步驟
504 ;如果返回包個數(shù)為0,則數(shù)據(jù)幀為空,跳轉步驟506 ;
步驟506停止本輪次播放。 圖6是出了動態(tài)緩存鏈表取包子過程,該過程應該上鎖,輸入數(shù)據(jù)為待取包序號, 返回數(shù)據(jù)為所取包個數(shù)、包類型、以及所有取到的包。 步驟601檢查輸入的待取包的包序號(nNextFrameNo),如果包序號為0,跳轉到步 驟602 ;否則跳轉到步驟605 ; 步驟602檢查動態(tài)有序鏈表,如果鏈表包總數(shù)為0,則返回所取包個數(shù)為0,跳轉到 步驟609 ; 步驟603分析第一個包(包序號最小),如果該包為非I幀,取出該包,將動態(tài)順序 鏈表包總數(shù)減l,并返回所取包數(shù)為1,同時nNextFrameNo等于該包包序號加l,跳轉到步驟
609 ; 步驟604分析該I幀(包括分包總數(shù)m、包序號和包類型),看其所有分包是否全 部到達,如果全部到達,順序取出全部該I幀分包,將動態(tài)順序鏈表包總數(shù)減m,并返回所取 包數(shù)為m,同時nNextFrameNo等于該包包序號加l,跳轉到步驟609 ;否則返回所取包個數(shù)為0,跳轉到步驟609。 步驟605如果待取包序號不為O,檢查鏈表中是否存在該序號的包,如果不存在, 則返回所取包個數(shù)為O,跳轉到步驟609 ; 步驟606如果存在,分析該包,如果該包包序號大于nNextFrameNo,則返回所取包 個數(shù)為0,跳轉到步驟609 ; 步驟607如果該包包序號等于nNextFrameNo,分析該包,如果該包為非I幀,取 出該包,將動態(tài)順序鏈表包總數(shù)減l,并返回所取包數(shù)為1, nNextFrameNo加l,跳轉到步驟
609 ; 步驟608如果該該包為I幀分包,看其所有分包是否全部到達,如果全部到達,順 序取出全部該I幀分包,將動態(tài)順序鏈表包總數(shù)減m,并返回所取包數(shù)為m, nNextFrameNo加 1 ;否則返回所取包個數(shù)為0 ;
步驟609取包算法結束。 以上所述僅為本發(fā)明的較佳實施例,并不用于限制本發(fā)明,凡在本發(fā)明精神和原 則之內所做的任何修改、等同替換和改進等,均包含于本發(fā)明的保護范圍之內。
權利要求
一種基于公共數(shù)字移動通信網(wǎng)絡的視頻包多鏈路接收方法,其特征在于包括如下步驟步驟A、建立多個套接字(socket)接收視頻數(shù)據(jù)包;步驟B、任意套接字收到視頻數(shù)據(jù)包,判斷是否是正確的數(shù)據(jù)包,如果是跳轉到步驟C;否則丟棄該包數(shù)據(jù),并跳轉到步驟E;步驟C、啟動插包子過程,對I幀包的分包以及非I幀包進行插包緩存,形成正常的數(shù)據(jù)幀;步驟D、通知播放線程有視頻分包插入鏈表,跳轉步驟E;步驟E、判斷套接字是否已關閉,如果沒有關閉,跳轉至步驟B;否則跳轉步驟F;步驟F、結束;其中所述插包子過程包括步驟C1、比較待插入幀的包序號與下一播放幀包序號(nNextFrameNo)的差值,如果差值小于預定閾值跳轉到步驟C2;步驟C2、檢查動態(tài)鏈表的視頻包總個數(shù),如果小于動態(tài)鏈表最大包數(shù)目,則將丟包標志標記為FALSE,跳轉到步驟C3;步驟C3、生成一個新的視頻包結構,根據(jù)插入幀的包序號查找插入位置,直接插入到動態(tài)有序鏈表中,并將動態(tài)有序鏈表個數(shù)加1。
2. 如權利要求1所述的方法,其特征在于步驟C2中如果視頻包個數(shù)大于等于鏈表最 大包數(shù)目則將丟包標志標記為TRUE,并且動態(tài)鏈表丟包子過程,該動態(tài)鏈表丟包子過程包 括步驟C21、分析動態(tài)鏈表中的最小序號包,如果最小序號包是I幀分包,若包序號大于 等于nNextFrameNo,將nNextFrameNo標記為該包序號力口 1 ;否則nNextFrameNo保持不變, 刪除鏈表中所有已經(jīng)到達的該I幀分包,同時鏈表中元素個數(shù)減該已經(jīng)到達的該I幀分包 的數(shù)目,標記丟包標志為TRUE,跳轉到步驟C22 ;如果最小序號包是非I幀包,若包序號大于等于nNextFrameNo,則將nNextFrameNo標 記為該包序號加1 ;否則nNextFrameNo保持不變,并將該包從鏈表中刪除,同時鏈表中元素 個數(shù)減l,標記bDropFrame為TRUE ;步驟C22分析動態(tài)順序鏈表,如果最小序號包是非I幀包,若該包包序號大于等于 nNextFrameNo,則將nNextFrameNo標記為該包序號力口 1 ;否則nNextFrameNo保持不變,并 將該包從鏈表中刪除,同時鏈表中元素個數(shù)減l,標記丟包標記為TRUE,跳轉到步驟C23 ;如果最小序號包是I幀包,標記丟包標記為FALSE ;步驟C23、動態(tài)鏈表丟包子過程結束。
3. —種對如權利要求1方法所接收的數(shù)據(jù)進行播放的方法,包括步驟a判斷是否收到有視頻包插入的通知,是的話跳轉步驟b,否則跳轉步驟f ;步驟b進行播放設置的初始化,其中,下一播放幀包序號(nNextFrameNo)初始化為0, 同時標記播放標志為TRUE ;丟包標志為FALSE ;步驟c ;如果播放標記為FALSE,清空動態(tài)順序鏈表,跳轉步驟f ;如果播放標記為 TRUE,跳轉步驟d;步驟d從動態(tài)鏈表中讀取包序號為nNextFrameNo的數(shù)據(jù),判斷讀取的該幀的包個數(shù),執(zhí)行步驟e ;步驟e如果返回包個數(shù)為l,則數(shù)據(jù)幀可能是非I幀包或者分包總數(shù)是1的一個I幀包,將該包直接進行播放跳轉到步驟d ;如果返回包個數(shù)大于l,則數(shù)據(jù)幀是I幀,將這幾個包順序進行播放,跳轉到步驟d ; 如果返回包個數(shù)為O,則數(shù)據(jù)幀為空,跳轉步驟f ; 步驟f停止本輪次播放。
全文摘要
本發(fā)明提供了一種基于公共移動通信網(wǎng)絡的視頻無線多鏈路接收和播放方法,建立多個套接字(socket)多線程接收視頻數(shù)據(jù)包,并對I幀包的分包以及非I幀包進行插包緩存,形成正常的數(shù)據(jù)幀,實現(xiàn)完整視頻數(shù)據(jù)幀的多個分包通過多鏈路傳輸后的接收播放功能,解決無線視頻圖像馬賽克現(xiàn)象和流暢性問題,并保證視頻的實時性。
文檔編號H04W28/06GK101707786SQ20091024158
公開日2010年5月12日 申請日期2009年11月26日 優(yōu)先權日2009年11月26日
發(fā)明者葉光明, 吳長樹, 姚永強, 楊裕歡, 林歡, 汪新春, 沈俊, 王華馳, 王峰 申請人:武漢虹信通信技術有限責任公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1