點對點實時視頻傳輸方法及其傳輸系統(tǒng)的制作方法
【專利摘要】本發(fā)明涉及互聯(lián)網(wǎng)視頻傳輸【技術領域】,公開了一種點對點實時視頻傳輸方法及其傳輸系統(tǒng)。本發(fā)明中,通過同時在設備端(發(fā)送端)以及用戶端(接收端)建立緩沖池,建立一套有效的管理方法將這種丟棄數(shù)據(jù)的情形變成可控而且高效化,并且判斷是否需要丟棄或重傳特定數(shù)據(jù),更能適用于公共網(wǎng)絡的應用,即使在網(wǎng)絡不理想的情況下,排除了舊數(shù)據(jù)堵塞妨礙及時數(shù)據(jù)的傳輸問題,能夠保持視頻的實時性以及更佳的連貫性,提高了互聯(lián)網(wǎng)點對點實時視頻傳輸?shù)某晒β省?br>
【專利說明】點對點實時視頻傳輸方法及其傳輸系統(tǒng)
【技術領域】
[0001] 本發(fā)明涉及互聯(lián)網(wǎng)視頻傳輸【技術領域】,特別涉及一種點對點實時視頻傳輸方法及 其傳輸系統(tǒng)。
【背景技術】
[0002] 現(xiàn)有民用市場的互聯(lián)網(wǎng)的視頻監(jiān)控其傳輸模式包括P2P (Peer To Peer,點對點直 連)。P2P是一種面向一般大眾使用的視頻監(jiān)控系統(tǒng),需要分布式的設備安裝,以及低廉的 運營成本。
[0003] 但是現(xiàn)有的P2P技術需要設備端(數(shù)據(jù)發(fā)送端)與用戶端(數(shù)據(jù)接收端)雙方建 立連接之后,才能開始傳輸數(shù)據(jù),這樣會導致傳輸數(shù)據(jù)時的延遲時間比較長,即使接收端接 收到數(shù)據(jù),也會因為數(shù)據(jù)過時而無法使用。
[0004] 另外,由于用戶對視頻實時性的要求越來越高,TCP (Transmission Control Protocol,傳輸控制協(xié)議)在大部分的網(wǎng)絡環(huán)境里,已經(jīng)無法滿足需求。此外,標準 UDP(User Datagram Protocol,用戶數(shù)據(jù)報協(xié)議)不具備數(shù)據(jù)重傳的機制,會造成大量數(shù)據(jù) 丟失。目前部分商用系統(tǒng)也有在標準UDP協(xié)議下,建立數(shù)據(jù)重傳的機制,但在視頻實時性上 未能達到要求,仍然無法滿足用戶對視頻完整性的要求。
[0005] 綜上所述,目前的互聯(lián)網(wǎng)視頻監(jiān)控的傳輸方法的實時性低,使得用戶感知度低。
【發(fā)明內(nèi)容】
[0006] 本發(fā)明的目的在于提供一種點對點實時視頻傳輸方法及其傳輸系統(tǒng),使得視頻傳 輸?shù)膶崟r性得以保持,并獲得更佳的連貫性,提高互聯(lián)網(wǎng)點對點實時視頻傳輸?shù)某晒β省?br>
[0007] 為解決上述技術問題,本發(fā)明的實施方式提供了一種點對點實時視頻傳輸方法, 包含以下步驟:
[0008] S1、發(fā)送端在視頻編碼時,為視頻數(shù)據(jù)包添加標簽,所述標簽包含:所述視頻數(shù)據(jù) 包的編碼時間及是否包含巾貞內(nèi)編碼I巾貞;
[0009] S2、發(fā)送端將待發(fā)送的視頻數(shù)據(jù)包存放在發(fā)送端緩沖池中;
[0010] S3、發(fā)送端和接收端成功建立P2P連接后,發(fā)送端將所述發(fā)送端緩沖池中第一預 設小區(qū)內(nèi)存放的視頻數(shù)據(jù)包作為當前發(fā)送數(shù)據(jù)發(fā)送出去;
[0011] S4、接收端將接收的數(shù)據(jù)存放在接收端緩沖池中;
[0012] S5、接收端將接收端緩沖池的第二預設小區(qū)內(nèi)的視頻數(shù)據(jù)包作為當前播放數(shù)據(jù)進 行解碼播放;
[0013] 其中,預先在發(fā)送端和接收端分別建立所述發(fā)送端緩沖池和所述接收端緩沖池, 所述發(fā)送端緩沖池用于存放已經(jīng)發(fā)送的視頻數(shù)據(jù)包和待發(fā)送的視頻數(shù)據(jù)包,所述接收端緩 沖池用于存放接收到但還未使用的視頻數(shù)據(jù)包;所述發(fā)送端緩沖池和所述接收端緩沖池分 別進行分區(qū)并編號管理,每一個小區(qū)內(nèi)存儲一個視頻數(shù)據(jù)包。
[0014] 本發(fā)明的實施方式還提供了一種點對點實時視頻傳輸系統(tǒng),包含:發(fā)送端和接收 端;所述發(fā)送端包含:視頻編碼模塊、發(fā)送端緩沖池和發(fā)送模塊;所述接收端包含:接收模 塊、接收端緩沖池和解碼播放模塊;
[0015] 所述視頻編碼模塊用于在視頻編碼時,為視頻數(shù)據(jù)包添加標簽,所述標簽包含:所 述視頻數(shù)據(jù)包的編碼時間及是否包含幀內(nèi)編碼I幀;
[0016] 所述發(fā)送端緩沖池用于存放已經(jīng)發(fā)送的視頻數(shù)據(jù)包和待發(fā)送的視頻數(shù)據(jù)包;
[0017] 所述發(fā)送模塊用于在發(fā)送端和接收端成功建立P2P連接后,將所述發(fā)送端緩沖池 中第一預設小區(qū)內(nèi)存放的視頻數(shù)據(jù)包作為當前發(fā)送數(shù)據(jù)發(fā)送出去;
[0018] 所述接收模塊用于接收來自發(fā)送端的數(shù)據(jù);
[0019] 所述接收端緩沖池用于存放接收到但還未使用的視頻數(shù)據(jù)包;
[0020] 所述解碼播放模塊用于讀取所述接收端緩沖池的第二預設小區(qū)內(nèi)的視頻數(shù)據(jù)包 作為當前播放數(shù)據(jù)進行播放;
[0021] 其中,預先在發(fā)送端和接收端分別建立所述發(fā)送端緩沖池和所述接收端緩沖池, 所述發(fā)送端緩沖池和所述接收端緩沖池分別進行分區(qū)并編號管理,每一個小區(qū)內(nèi)存儲一個 視頻數(shù)據(jù)包。
[0022] 本發(fā)明實施方式相對于現(xiàn)有技術而言,更能適用于公共網(wǎng)絡的應用,即使在網(wǎng)絡 不理想的情況下,排除了舊數(shù)據(jù)堵塞妨礙及時數(shù)據(jù)的傳輸問題,能夠保持視頻的實時性以 及更佳的連貫性,提高了互聯(lián)網(wǎng)點對點實時視頻傳輸?shù)某晒β省?br>
[0023] 另外,所述發(fā)送端緩沖池內(nèi)的數(shù)據(jù)以發(fā)送指針管理,所述接收端緩沖池內(nèi)的數(shù)據(jù) 以接收端指針管理;所述發(fā)送指針與所述發(fā)送端緩沖池的小區(qū)編號一一對應,所述接收指 針與所述接收端緩沖池的小區(qū)編號一一對應;
[0024] 所述發(fā)送端緩沖池和所述接收端緩沖池的小區(qū)編號分別保持固定不變,且其前后 順序不變;
[0025] 所述發(fā)送指針的編號連續(xù)且循環(huán),其值根據(jù)發(fā)送端發(fā)送數(shù)據(jù)情況實時修改;
[0026] 所述接收指針的編號連續(xù)且循環(huán),其值根據(jù)接收端接收數(shù)據(jù)情況實時修改。
[0027] 另外,為了標記小區(qū)內(nèi)含是否有解碼所需重要幀(I幀),在所述步驟S2中,包含以 下子步驟:
[0028] 在每一個小區(qū)的發(fā)送指針中添加第一旗號FLAG1,所述FLAG1用于標記所述發(fā)送 指針對應小區(qū)內(nèi)的數(shù)據(jù)是否包含I幀數(shù)據(jù);
[0029] 其中,所述FLAG1為1,代表有I幀數(shù)據(jù);所述FLAG1為0,代表沒有I幀數(shù)據(jù)。
[0030] 另外,在發(fā)送端緩沖池寫滿時,通過保留包含I幀視頻數(shù)據(jù)包的小區(qū),清空不包含 I幀視頻數(shù)據(jù)包的小區(qū),保留關鍵解碼信息,以便接收端解碼播放時,能給出參考。具體地 說,在所述步驟S2中,包含以下子步驟:
[0031] 在向所述發(fā)送端緩沖池寫入數(shù)據(jù)時,如果寫入小區(qū)的發(fā)送指針指向最大編號的小 區(qū),則:
[0032] 從所述第一預設小區(qū)開始查找,找到所述FLAG1為1的小區(qū);
[0033] 清空所述第一預設小區(qū)至所述找到的FLAG1為1的小區(qū)之間小區(qū)存放的數(shù)據(jù);計 算所述找到的FLAG1為1的小區(qū)對應的編號與所述第一預設小區(qū)的編號之間的第一差值;
[0034] 將所述找到的FLAG1為1的小區(qū)作為第一預設的小區(qū),所述找到的FLAG1為1的 小區(qū)之后的小區(qū)編號分別減去所述第一差值。
[0035] 另外,在所述步驟S2之后,所述步驟S3之前,還包含以下步驟:
[0036] 在P2P連接成功時,查找最后一個FLAG1為1的小區(qū),并計算所述最后一個FLAG1 為1的小區(qū)的發(fā)送指針編號與所述第一預設小區(qū)編號的第二差值;
[0037] 將所述最后一個FLAG1為1的小區(qū)的發(fā)送指針編號變更為第一預設小區(qū)編號;
[0038] 將所有小區(qū)的發(fā)送指針編號都減去所述第二差值。
[0039] 另外,在所述步驟S3之后,還包含以下步驟:
[0040] 如果發(fā)送端成功發(fā)送緩沖池小區(qū)的數(shù)據(jù),則將發(fā)送端緩沖池內(nèi)小區(qū)的發(fā)送指針編 號全部減1。
[0041] 在成功發(fā)送緩沖池小區(qū)的數(shù)據(jù)時,通過發(fā)送指針全部減1,以更新發(fā)送緩沖池內(nèi)數(shù) 據(jù)的時間,保證發(fā)送緩沖池內(nèi)數(shù)據(jù)的時間性。
[0042] 另外,為了標記小區(qū)內(nèi)含是否有解碼所需重要幀(比如,I幀),在所述步驟S4中, 包含以下子步驟:
[0043] 在每一個小區(qū)的接收指針中添加第二旗號FLAG2,所述FLAG2用于標記所述接收 指針對應小區(qū)內(nèi)的數(shù)據(jù)是否包含I幀數(shù)據(jù);
[0044] 其中,所述FLAG2為1,代表有I幀數(shù)據(jù);所述FLAG2為0,代表沒有I幀數(shù)據(jù)。
[0045] 另外,在所述步驟S4中,包含以下子步驟:
[0046] 在向所述接收端緩沖池寫入數(shù)據(jù)時,如果寫入小區(qū)的接收指針指向最大編號的小 區(qū),則:
[0047] 從所述第二預設小區(qū)開始查找,找到所述FLAG2為1的小區(qū);
[0048] 清空所述第二預設小區(qū)至所述找到的FLAG2為1的小區(qū)之間小區(qū)存放的數(shù)據(jù);計 算所述找到的FLAG2為1的小區(qū)對應的編號與所述第二預設小區(qū)的編號之間的第三差值;
[0049] 將所述找到的FLAG2為1的小區(qū)作為第二預設的小區(qū),所述找到的FLAG2為1的 小區(qū)之后的小區(qū)編號分別減去所述第三差值。
[0050] 另外,在所述步驟S5之后,還包含以下步驟:
[0051] 在接收端有效緩沖池的2個I幀之間檢查視頻數(shù)據(jù)包的封包編號,如有空缺,則檢 查前一個封包的編碼時間;
[0052] 如果所述前一個封包的編碼時間與當前時間的時間差小于3秒,則接收端向發(fā)送 端發(fā)命令,請求發(fā)送端重傳所述空缺的封包。
[0053] 另外,在所述步驟S5之后,還包含以下步驟:
[0054] 在接收端小區(qū)數(shù)據(jù)被成功解碼播放后,將所有接收指針的編號減1。
[0055] 另外,在所述步驟S5之后,還包含以下步驟:
[0056] 播放程序從接收端緩沖池的第二預設小區(qū)取得數(shù)據(jù)加以解碼播放;
[0057] 如果解碼時取得的編碼時間是3秒之內(nèi),則繼續(xù)從下一個接收指針編號的小區(qū)取 得數(shù)據(jù)加以解碼播放;如果解碼時取得的編碼時間是3秒之前,則直接查找下一個FLAG2為 1的緩沖池小區(qū),并且將該小區(qū)接收指針編號為〇,同時將所有接收指針流水號依據(jù)相應關 系,重新編排;
[0058] 播放程序從新的FLAG2為1的小區(qū)開始解碼播放。
【專利附圖】
【附圖說明】
[0059] 圖1是根據(jù)本發(fā)明第一實施方式的點對點實時視頻傳輸方法的流程圖;
[0060] 圖2是根據(jù)本發(fā)明第一實施方式的點對點實時視頻傳輸方法中緩沖池工作示意 圖;
[0061] 圖3是根據(jù)本發(fā)明第二實施方式的點對點實時視頻傳輸系統(tǒng)的結構示意圖;。
【具體實施方式】
[0062] 為使本發(fā)明的目的、技術方案和優(yōu)點更加清楚,下面將結合附圖對本發(fā)明的各實 施方式進行詳細的闡述。然而,本領域的普通技術人員可以理解,在本發(fā)明各實施方式中, 為了使讀者更好地理解本申請而提出了許多技術細節(jié)。但是,即使沒有這些技術細節(jié)和基 于以下各實施方式的種種變化和修改,也可以實現(xiàn)本申請各權利要求所要求保護的技術方 案。
[0063] 本發(fā)明的第一實施方式涉及一種點對點實時視頻傳輸方法,該方法設計了傳輸緩 沖池管理,并且在UDP協(xié)議上添加自有模塊,判斷是否需要丟棄或重傳特定數(shù)據(jù);還建立一 套有效的管理方法將這種丟棄數(shù)據(jù)的情形變成可控而且高效化。
[0064] 圖1所示是緩沖池工作示意圖,其工作過程如下:
[0065] a.發(fā)送端建立緩沖池48個小區(qū),編號0?47,對應初始化發(fā)送指針編號0?47.
[0066] b.接收端建立緩沖池32個小區(qū),編號0?31,對應初始化接收指針編號0?31 [0067] (1) P2P (Peer to Peer, P2P)連接成功,(2)開始傳輸數(shù)據(jù),以發(fā)送指針管理發(fā)送端 數(shù)據(jù)的實時性,以接收指針管理接收到的數(shù)據(jù)的實時性。(3)以I幀標記為丟棄無效數(shù)據(jù)單 位,發(fā)現(xiàn)有效數(shù)據(jù)被丟包的情況可以要求重傳特定封包,彌補UDP協(xié)議的缺點,提高視頻播 放的連貫性。
[0068] 以下分別圖1中對各部分進行說明:
[0069] 本發(fā)明同時在設備端(發(fā)送端)以及用戶端(接收端)建立緩沖池。緩沖池大小 的設計依據(jù)視頻流大小計算而得;比如,為了保存前3秒已經(jīng)傳輸?shù)牡臄?shù)據(jù)以及保證3秒內(nèi) 新數(shù)據(jù)的不會遺失,以512Kb碼流為例,6秒鐘的緩沖需要3Mb的空間。
[0070] -、視頻編碼:一般指攝像頭的編碼模塊。
[0071] 在視頻數(shù)據(jù)包添加標簽,注明編碼時間以及該封包是否包含I Frame(幀內(nèi)編碼 幀)。
[0072] 具體地說,可以通過攝像頭的編碼模塊進行視頻編碼,攝像頭的編碼模塊可以在 視頻數(shù)據(jù)包添加標簽,注明編碼時間(也就是,在數(shù)據(jù)的封包里含有時間的數(shù)據(jù))以及該封 包是否包含I Frame (幀內(nèi)編碼幀)。比如說,可以通過FLAG來標識,若是FLAG為1,證明 包含I幀,若是FLAG為0,證明不包含I幀。
[0073] 二、發(fā)送端:一般指攝像頭的網(wǎng)絡模塊。
[0074] (1)在發(fā)送端建立3Mb的緩沖池存放已經(jīng)發(fā)送和需要發(fā)送的數(shù)據(jù)。將發(fā)送端緩沖 池分成48個64Kb的小區(qū),每一個小區(qū)都編上流水號0至47,各個小區(qū)是連續(xù)而且循環(huán),小 區(qū)的流水號編號保持固定不變,而且其前后順序不變,流水號47的小區(qū)其后是流水號為0 的小區(qū)。
[0075] (2)將發(fā)送端緩沖池的每一個小區(qū)都初始化編上對應的流水號0至47作為發(fā)送指 針,發(fā)送指針流水號為連續(xù)而且循環(huán),發(fā)送指針流水號受程序控制修改,7減1為46,1減1 為〇,〇減1為47,依次類推。
[0076] 也就是說,發(fā)送端緩沖池內(nèi)的數(shù)據(jù)以發(fā)送指針管理,發(fā)送指針與發(fā)送端緩沖池的 小區(qū)編號一一對應,發(fā)送端緩沖池的小區(qū)編號保持固定不變,且其前后順序不變;發(fā)送指針 的編號連續(xù)且循環(huán),其值根據(jù)發(fā)送端發(fā)送數(shù)據(jù)情況實時修改。比如說,
[0077] (3)儲存在發(fā)送端緩沖池發(fā)送指針24(第一預設小區(qū))的小區(qū)數(shù)據(jù)為當前發(fā)送數(shù) 據(jù),發(fā)送指針〇?23的小區(qū)保存了已經(jīng)發(fā)送的最近3秒以上的數(shù)據(jù)。通過保存前3秒已經(jīng) 傳輸?shù)牡臄?shù)據(jù)以及保證3秒內(nèi)新數(shù)據(jù)的不會遺失,已備重傳。
[0078] (4)在發(fā)送端緩沖池每一個小區(qū)發(fā)送指針添加 Flag (旗號),1代表有I幀數(shù)據(jù),0 代表沒有I幀數(shù)據(jù)。
[0079] 也就是說,為了標記小區(qū)內(nèi)含是否有解碼所需重要幀(I幀),可以在每一個小區(qū) 的發(fā)送指針中添加第一旗號FLAG1,F(xiàn)LAG1用于標記發(fā)送指針對應小區(qū)內(nèi)的數(shù)據(jù)是否包含I 幀數(shù)據(jù);其中,F(xiàn)LAG1為1,代表有I幀數(shù)據(jù);FLAG1為0,代表沒有I幀數(shù)據(jù)。
[0080] (5)在向發(fā)送端緩沖池寫入數(shù)據(jù)的時,檢查寫入小區(qū)的發(fā)送指針,比如,如果大于 46 (代表3秒以前的數(shù)據(jù)還沒有被送出去),則清空發(fā)送指針24號以后的小區(qū),直到下一個 I幀數(shù)據(jù)小區(qū)被找到并且被編號為發(fā)送指針24。其他所有小區(qū)的編號都減去相同的數(shù)值, 保持如后關系。
[0081] 舉例來說,如果寫入小區(qū)的發(fā)送指針指向最大編號的小區(qū)(比如47號小區(qū)),則從 第一預設小區(qū)(比如,24號小區(qū))開始查找,找到FLAG1為1的小區(qū)(比如,31號小區(qū)); 清空第一預設小區(qū)至找到的FLAG1為1的小區(qū)之間小區(qū)存放的數(shù)據(jù)(在本例中是:25至30 號小區(qū));計算找到的FLAG1為1的小區(qū)對應的編號與第一預設小區(qū)的編號之間的第一差 值(在本例中為7);將找到的FLAG1為1的小區(qū)作為第一預設的小區(qū)(31變?yōu)?4),找到的 FLAG1為1的小區(qū)之后的小區(qū)編號分別減去第一差值(32至47均減去7)。
[0082] (6)在P2P連接成功時,將最后一個有I幀的小區(qū)的發(fā)送指針編號變更為24,其它 所有小區(qū)的發(fā)送指針編號都減去相同的數(shù)值,保持前后關系。
[0083] 舉例來說,在P2P連接成功時,查找最后一個FLAG1為1的小區(qū)(比如40),并計 算最后一個FLAG1為1的小區(qū)的發(fā)送指針編號與第一預設小區(qū)編號(比如24)的第二差值 (40-24 = 16);將最后一個FLAG1為1的小區(qū)的發(fā)送指針編號變更為第一預設小區(qū)編號(40 變更為24);將所有小區(qū)的發(fā)送指針編號都減去第二差值。簡單來說,在P2P連接成功時, 將最后一個有I幀的小區(qū)的發(fā)送指針編號變更為24,其它所有小區(qū)的發(fā)送指針編號都減去 相同的數(shù)值,保持前后關系。
[0084] (7)在發(fā)送端成功發(fā)送緩沖池小區(qū)的數(shù)據(jù)后,將發(fā)送端緩沖池內(nèi)小區(qū)的發(fā)送指針 編號全部減1,以確保更新數(shù)據(jù)的時間性。
[0085] 三、接收端:一般指用戶電腦的客戶端。
[0086] (1)在接收端建立接收端緩沖池存放接收到但還沒有使用的數(shù)據(jù)。
[0087] 仍以512Kb碼流為例,3秒數(shù)據(jù)最多1. 5Mb,但為了確保發(fā)送完整,保留最后一秒數(shù) 據(jù),所以接收端緩沖池的容量需要512KX4 = 2Mb。其他情況下的接收端緩沖池的容量可根 據(jù)碼流、需緩存的數(shù)據(jù)量計算得到。
[0088] (2)在接收端緩沖池分成32個64Kb的小區(qū),在接收端緩沖池每一個小區(qū)都編上流 水號0至31,各個小區(qū)是連續(xù)而且循環(huán),小區(qū)的流水號編號保持固定不變,而且其前后順序 不變,流水號31的小區(qū)其后是流水號為0的小區(qū)。
[0089] 也就是說,接收端緩沖池內(nèi)的數(shù)據(jù)以接收端指針管理,接收指針與接收端緩沖池 的小區(qū)編號一一對應;接收端緩沖池的小區(qū)編號保持固定不變,且其前后順序不變;接收 指針的編號連續(xù)且循環(huán),其值根據(jù)接收端接收數(shù)據(jù)情況實時修改。為了保證接收到的每個 數(shù)據(jù)包的大小和發(fā)送端是一樣的,從而也可以確定出緩沖池的個數(shù)。
[0090] (3)將接收端緩沖池每一個小區(qū)都初始化編上流水號0至31作為接收指針,接收 指針流水號受程序控制修改,接收指針流水號為連續(xù)而且循環(huán),31減1為30,1減1為0,0 減1為31,依次類推。
[0091] (4)在接收端緩沖池每一個小區(qū)接收指針添加 Flag (旗號),代表有或沒有I幀數(shù) 據(jù)。
[0092] 具體地說,為了標記小區(qū)內(nèi)含是否有解碼所需重要幀(I幀),在每一個小區(qū)的接 收指針中添加第二旗號FLAG2,F(xiàn)LAG2用于標記接收指針對應小區(qū)內(nèi)的數(shù)據(jù)是否包含I幀數(shù) 據(jù);其中,F(xiàn)LAG2為1,代表有I幀數(shù)據(jù);FLAG2為0,代表沒有I幀數(shù)據(jù)。
[0093] (5)儲存在接收端緩沖池接收指針0的小區(qū)的數(shù)據(jù)作為當前播放數(shù)據(jù)。在接收端 緩沖池寫入數(shù)據(jù)的時候,檢查寫入小區(qū)的接收指針,如果大于30代表3秒以前的數(shù)據(jù)還沒 有被播放,則清空接收指針〇號小區(qū)以后的小區(qū),直到下一個I幀數(shù)據(jù)小區(qū)被找到,而且其 接收指針被編號為〇。多保留8個小區(qū)是為了確保I幀被完整保存,3秒內(nèi)的P幀能被解碼 使用,增加有效數(shù)據(jù)比率。
[0094] 舉例來說,如果寫入小區(qū)的接收指針指向最大編號的小區(qū)(31),也就是接收端緩 沖池已經(jīng)寫滿,則:從第二預設小區(qū)開始查找,找到FLAG2為1的小區(qū)(比如:9號);清空 第二預設小區(qū)至找到的FLAG2為1的小區(qū)之間小區(qū)存放的數(shù)據(jù)(1至8號);計算找到的 FLAG2為1的小區(qū)對應的編號與第二預設小區(qū)的編號之間的第三差值(9);將找到的FLAG2 為1的小區(qū)作為第二預設的小區(qū)(9變更為0),找到的FLAG2為1的小區(qū)之后的小區(qū)編號分 別減去第二差值(10至31均減去9)。
[0095] (6)解碼播放程序在接收端有效緩沖池的2個I幀之間檢查封包編號,如有空缺, 則檢查前一個封包的時間戳(也就是,封包的編碼時間),如果前一個封包的編碼時間與當 前時間的時間差小于3秒,則接收端向發(fā)送端發(fā)命令,請求發(fā)送端重傳空缺的封包。而發(fā)送 端收到重傳請求之后,在發(fā)送端緩沖池中查找空缺的封包,若找到,則發(fā)送給接收端。
[0096] (7)在接收端小區(qū)數(shù)據(jù)被成功解碼播放后,將所有接收端接收指針的編號減1。
[0097] 四、視頻播放:一般指客戶端的播放程序。
[0098] (1)播放程序從接收端緩沖池接收指針為0的小區(qū)取得數(shù)據(jù)加以解碼播放。
[0099] (2)解碼時取得的時間戳(也就是,封包的編碼時間),如果是3秒之內(nèi),則繼續(xù)從 下一個接收指針編號的小區(qū)取得數(shù)據(jù)加以解碼播放。解碼時取得的時間戳,如果是3秒之 前,則直接查找下一個I幀的接收端緩沖池小區(qū),并且將該小區(qū)接收指針編號為〇,同時將 所有接收指針流水號依據(jù)相應關系,重新編排。
[0100] (3)播放程序從新的I幀的小區(qū)開始解碼播放,并且繼續(xù)重復上一步驟。
[0101] 與市場現(xiàn)有產(chǎn)品技術相比,本實施方式通過同時在設備端(發(fā)送端)以及用戶端 (接收端)建立緩沖池,建立一套有效的管理方法將這種丟棄數(shù)據(jù)的情形變成可控而且高 效化,并且判斷是否需要丟棄或重傳特定數(shù)據(jù),更能適用于公共網(wǎng)絡的應用,即使在網(wǎng)絡不 理想的情況下,排除了舊數(shù)據(jù)堵塞妨礙及時數(shù)據(jù)的傳輸問題,能夠保持視頻的實時性以及 更佳的連貫性,提高了互聯(lián)網(wǎng)點對點實時視頻傳輸?shù)某晒β省?br>
[0102] 以上根據(jù)圖1詳細說明了本發(fā)明的各部分,現(xiàn)對上述流程進行總結,如圖2所示, 包含以下步驟:
[0103] 步驟201,發(fā)送端在視頻編碼時,為視頻數(shù)據(jù)包添加標簽,標簽包含:視頻數(shù)據(jù)包 的編碼時間及是否包含巾貞內(nèi)編碼I巾貞;
[0104] 步驟202,發(fā)送端將待發(fā)送的視頻數(shù)據(jù)包存放在發(fā)送端緩沖池中;
[0105] 步驟203,發(fā)送端和接收端成功建立P2P連接后,發(fā)送端將發(fā)送端緩沖池中第一預 設小區(qū)內(nèi)存放的視頻數(shù)據(jù)包作為當前發(fā)送數(shù)據(jù)發(fā)送出去;
[0106] 步驟204,接收端將接收的數(shù)據(jù)存放在接收端緩沖池中;
[0107] 步驟205,接收端將接收端緩沖池的第二預設小區(qū)內(nèi)的視頻數(shù)據(jù)包作為當前播放 數(shù)據(jù)進行解碼播放。
[0108] 其中,預先在發(fā)送端和接收端分別建立發(fā)送端緩沖池和接收端緩沖池,發(fā)送端緩 沖池用于存放已經(jīng)發(fā)送的視頻數(shù)據(jù)包和待發(fā)送的視頻數(shù)據(jù)包,接收端緩沖池用于存放接收 到但還未使用的視頻數(shù)據(jù)包;發(fā)送端緩沖池和接收端緩沖池分別進行分區(qū)并編號管理,每 一個小區(qū)內(nèi)存儲一個視頻數(shù)據(jù)包。
[0109] 上面各種方法的步驟劃分,只是為了描述清楚,實現(xiàn)時可以合并為一個步驟或者 對某些步驟進行拆分,分解為多個步驟,只要包含相同的邏輯關系,都在本專利的保護范圍 內(nèi);對算法中或者流程中添加無關緊要的修改或者引入無關緊要的設計,但不改變其算法 和流程的核心設計都在該專利的保護范圍內(nèi)。
[0110] 本發(fā)明的第二實施方式涉及一種點對點實時視頻傳輸系統(tǒng),如圖3所示,包含:發(fā) 送端和接收端;該發(fā)送端包含:視頻編碼模塊、發(fā)送端緩沖池和發(fā)送模塊;該接收端包含: 接收模塊、接收端緩沖池和解碼播放模塊;
[0111] 視頻編碼模塊用于在視頻編碼時,為視頻數(shù)據(jù)包添加標簽,標簽包含:視頻數(shù)據(jù)包 的編碼時間及是否包含巾貞內(nèi)編碼I巾貞;
[0112] 發(fā)送端緩沖池用于存放已經(jīng)發(fā)送的視頻數(shù)據(jù)包和待發(fā)送的視頻數(shù)據(jù)包;
[0113] 發(fā)送模塊用于在發(fā)送端和接收端成功建立P2P連接后,將發(fā)送端緩沖池中第一預 設小區(qū)內(nèi)存放的視頻數(shù)據(jù)包作為當前發(fā)送數(shù)據(jù)發(fā)送出去;
[0114] 接收模塊用于接收來自發(fā)送端的數(shù)據(jù);
[0115] 接收端緩沖池用于存放接收到但還未使用的視頻數(shù)據(jù)包;
[0116] 解碼播放模塊用于讀取接收端緩沖池的第二預設小區(qū)內(nèi)的視頻數(shù)據(jù)包作為當前 播放數(shù)據(jù)進行播放;
[0117] 其中,預先在發(fā)送端和接收端分別建立發(fā)送端緩沖池和接收端緩沖池,發(fā)送端緩 沖池和接收端緩沖池分別進行分區(qū)并編號管理,每一個小區(qū)內(nèi)存儲一個視頻數(shù)據(jù)包。
[0118] 不難發(fā)現(xiàn),本實施方式為與第一實施方式相對應的系統(tǒng)實施例,本實施方式可與 第一實施方式互相配合實施。第一實施方式中提到的相關技術細節(jié)在本實施方式中依然有 效,為了減少重復,這里不再贅述。相應地,本實施方式中提到的相關技術細節(jié)也可應用在 第一實施方式中。
[0119] 值得一提的是,本實施方式中所涉及到的各模塊均為邏輯模塊,在實際應用中,一 個邏輯單元可以是一個物理單元,也可以是一個物理單元的一部分,還可以以多個物理單 元的組合實現(xiàn)。此外,為了突出本發(fā)明的創(chuàng)新部分,本實施方式中并沒有將與解決本發(fā)明 所提出的技術問題關系不太密切的單元引入,但這并不表明本實施方式中不存在其它的單 J Li 〇
[0120] 本領域的普通技術人員可以理解,上述各實施方式是實現(xiàn)本發(fā)明的具體實施例, 而在實際應用中,可以在形式上和細節(jié)上對其作各種改變,而不偏離本發(fā)明的精神和范圍。
【權利要求】
1. 一種點對點實時視頻傳輸方法,其特征在于,包含以下步驟: 51、 發(fā)送端在視頻編碼時,為視頻數(shù)據(jù)包添加標簽,所述標簽包含:所述視頻數(shù)據(jù)包的 編碼時間及是否包含巾貞內(nèi)編碼I巾貞; 52、 發(fā)送端將待發(fā)送的視頻數(shù)據(jù)包存放在發(fā)送端緩沖池中; 53、 發(fā)送端和接收端成功建立P2P連接后,發(fā)送端將所述發(fā)送端緩沖池中第一預設小 區(qū)內(nèi)存放的視頻數(shù)據(jù)包作為當前發(fā)送數(shù)據(jù)發(fā)送出去; 54、 接收端將接收的數(shù)據(jù)存放在接收端緩沖池中; 55、 接收端將接收端緩沖池的第二預設小區(qū)內(nèi)的視頻數(shù)據(jù)包作為當前播放數(shù)據(jù)進行解 碼播放; 其中,預先在發(fā)送端和接收端分別建立所述發(fā)送端緩沖池和所述接收端緩沖池,所述 發(fā)送端緩沖池用于存放已經(jīng)發(fā)送的視頻數(shù)據(jù)包和待發(fā)送的視頻數(shù)據(jù)包,所述接收端緩沖池 用于存放接收到但還未使用的視頻數(shù)據(jù)包;所述發(fā)送端緩沖池和所述接收端緩沖池分別進 行分區(qū)并編號管理,每一個小區(qū)內(nèi)存儲一個視頻數(shù)據(jù)包。
2. 根據(jù)權利要求1所述的點對點實時視頻傳輸方法,其特征在于,所述發(fā)送端緩沖池 內(nèi)的數(shù)據(jù)以發(fā)送指針管理,所述接收端緩沖池內(nèi)的數(shù)據(jù)以接收端指針管理;所述發(fā)送指針 與所述發(fā)送端緩沖池的小區(qū)編號一一對應,所述接收指針與所述接收端緩沖池的小區(qū)編號 --對應; 所述發(fā)送端緩沖池和所述接收端緩沖池的小區(qū)編號分別保持固定不變,且其前后順序 不變; 所述發(fā)送指針的編號連續(xù)且循環(huán),其值根據(jù)發(fā)送端發(fā)送數(shù)據(jù)情況實時修改; 所述接收指針的編號連續(xù)且循環(huán),其值根據(jù)接收端接收數(shù)據(jù)情況實時修改。
3. 根據(jù)權利要求2所述的點對點實時視頻傳輸方法,其特征在于,在所述步驟S2中,包 含以下子步驟: 在每一個小區(qū)的發(fā)送指針中添加第一旗號FLAG1,所述FLAG1用于標記所述發(fā)送指針 對應小區(qū)內(nèi)的數(shù)據(jù)是否包含I幀數(shù)據(jù); 其中,所述FLAG1為1,代表有I幀數(shù)據(jù);所述FLAG1為0,代表沒有I幀數(shù)據(jù)。
4. 根據(jù)權利要求3所述的點對點實時視頻傳輸方法,其特征在于,在所述步驟S2中,包 含以下子步驟: 在向所述發(fā)送端緩沖池寫入數(shù)據(jù)時,如果寫入小區(qū)的發(fā)送指針指向最大編號的小區(qū), 則: 從所述第一預設小區(qū)開始查找,找到所述FLAG1為1的小區(qū); 清空所述第一預設小區(qū)至所述找到的FLAG1為1的小區(qū)之間小區(qū)存放的數(shù)據(jù);計算所 述找到的FLAG1為1的小區(qū)對應的編號與所述第一預設小區(qū)的編號之間的第一差值; 將所述找到的FLAG1為1的小區(qū)作為第一預設的小區(qū),所述找到的FLAG1為1的小區(qū) 之后的小區(qū)編號分別減去所述第一差值。
5. 根據(jù)權利要求3所述的點對點實時視頻傳輸方法,其特征在于,在所述步驟S2之后, 所述步驟S3之前,還包含以下步驟: 在P2P連接成功時,查找最后一個FLAG1為1的小區(qū),并計算所述最后一個FLAG1為1 的小區(qū)的發(fā)送指針編號與所述第一預設小區(qū)編號的第二差值; 將所述最后一個FLAG1為1的小區(qū)的發(fā)送指針編號變更為第一預設小區(qū)編號; 將所有小區(qū)的發(fā)送指針編號都減去所述第二差值。
6. 根據(jù)權利要求3所述的點對點實時視頻傳輸方法,其特征在于,在所述步驟S3之后, 還包含以下步驟: 如果發(fā)送端成功發(fā)送緩沖池小區(qū)的數(shù)據(jù),則將發(fā)送端緩沖池內(nèi)小區(qū)的發(fā)送指針編號全 部減1。
7. 根據(jù)權利要求2所述的點對點實時視頻傳輸方法,其特征在于,在所述步驟S4中,包 含以下子步驟: 在每一個小區(qū)的接收指針中添加第二旗號FLAG2,所述FLAG2用于標記所述接收指針 對應小區(qū)內(nèi)的數(shù)據(jù)是否包含I幀數(shù)據(jù); 其中,所述FLAG2為1,代表有I幀數(shù)據(jù);所述FLAG2為0,代表沒有I幀數(shù)據(jù)。
8. 根據(jù)權利要求7所述的點對點實時視頻傳輸方法,其特征在于,在所述步驟S4中,包 含以下子步驟: 在向所述接收端緩沖池寫入數(shù)據(jù)時,如果寫入小區(qū)的接收指針指向最大編號的小區(qū), 則: 從所述第二預設小區(qū)開始查找,找到所述FLAG2為1的小區(qū); 清空所述第二預設小區(qū)至所述找到的FLAG2為1的小區(qū)之間小區(qū)存放的數(shù)據(jù);計算所 述找到的FLAG2為1的小區(qū)對應的編號與所述第二預設小區(qū)的編號之間的第三差值; 將所述找到的FLAG2為1的小區(qū)作為第二預設的小區(qū),所述找到的FLAG2為1的小區(qū) 之后的小區(qū)編號分別減去所述第三差值。
9. 根據(jù)權利要求7所述的點對點實時視頻傳輸方法,其特征在于,在所述步驟S5之后, 還包含以下步驟: 在接收端有效緩沖池的2個I幀之間檢查視頻數(shù)據(jù)包的封包編號,如有空缺,則檢查前 一個封包的編碼時間; 如果所述前一個封包的編碼時間與當前時間的時間差小于3秒,則接收端向發(fā)送端發(fā) 命令,請求發(fā)送端重傳所述空缺的封包; 發(fā)送端收到所述重傳請求之后,在發(fā)送端緩沖池中查找所述空缺的封包,若找到,則發(fā) 送給所述接收端。
10. 根據(jù)權利要求7所述的點對點實時視頻傳輸方法,其特征在于,在所述步驟S5之 后,還包含以下步驟: 在接收端小區(qū)數(shù)據(jù)被成功解碼播放后,將所有接收指針的編號減1。
11. 根據(jù)權利要求7所述的點對點實時視頻傳輸方法,其特征在于,在所述步驟S5之 后,還包含以下步驟: 播放程序從接收端緩沖池的第二預設小區(qū)取得數(shù)據(jù)加以解碼播放; 如果解碼時取得的編碼時間是3秒之內(nèi),則繼續(xù)從下一個接收指針編號的小區(qū)取得數(shù) 據(jù)加以解碼播放;如果解碼時取得的編碼時間是3秒之前,則直接查找下一個FLAG2為1的 緩沖池小區(qū),并且將該小區(qū)接收指針編號為0,同時將所有接收指針流水號依據(jù)相應關系, 重新編排; 播放程序從新的FLAG2為1的小區(qū)開始解碼播放。
12. -種點對點實時視頻傳輸系統(tǒng),其特征在于,包含:發(fā)送端和接收端;所述發(fā)送端 包含:視頻編碼模塊、發(fā)送端緩沖池和發(fā)送模塊;所述接收端包含:接收模塊、接收端緩沖 池和解碼播放模塊; 所述視頻編碼模塊用于在視頻編碼時,為視頻數(shù)據(jù)包添加標簽,所述標簽包含:所述視 頻數(shù)據(jù)包的編碼時間及是否包含幀內(nèi)編碼I幀; 所述發(fā)送端緩沖池用于存放已經(jīng)發(fā)送的視頻數(shù)據(jù)包和待發(fā)送的視頻數(shù)據(jù)包; 所述發(fā)送模塊用于在發(fā)送端和接收端成功建立P2P連接后,將所述發(fā)送端緩沖池中第 一預設小區(qū)內(nèi)存放的視頻數(shù)據(jù)包作為當前發(fā)送數(shù)據(jù)發(fā)送出去; 所述接收模塊用于接收來自發(fā)送端的數(shù)據(jù); 所述接收端緩沖池用于存放接收到但還未使用的視頻數(shù)據(jù)包; 所述解碼播放模塊用于讀取所述接收端緩沖池的第二預設小區(qū)內(nèi)的視頻數(shù)據(jù)包作為 當前播放數(shù)據(jù)進行播放; 其中,預先在發(fā)送端和接收端分別建立所述發(fā)送端緩沖池和所述接收端緩沖池,所述 發(fā)送端緩沖池和所述接收端緩沖池分別進行分區(qū)并編號管理,每一個小區(qū)內(nèi)存儲一個視頻 數(shù)據(jù)包。
【文檔編號】H04N7/18GK104092982SQ201410308718
【公開日】2014年10月8日 申請日期:2014年6月30日 優(yōu)先權日:2014年6月30日
【發(fā)明者】鄭俊彥 申請人:上海國兆電子科技有限公司