本發(fā)明屬于流媒體數(shù)據(jù)網(wǎng)絡(luò)傳輸技術(shù)領(lǐng)域,具體涉及一種實時視頻傳輸方法、裝置、設(shè)備及系統(tǒng)。
背景技術(shù):
隨著網(wǎng)絡(luò)技術(shù)的不斷發(fā)展,人們對于實時視頻業(yè)務(wù)等占用較大帶寬的網(wǎng)絡(luò)通信業(yè)務(wù)的需求不斷加強。目前常見的傳輸實時視頻流的做法是通過將ts(transportstream,傳輸流)承載在rtp(real-timetransportprotocol,實時傳輸協(xié)議)上,而rtp底層使用udp(userdatagramprotocol,用戶數(shù)據(jù)報協(xié)議)進行傳輸,目前大量的使用wifi及3g、4g等無線網(wǎng)絡(luò)通信連接互聯(lián)網(wǎng),由于udp本身是不可靠傳輸協(xié)議,以及無線網(wǎng)絡(luò)的相對不穩(wěn)定性,不可避免的造成部分rtp數(shù)據(jù)丟失。
為了解決rtp丟包問題,ietf(theinternetengineeringtaskforce,國際互聯(lián)網(wǎng)工程任務(wù)組)分別制訂了fec(前向糾錯,也叫前向糾錯碼)和nack(協(xié)商確認,起到丟包重傳的作用)兩種算法來解決這個問題。但是,使用fec算法會增加數(shù)據(jù)的冗余,加大流媒體數(shù)據(jù)的占用帶寬。nack算法引入了確認重傳,會導致實時性較差。
根據(jù)現(xiàn)有技術(shù)常用的視頻壓縮編碼算法,視頻畫面被編碼為內(nèi)部編碼幀(i幀,又稱關(guān)鍵幀)、多個前向預(yù)測幀(p幀)和雙向內(nèi)插幀(b幀)組成的圖像序列。關(guān)鍵幀通常是每個gop(groupofpictures,畫面組)的第一個幀,經(jīng)過適度地壓縮,做為隨機訪問的參考點,可以當成圖像。p幀由在它前面的p幀和i幀預(yù)測而來,視頻數(shù)據(jù)傳輸?shù)倪^程中,由于數(shù)據(jù)丟失,會造成視頻無法顯示或顯示模糊、卡頓,如果i幀數(shù)據(jù)不完整,會造成解碼失敗,無法顯示視頻畫面,如果p幀丟失會影響到后面p幀的解碼顯示,使畫面出現(xiàn)馬賽克,p幀丟失的越多,馬賽克越嚴重。在進行傳輸過程中,丟棄b幀數(shù)據(jù)包對于整個視頻的解碼顯示影響很小。
申請?zhí)枮?01410577593.8的中國專利,公開了一種視頻傳輸方法,通過獲取當前網(wǎng)絡(luò)傳輸質(zhì)量信息,查找對應(yīng)的視頻編碼參數(shù),根據(jù)視頻編碼參數(shù)去除圖片幀信息,再調(diào)整視頻的碼率和幀率,對視頻編碼后進行傳輸。該方法在網(wǎng)絡(luò)質(zhì)量下降時候調(diào)整了編碼參數(shù),降低了視頻質(zhì)量,導致視頻畫面的不清晰。另外,在網(wǎng)絡(luò)質(zhì)量經(jīng)常變化情況下,該方法發(fā)送端會頻繁地改變視頻編碼參數(shù),進行相應(yīng)的編碼處理,導致處理效率的低下和處理延時的增大,影響接收端的用戶體驗。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的之一在于克服以上缺點,實現(xiàn)在網(wǎng)絡(luò)質(zhì)量出現(xiàn)下降的環(huán)境下,盡可能降低網(wǎng)絡(luò)帶寬的使用,同時保證視頻的傳輸質(zhì)量。
為了解決上述技術(shù)問題,本發(fā)明提供了一種實時視頻傳輸方法,包括以下步驟:
步驟1:發(fā)送端將視頻幀數(shù)據(jù)編碼為關(guān)鍵幀或非關(guān)鍵幀,發(fā)送rtp數(shù)據(jù)包給接收端;所述關(guān)鍵幀的發(fā)送時機由配置的間隔參數(shù)確定;
步驟2:接收端對rtp數(shù)據(jù)包進行處理,若處理成功,則顯示視頻幀,若處理失敗,則發(fā)送重編關(guān)鍵幀或重傳關(guān)鍵幀中缺失的rtp數(shù)據(jù)請求給發(fā)送端;
步驟3:發(fā)送端接收后,重編關(guān)鍵幀并修改關(guān)鍵幀的發(fā)送時機后向接收端發(fā)送,或向接收端重傳關(guān)鍵幀中缺失的rtp數(shù)據(jù);
重復上述步驟1-3直至所有視頻幀數(shù)據(jù)傳輸完成。
本發(fā)明提出動態(tài)的關(guān)鍵幀間隔,在網(wǎng)絡(luò)質(zhì)量正常的情況下通過設(shè)置較大的關(guān)鍵幀間隔,從而減少關(guān)鍵幀的數(shù)量,降低傳輸?shù)目倲?shù)據(jù)量;在網(wǎng)絡(luò)質(zhì)量下降導致數(shù)據(jù)處理失敗的情況下,由接收端發(fā)送重編關(guān)鍵幀或重傳關(guān)鍵幀中缺失的rtp數(shù)據(jù)包請求。對于重編關(guān)鍵幀請求,發(fā)送端根據(jù)請求動態(tài)地進行關(guān)鍵幀編碼并修改關(guān)鍵幀發(fā)送時機,減少接收端視頻恢復的等待時間,保證視頻畫面的及時恢復。
進一步地,所述步驟1,還包括:
發(fā)送端將已發(fā)送的rtp數(shù)據(jù)包放入發(fā)送數(shù)據(jù)緩沖區(qū),當接收到重傳關(guān)鍵幀中缺失的rtp數(shù)據(jù)請求時,優(yōu)先查找所述發(fā)送數(shù)據(jù)緩沖區(qū)。
通過設(shè)置發(fā)送數(shù)據(jù)緩沖區(qū),提高發(fā)送端重傳關(guān)鍵幀中缺失的rtp數(shù)據(jù)時候查找數(shù)據(jù)的處理效率,縮短了處理時間。
進一步地,所述步驟2接收端對rtp數(shù)據(jù)包進行處理,具體為:
接收rtp數(shù)據(jù)包至接收數(shù)據(jù)緩沖區(qū);
判斷rtp數(shù)據(jù)包是否為請求重傳關(guān)鍵幀中缺失的數(shù)據(jù);
若非重傳關(guān)鍵幀中缺失的rtp數(shù)據(jù),進行正常數(shù)據(jù)幀處理;
若是重傳關(guān)鍵幀中缺失的rtp數(shù)據(jù),進行關(guān)鍵幀重處理。
進一步地,所述步驟2還包括:接收端設(shè)置等待緩沖區(qū),用于緩存重傳關(guān)鍵幀已接收的rtp數(shù)據(jù)包。
本發(fā)明的接收端采用了雙緩沖區(qū)機制,等待緩沖區(qū)緩存重傳關(guān)鍵幀已接收的rtp數(shù)據(jù)包,接收數(shù)據(jù)緩沖區(qū)可以繼續(xù)接收后續(xù)的rtp數(shù)據(jù)包,進行組幀操作,當不完整的關(guān)鍵幀接收完 整后,可以連續(xù)解碼顯示重傳關(guān)鍵幀及后續(xù)的視頻幀,減少由于等待重傳數(shù)據(jù)造成的實時視頻延時。
進一步地,所述接收端是根據(jù)設(shè)置的抖動延時從所述接收緩沖區(qū)讀取rtp數(shù)據(jù)包。
通過添加抖動延時可緩解由于網(wǎng)絡(luò)傳輸過程中造成的rtp數(shù)據(jù)包亂序的問題。
進一步地,所述正常數(shù)據(jù)幀處理,包括以下步驟:
對接收數(shù)據(jù)緩沖區(qū)中的rtp包進行組幀,并判斷視頻幀是否完整;
若視頻幀完整,則進行視頻幀解碼操作,解碼成功則標識處理結(jié)果為成功,否則標識處理結(jié)果為失敗,并發(fā)送重編關(guān)鍵幀請求給發(fā)送端;
若視頻幀不完整,則進一步判斷視頻幀是否為關(guān)鍵幀,若該視頻幀為關(guān)鍵幀,將已接收的rtp數(shù)據(jù)包寫入等待緩沖區(qū),標記處理結(jié)果為失敗,并發(fā)送重傳關(guān)鍵幀中缺失的rtp數(shù)據(jù)請求給發(fā)送端,通知發(fā)送端重傳關(guān)鍵幀中丟失的rtp數(shù)據(jù);若該視頻幀為非關(guān)鍵幀,則丟棄該視頻幀,再判斷兩連續(xù)的關(guān)鍵幀之間已經(jīng)拋棄的非關(guān)鍵幀數(shù)量是否達到閾值,若已經(jīng)達到閾值,標記處理結(jié)果為失敗,并發(fā)送重編關(guān)鍵幀請求給發(fā)送端,否則標記處理結(jié)果為成功。
上述技術(shù)方案在視頻幀不完整的情況下,會根據(jù)視頻幀的類型進行不同的處理:如果是關(guān)鍵幀則請求重傳關(guān)鍵幀中缺失的rtp數(shù)據(jù)包,這樣能夠保證視頻畫面的完整性;如果是非關(guān)鍵幀且累計丟棄幀數(shù)在設(shè)置閥值范圍內(nèi),則直接丟棄幀,等待下一個視頻幀,這樣處理的有益效果是減少重編關(guān)鍵幀的網(wǎng)絡(luò)開銷,保證視頻的流暢度,而對視頻畫面的影響只有輕微馬賽克或較小的延時;如果累計非關(guān)鍵幀丟棄幀數(shù)達到閥值,此時發(fā)送重編關(guān)鍵幀請求,保證視頻畫面的清晰度。
進一步地,所述進行關(guān)鍵幀重處理,包括以下步驟:
將接收的重傳關(guān)鍵幀的rtp數(shù)據(jù)包寫入等待緩沖區(qū);
對等待緩沖區(qū)中的rtp包進行組幀,并判斷等待緩沖區(qū)的重傳關(guān)鍵幀是否完整;
若重傳關(guān)鍵幀完整,則進行視頻幀解碼操作,解碼成功則標識處理結(jié)果為成功,否則標識處理結(jié)果為失敗,并發(fā)送重編關(guān)鍵幀請求給發(fā)送端;
若重傳關(guān)鍵幀不完整,則進一步判斷是否等待超時,若等待未超時,則繼續(xù)等待,否則清空接收數(shù)據(jù)緩沖區(qū)和等待緩沖區(qū),標識處理結(jié)果為失敗,并發(fā)送重編關(guān)鍵幀請求給發(fā)送端。
上述技術(shù)方案通過設(shè)置等待超時閥值,保證在網(wǎng)絡(luò)質(zhì)量下降的情況下,接收端不會無限制的一直等待接收請求重傳的關(guān)鍵幀中的rtp數(shù)據(jù)包而導致視頻畫面的卡頓。
相應(yīng)地,本發(fā)明還提供了一種實時視頻傳輸裝置,包括:
發(fā)送模塊一,用于執(zhí)行步驟1:發(fā)送端將視頻幀數(shù)據(jù)編碼為關(guān)鍵幀或非關(guān)鍵幀,發(fā)送rtp數(shù)據(jù)包給接收端;所述關(guān)鍵幀的發(fā)送時機由配置的間隔參數(shù)確定;
接收模塊,用于執(zhí)行步驟2:接收端對rtp數(shù)據(jù)包進行處理,若處理成功,則顯示視頻幀,若處理失敗,則發(fā)送重編關(guān)鍵幀或重傳關(guān)鍵幀中缺失的rtp數(shù)據(jù)請求給發(fā)送端;
發(fā)送模塊二,用于執(zhí)行步驟3:發(fā)送端接收后,重編關(guān)鍵幀并修改關(guān)鍵幀的發(fā)送時機后向接收端發(fā)送,或向接收端重傳關(guān)鍵幀中缺失的rtp數(shù)據(jù);
循環(huán)模塊,用于重復上述步驟1-3直至所有視頻幀數(shù)據(jù)傳輸完成。
進一步地,所述接收模塊,包括:
接收單元,用于接收rtp數(shù)據(jù)包至接收數(shù)據(jù)緩沖區(qū);
判斷單元,用于判斷rtp數(shù)據(jù)包是否為請求重傳關(guān)鍵幀中缺失的數(shù)據(jù);
第一處理單元,用于若非重傳關(guān)鍵幀中缺失的rtp數(shù)據(jù),進行正常數(shù)據(jù)幀處理;
第二處理單元,用于若是重傳關(guān)鍵幀中缺失的rtp數(shù)據(jù),進行關(guān)鍵幀重處理。
進一步地,所述接收模塊,還包括:
等待緩沖單元,用于接收端設(shè)置等待緩沖區(qū),緩存重傳關(guān)鍵幀已接收的rtp數(shù)據(jù)包。
進一步地,所述第一處理單元,包括:
第一判斷構(gòu)件,用于對接收數(shù)據(jù)緩沖區(qū)中的rtp包進行組幀,并判斷視頻幀是否完整;
第一解碼構(gòu)件,用于若視頻幀完整,則進行視頻幀解碼操作,解碼成功則標識處理結(jié)果為成功,否則標識處理結(jié)果為失敗,并發(fā)送重編關(guān)鍵幀請求給發(fā)送端;
第一處理構(gòu)件,用于若視頻幀不完整,則進一步判斷視頻幀是否為關(guān)鍵幀,若該視頻幀為關(guān)鍵幀,將已接收的rtp數(shù)據(jù)包寫入等待緩沖區(qū),標記處理結(jié)果為失敗,并發(fā)送重傳關(guān)鍵幀中缺失的rtp數(shù)據(jù)請求給發(fā)送端,通知發(fā)送端重傳關(guān)鍵幀中丟失的rtp數(shù)據(jù);若該視頻幀為非關(guān)鍵幀,則丟棄該視頻幀,再判斷兩連續(xù)的關(guān)鍵幀之間已經(jīng)拋棄的非關(guān)鍵幀數(shù)量是否達到閾值,若已經(jīng)達到閾值,標記處理結(jié)果為失敗,并發(fā)送重編關(guān)鍵幀請求給發(fā)送端,否則標記處理結(jié)果為成功。
進一步地,所述第二處理單元,包括:
第二接收構(gòu)件,用于將接收的重傳關(guān)鍵幀的rtp數(shù)據(jù)包寫入等待緩沖區(qū);
第二判斷構(gòu)件,用于對等待緩沖區(qū)中的rtp包進行組幀,并判斷等待緩沖區(qū)的重傳關(guān)鍵幀是否完整;
第二解碼構(gòu)件,用于若重傳關(guān)鍵幀完整,則進行視頻幀解碼操作,解碼成功則標識處理結(jié)果為成功,否則標識處理結(jié)果為失敗,并發(fā)送重編關(guān)鍵幀請求給發(fā)送端;
第二處理構(gòu)件,用于若重傳關(guān)鍵幀不完整,則進一步判斷是否等待超時,若等待未超時,則繼續(xù)等待,否則清空接收數(shù)據(jù)緩沖區(qū)和等待緩沖區(qū),標識處理結(jié)果為失敗,并發(fā)送重編關(guān)鍵幀請求給發(fā)送端。
相應(yīng)地,本發(fā)明還提供了一種用于實時視頻傳輸?shù)脑O(shè)備,所述用于實時視頻傳輸?shù)脑O(shè)備為發(fā)送設(shè)備或接收設(shè)備,
所述發(fā)送設(shè)備用于將視頻幀數(shù)據(jù)編碼為關(guān)鍵幀或非關(guān)鍵幀,發(fā)送rtp數(shù)據(jù)包給接收設(shè)備;所述關(guān)鍵幀的發(fā)送時機由配置的間隔參數(shù)確定;所述發(fā)送設(shè)備還用于重編關(guān)鍵幀并修改關(guān)鍵幀的發(fā)送時機后向接收設(shè)備發(fā)送,或向接收設(shè)備發(fā)送請求的重傳關(guān)鍵幀中缺失的rtp數(shù)據(jù);
所述接收設(shè)備用于對rtp數(shù)據(jù)包進行處理,若處理成功,則顯示視頻幀,若處理失敗,則發(fā)送重編關(guān)鍵幀或重傳關(guān)鍵幀中缺失的rtp數(shù)據(jù)請求給發(fā)送設(shè)備。
相應(yīng)地,本發(fā)明還提供了一種實時視頻傳輸系統(tǒng),包括發(fā)送端和接收端,所述發(fā)送端用于將視頻幀數(shù)據(jù)編碼為關(guān)鍵幀或非關(guān)鍵幀,發(fā)送rtp數(shù)據(jù)包給接收端;所述關(guān)鍵幀的發(fā)送時機由配置的間隔參數(shù)確定;所述發(fā)送端還用于重編關(guān)鍵幀并修改關(guān)鍵幀的發(fā)送時機后向接收端發(fā)送,或向接收端發(fā)送請求的重傳關(guān)鍵幀中缺失的rtp數(shù)據(jù);
所述接收端用于對rtp數(shù)據(jù)包進行處理,若處理成功,則顯示視頻幀,若處理失敗,則發(fā)送重編關(guān)鍵幀或重傳關(guān)鍵幀中缺失的rtp數(shù)據(jù)請求給發(fā)送端。
進一步地,所述發(fā)送端設(shè)置發(fā)送數(shù)據(jù)緩沖區(qū)用于緩存已發(fā)送的rtp數(shù)據(jù)包,當接收到重傳關(guān)鍵幀中缺失的rtp數(shù)據(jù)請求時,優(yōu)先查找所述發(fā)送數(shù)據(jù)緩沖區(qū)。
進一步地,所述接收端設(shè)置接收數(shù)據(jù)緩沖區(qū)和等待緩沖區(qū),所述接收數(shù)據(jù)緩沖區(qū)用于緩存接收到的rtp數(shù)據(jù)包,所述等待緩沖區(qū)用于緩存重傳關(guān)鍵幀已接收的rtp數(shù)據(jù)包。
綜上所述,本發(fā)明技術(shù)方案的有益效果有:
1.本發(fā)明提出動態(tài)的關(guān)鍵幀間隔,在網(wǎng)絡(luò)質(zhì)量正常的情況下通過設(shè)置較大的關(guān)鍵幀間隔,從而減少關(guān)鍵幀的數(shù)量,降低傳輸?shù)目倲?shù)據(jù)量;在網(wǎng)絡(luò)質(zhì)量下降導致數(shù)據(jù)處理失敗的情況下,由接收端發(fā)送重編關(guān)鍵幀或重傳關(guān)鍵幀中缺失的rtp數(shù)據(jù)包請求。對于重編關(guān)鍵幀請求,發(fā)送端根據(jù)請求動態(tài)地進行關(guān)鍵幀編碼并修改關(guān)鍵幀發(fā)送時機,減少接收端視頻恢復的等待時間,保證視頻畫面的及時恢復;
2.發(fā)送端設(shè)置發(fā)送數(shù)據(jù)緩沖區(qū),提高重傳關(guān)鍵幀中缺失的rtp數(shù)據(jù)時候查找數(shù)據(jù)的處理效率,縮短了處理時間。接收端設(shè)置等待緩沖區(qū)和接收數(shù)據(jù)緩沖區(qū),可同時并發(fā)處理rtp數(shù)據(jù)包,將重傳關(guān)鍵幀中缺失的rtp數(shù)據(jù)導致的等待時間降至最少;
3.在視頻幀不完整的情況下,會根據(jù)視頻幀的類型進行不同的處理:如果是關(guān)鍵幀則請求重傳關(guān)鍵幀中缺失的rtp數(shù)據(jù),這樣能夠保證視頻畫面的完整性;如果是非關(guān)鍵幀且累計丟棄幀數(shù)在設(shè)置閥值范圍內(nèi),則直接丟棄幀,等待下一個視頻幀,這樣可減少重編關(guān)鍵幀的網(wǎng)絡(luò)開銷,保證視頻的流暢度,而對視頻畫面的影響只有輕微馬賽克或較小的延時;如果連續(xù)兩關(guān)鍵幀之間累計非關(guān)鍵幀丟棄幀數(shù)達到閥值,此時發(fā)送重編關(guān)鍵幀請求,保證視頻畫面 的清晰度;
4.接收端通過添加抖動延時緩解由于網(wǎng)絡(luò)傳輸過程中造成的rtp數(shù)據(jù)包亂序的問題,同時通過設(shè)置等待超時閥值,保證在網(wǎng)絡(luò)質(zhì)量下降的情況下,接收端不會無限制的一直等待接收重傳的關(guān)鍵幀rtp數(shù)據(jù)包而導致視頻畫面的卡頓。
附圖說明
圖1是本發(fā)明實施例的一種實時視頻傳輸方法步驟流程圖。
圖2是本發(fā)明實施例的一種接收端對rtp數(shù)據(jù)包進行處理步驟流程圖。
圖3是本發(fā)明實施例的一種正常數(shù)據(jù)幀處理步驟流程圖。
圖4是本發(fā)明實施例的一種關(guān)鍵幀重處理步驟流程圖。
圖5是本發(fā)明實施例的一種實時視頻傳輸裝置結(jié)構(gòu)框架圖。
圖6是本發(fā)明實施例的一種接收模塊結(jié)構(gòu)框架圖。
圖7是本發(fā)明實施例的一種第一處理單元結(jié)構(gòu)框架圖。
圖8是本發(fā)明實施例的一種第二處理單元結(jié)構(gòu)框架圖。
圖9是本發(fā)明實施例的一種用于實時視頻傳輸?shù)陌l(fā)送設(shè)備結(jié)構(gòu)圖。
圖10是本發(fā)明實施例的另一種用于實時視頻傳輸?shù)慕邮赵O(shè)備結(jié)構(gòu)圖。
圖11是本發(fā)明實施例的一種實時視頻傳輸系統(tǒng)結(jié)構(gòu)框架圖。
具體實施方式
下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例。基于本發(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
如圖1,是本發(fā)明實施例的一種實時視頻傳輸方法步驟流程圖,包括以下步驟:
步驟1:發(fā)送端將視頻幀數(shù)據(jù)編碼為關(guān)鍵幀或非關(guān)鍵幀,發(fā)送rtp數(shù)據(jù)包給接收端;所述關(guān)鍵幀的發(fā)送時機由配置的間隔參數(shù)確定;
眾所周知,視頻就是利用人類視覺暫留的原理通過播放一系列的圖片,使人眼產(chǎn)生運動的感覺,其中每一幅靜止的圖片,我們稱之為視頻幀。為了方便視頻文件在網(wǎng)絡(luò)傳輸和存儲,需要對視頻進行壓縮編碼,減小文件體積。
目前常見的運動圖像專家組壓縮標準第2版(mpeg-2,movingpictureexpertsgroupcompressionstandardversion2)、h.264/avc(mpeg-4高級視頻編碼,advancedvideo coding)、視頻編解碼器-1(videocodec1,vc-1)、數(shù)字音視頻編解碼標準(avs,audiocodingstandard)等視音頻壓縮編碼算法中,視頻畫面被編碼為由內(nèi)部編碼幀(i幀,又稱關(guān)鍵幀)、多個前向預(yù)測幀(p幀)和雙向內(nèi)插幀(b幀)組成的圖像序列。i幀通常是每個gop(groupofpictures,畫面組)的第一個幀,經(jīng)過適度地壓縮,做為隨機訪問的參考點,可以理解為這一幀畫面的完整保留,解碼時只需要本幀數(shù)據(jù)就可以完成;p幀表示這一幀跟之前的一個i幀(或p幀)的差別,解碼時需要用之前緩存的畫面疊加上本幀定義的差別,生成最終畫面,前面的p幀丟失會影響到后面p幀的解碼顯示,使畫面出現(xiàn)馬賽克;b幀記錄的是本幀與前后幀的差別,換言之,要解碼b幀,不僅要取得之前的緩存畫面,還要解碼之后的畫面,通過前后畫面與本幀數(shù)據(jù)的疊加取得最終的畫面。
三類幀里面,i幀壓縮率最小,p幀壓縮率其次,b幀壓縮率最高,從對視頻畫面質(zhì)量的影響來看,i幀影響最大,p幀其次,b幀影響很小。本發(fā)明的技術(shù)方案中,所述關(guān)鍵幀指的是i幀,所述非關(guān)鍵幀包括p幀和b幀,在不同網(wǎng)絡(luò)質(zhì)量環(huán)境下,本技術(shù)方案采用設(shè)置關(guān)鍵幀間隔參數(shù)來控制關(guān)鍵幀的數(shù)量,從而控制整個傳輸視頻的數(shù)據(jù)量,該間隔參數(shù)可以根據(jù)網(wǎng)絡(luò)質(zhì)量情況設(shè)定不同的值,在網(wǎng)絡(luò)質(zhì)量允許的情況下盡可能設(shè)置較大的間隔參數(shù)。例如,在一網(wǎng)絡(luò)環(huán)境較差的實施例中,該間隔參數(shù)設(shè)置為每隔5秒編碼發(fā)送一幅關(guān)鍵幀數(shù)據(jù);在另一網(wǎng)絡(luò)環(huán)境較好的實施例中,間隔參數(shù)可以設(shè)置為10秒。
步驟2:接收端對rtp數(shù)據(jù)包進行處理,若處理成功,則顯示視頻幀,若處理失敗,則發(fā)送重編關(guān)鍵幀或重傳關(guān)鍵幀中缺失的rtp數(shù)據(jù)請求給發(fā)送端;
在視頻傳輸?shù)倪^程中,接收端主要負責接收rtp數(shù)據(jù)包,對rtp數(shù)據(jù)包進行組幀,再根據(jù)視頻幀的不同類型采用對應(yīng)方式解碼成靜態(tài)圖像幀,最后將圖像進行顯示。在網(wǎng)絡(luò)數(shù)據(jù)傳輸過程中,通常會遇到兩種異常情況:第一種,由于網(wǎng)絡(luò)的不穩(wěn)定導致靜態(tài)圖像幀的數(shù)據(jù)包丟失,接收端無法得到完整的圖像幀數(shù)據(jù),此時接收端可根據(jù)對畫面質(zhì)量影響大小,決定是否向發(fā)送端請求重傳rtp數(shù)據(jù)包;第二種,圖像幀數(shù)據(jù)完整,但是在解碼過程中出現(xiàn)錯誤,此時接收端將請求發(fā)送端重新編碼關(guān)鍵幀。同時,由于視頻是由一系列有序的圖像畫面組成,當進行重傳rtp數(shù)據(jù)包的時候,后續(xù)的視頻幀可進行組幀處理,但必須等待重傳視頻幀接收完整、組幀、解碼、顯示完成后,才能繼續(xù)解碼顯示后續(xù)的視頻幀;當請求重編視頻幀的時候,接收端必須等待重編數(shù)據(jù)幀接收、組幀、解碼、顯示之后,再依次處理后續(xù)圖像幀。
步驟3:發(fā)送端接收后,重編關(guān)鍵幀并修改關(guān)鍵幀的發(fā)送時機后向接收端發(fā)送,或向接收端重傳關(guān)鍵幀中缺失的rtp數(shù)據(jù);
雖然通過設(shè)置較大的關(guān)鍵幀間隔參數(shù)可以大大減少視頻數(shù)據(jù)傳輸量,提高視頻的流暢度,但是在發(fā)送數(shù)據(jù)包解碼失敗的時候,會造成視頻畫面的恢復時間較長,為解決該問題,本發(fā) 明的技術(shù)方案允許接收端在數(shù)據(jù)包解碼失敗的時候發(fā)送重編關(guān)鍵幀請求,發(fā)送端接收到重編關(guān)鍵幀請求后,立即將要求重編的圖像幀編碼為關(guān)鍵幀后做為下一幀發(fā)送給接收端,實現(xiàn)動態(tài)調(diào)整關(guān)鍵幀的發(fā)送時機。當接收端發(fā)現(xiàn)數(shù)據(jù)包丟失時,發(fā)送重傳關(guān)鍵幀中缺失的rtp數(shù)據(jù)請求,發(fā)送端接收到請求后,查找要求重傳的關(guān)鍵幀中缺失的rtp數(shù)據(jù)并發(fā)送給接收端。通過固定間隔編碼關(guān)鍵幀和根據(jù)接收端動態(tài)請求編碼關(guān)鍵幀這兩種方式的相結(jié)合,可以實現(xiàn)保證視頻畫面質(zhì)量的前提下,減少視頻數(shù)據(jù)傳輸量,提高流暢度。
例如,在一具體的實施例中,在關(guān)鍵幀發(fā)送頻率固定的情況下,發(fā)送端設(shè)置的關(guān)鍵幀間隔參數(shù)為10秒,在傳輸數(shù)據(jù)正常的情況下每間隔10秒發(fā)送一次關(guān)鍵幀,優(yōu)選地,視頻剛開始傳輸時可進行特殊處理,發(fā)送端視頻數(shù)據(jù)開始傳送的第0秒、第2秒、第4秒編碼成關(guān)鍵幀,這樣可以解決發(fā)送端和接收端處理時間不一致造成的開頭部分數(shù)據(jù)丟失問題(由于剛開始發(fā)送關(guān)鍵幀的時間間隔短,即使接收端未成功接收前面一兩幀的關(guān)鍵幀,對視頻現(xiàn)實影響不大);同時,如果前4秒有收到重編關(guān)鍵幀的請求,為了避免頻繁的發(fā)送關(guān)鍵幀,發(fā)送端不進行處理。從第4秒后開始,發(fā)送端每間隔10秒發(fā)送一次關(guān)鍵幀,即第14秒,第24秒…依此類推。如果有收到接收端重編關(guān)鍵幀的請求,立即將要求重編的圖像幀編碼為關(guān)鍵幀后做為下一幀發(fā)送給接收端,從發(fā)送該重編的關(guān)鍵幀起,然后再每間隔10秒發(fā)送下一個關(guān)鍵幀。例如,發(fā)送端第24秒編碼關(guān)鍵幀后,在第28秒接收到重編關(guān)鍵幀請求,則立即將請求重編的圖像幀編碼為關(guān)鍵幀,并發(fā)送給接收端;然后在第38秒進行下一次發(fā)送關(guān)鍵幀。
當發(fā)送端接收到重傳關(guān)鍵幀請求時,會將已經(jīng)發(fā)送過的圖像幀數(shù)據(jù)再次發(fā)送給接收端,優(yōu)選地,本發(fā)明技術(shù)方案中的發(fā)送端還可設(shè)置發(fā)送數(shù)據(jù)緩沖區(qū),緩存發(fā)送的rtp數(shù)據(jù)包,當接收到重傳關(guān)鍵幀缺失的rtp數(shù)據(jù)包請求時,優(yōu)先查找所述發(fā)送數(shù)據(jù)緩沖區(qū)。正常情況下,需要重傳的關(guān)鍵幀均為剛發(fā)送不久的數(shù)據(jù),通過設(shè)置發(fā)送數(shù)據(jù)緩沖區(qū),可以減少從原始視頻數(shù)據(jù)文件查找數(shù)據(jù)的概率,提高查找效率。例如,在網(wǎng)絡(luò)延時較小的實施例中,可設(shè)置發(fā)送數(shù)據(jù)緩沖區(qū)大小為保存最近2秒鐘已發(fā)送rtp數(shù)據(jù);在網(wǎng)絡(luò)延時較大的實施例中,可設(shè)置發(fā)送數(shù)據(jù)緩沖區(qū)大小為保存最近5秒鐘已發(fā)送rtp數(shù)據(jù)。
重復上述步驟1-3直至所有視頻幀數(shù)據(jù)傳輸完成。發(fā)送端和接收端協(xié)同工作,直至整個視頻包含的所有圖像幀都按照順序接收、組幀、解碼、顯示完成。
如圖2,是本發(fā)明實施例的一種接收端對rtp數(shù)據(jù)包進行處理步驟流程圖,包括以下步驟:
步驟一、接收端將接收到的rtp數(shù)據(jù)包緩存至接收數(shù)據(jù)緩沖區(qū);
接收端將所有的接收數(shù)據(jù)都存放在接收數(shù)據(jù)緩沖區(qū)內(nèi),再對數(shù)據(jù)進行組幀、解碼、顯示處理,由于視頻圖像幀的連續(xù)性,必須當前視頻幀顯示之后,才能顯示下一幀視頻圖像。
在一優(yōu)選的實施例中,除了接收數(shù)據(jù)緩沖區(qū),接收端還設(shè)置等待緩沖區(qū),在請求重傳關(guān)鍵幀中缺失的rtp數(shù)據(jù)的情況下,用于緩存已接收不完整的幀數(shù)據(jù),這樣處理的有益效果是,接收數(shù)據(jù)緩沖區(qū)可以繼續(xù)接收后續(xù)rtp數(shù)據(jù)包,進行后續(xù)視頻幀的組幀處理,待重傳關(guān)鍵幀接收完整、組幀、解碼、顯示完成后可立即解碼顯示后續(xù)視頻幀,減少重傳關(guān)鍵幀處理后的恢復時間。
步驟二、判斷rtp數(shù)據(jù)包是否為重傳關(guān)鍵幀中缺失的rtp數(shù)據(jù);接收端根據(jù)接收數(shù)據(jù)包的類型選擇后續(xù)的處理路徑,做不同的處理;
步驟三、若非重傳關(guān)鍵幀中缺失的rtp數(shù)據(jù),進行正常數(shù)據(jù)幀處理;
如圖3,是本發(fā)明實施例的一種正常數(shù)據(jù)幀處理步驟流程圖,步驟如下:
對接收數(shù)據(jù)緩沖區(qū)中的rtp包進行組幀,并判斷視頻幀是否完整;
由于在視頻數(shù)據(jù)網(wǎng)絡(luò)傳輸過程中,一幅靜態(tài)視頻幀數(shù)據(jù)通常被分解成多個rtp數(shù)據(jù)包發(fā)送,每個rtp包都有網(wǎng)絡(luò)序列號用于標識出數(shù)據(jù)的先后順序,接收端收到rtp數(shù)據(jù)包后,要根據(jù)rtp包頭信息,將多個rtp數(shù)據(jù)包組成原始的視頻幀數(shù)據(jù)。
在一優(yōu)選的實施例中,接收端對rtp數(shù)據(jù)包進行組幀前,是根據(jù)設(shè)置的抖動延時從接收緩沖區(qū)讀取rtp數(shù)據(jù)包,添加抖動延時可緩解網(wǎng)絡(luò)傳輸過程中rtp數(shù)據(jù)包亂序的問題。
若視頻幀完整,則進行視頻幀解碼操作,解碼成功則標識處理結(jié)果為成功,否則標識處理結(jié)果為失??;此處的解碼是根據(jù)數(shù)據(jù)幀的類型做不同的處理:如果是i幀,只需要本幀數(shù)據(jù)就可以還原視頻畫面;如果是p幀,需要用之前緩存的畫面疊加上本幀數(shù)據(jù)定義的差別,生成最終畫面;如果是b幀,不僅要取得之前的緩存畫面,還要解碼之后的畫面,通過前后畫面的與本幀數(shù)據(jù)的疊加取得最終的畫面。若解碼成功,則顯示該視頻幀,若解碼失敗,需要發(fā)送重編關(guān)鍵幀請求。
若視頻幀不完整,則進一步判斷,若該視頻幀為關(guān)鍵幀,將rtp數(shù)據(jù)包寫入等待緩沖區(qū)以便后續(xù)接收重傳數(shù)據(jù)后再次組幀,并標記處理結(jié)果為失敗。由于關(guān)鍵幀對畫面質(zhì)量影響較大,這種情況下,接收端都將發(fā)起重傳關(guān)鍵幀中缺失的rtp數(shù)據(jù)請求;
若該視頻幀不完整且為非關(guān)鍵幀,由于少量的非關(guān)鍵幀缺失對視頻畫面質(zhì)量影響較小,所以本技術(shù)方案采用了直接丟棄該視頻幀的方式,這樣就不需要進行數(shù)據(jù)的重傳,減少網(wǎng)絡(luò)帶寬的占用。但是,如果在兩連續(xù)的關(guān)鍵幀之間直接拋棄的非關(guān)鍵幀達到一定的數(shù)量,也會引起視頻畫面卡頓或馬賽克等情況,所以本技術(shù)方案可設(shè)置在兩連續(xù)的關(guān)鍵幀之間丟棄非關(guān)鍵幀的上限閾值,若已經(jīng)達到該上限閾值,標記處理結(jié)果為失敗,請求重編關(guān)鍵幀,否則標記處理結(jié)果為成功,不請求重編關(guān)鍵幀。例如,在一具體實施例中,兩連續(xù)的關(guān)鍵幀之間允許拋棄非關(guān)鍵幀的上限閾值設(shè)置為10,接收端每次處理關(guān)鍵幀的時候,都將拋棄非關(guān)鍵幀的 累計值置零,當接收端拋棄一張非關(guān)鍵幀時,將累計值加1,若累計值不大于10,則繼續(xù)處理后續(xù)視頻幀,若累計值大于10,請求發(fā)送端重編關(guān)鍵幀,同時將累計值重新置零。
步驟四、若是重傳關(guān)鍵幀中缺失的rtp數(shù)據(jù),進行關(guān)鍵幀重處理。
如圖4,是本發(fā)明實施例的一種關(guān)鍵幀重處理步驟流程圖,步驟如下:
將接收的重傳關(guān)鍵幀rtp數(shù)據(jù)包寫入等待緩沖區(qū);由于等待緩沖區(qū)里面已經(jīng)緩存了之前收到的部分數(shù)據(jù),后續(xù)只要將重傳的rtp數(shù)據(jù)包寫入等待緩沖區(qū)。
對等待緩沖區(qū)中的rtp包進行組幀,并判斷等待緩沖區(qū)的重傳關(guān)鍵幀數(shù)據(jù)是否完整;此處的組幀操作,與正常數(shù)據(jù)幀處理中的組幀操作方式一致。
若重傳關(guān)鍵幀完整,則進行視頻幀解碼操作,解碼成功則標識處理結(jié)果為成功,否則標識處理結(jié)果為失?。淮颂幗獯a處理方式和正常幀處理方式一致,解碼成功視頻幀的進行畫面顯示,若解碼失敗,需要發(fā)送重編關(guān)鍵幀請求。
若重傳關(guān)鍵幀不完整,此時需要根據(jù)設(shè)置的超時閾值判斷,若等待時間未超過閾值,則繼續(xù)等待,若等待時間已經(jīng)超過閾值,這時候同時清空接收數(shù)據(jù)緩沖區(qū)和等待緩沖區(qū),標識處理結(jié)果為失敗,發(fā)送重編關(guān)鍵幀請求。
如圖5,是本發(fā)明實施例的一種實時視頻傳輸裝置結(jié)構(gòu)框架圖,包括:
發(fā)送模塊一,用于執(zhí)行步驟1:發(fā)送端將視頻幀數(shù)據(jù)編碼為關(guān)鍵幀或非關(guān)鍵幀,發(fā)送rtp數(shù)據(jù)包給接收端;所述關(guān)鍵幀的發(fā)送時機由配置的間隔參數(shù)確定;
接收模塊,用于執(zhí)行步驟2:接收端對rtp數(shù)據(jù)包進行處理,若處理成功,則顯示視頻幀,若處理失敗,則發(fā)送重編關(guān)鍵幀或重傳關(guān)鍵幀中缺失的rtp數(shù)據(jù)請求給發(fā)送端;
發(fā)送模塊二,用于執(zhí)行步驟3:發(fā)送端接收后,重編關(guān)鍵幀并修改關(guān)鍵幀的發(fā)送時機后向接收端發(fā)送,或向接收端重傳關(guān)鍵幀中缺失的rtp數(shù)據(jù);
循環(huán)模塊,用于重復上述步驟1-3直至所有視頻幀數(shù)據(jù)傳輸完成。
如圖6,是本發(fā)明實施例的一種接收模塊結(jié)構(gòu)框架圖,包括:
接收單元,用于接收rtp數(shù)據(jù)包至接收數(shù)據(jù)緩沖區(qū);
等待緩沖單元,用于接收端設(shè)置等待緩沖區(qū),緩存重傳關(guān)鍵幀已接收的rtp數(shù)據(jù)包;
判斷單元,用于判斷rtp數(shù)據(jù)包是否為請求重傳關(guān)鍵幀中缺失的數(shù)據(jù);
第一處理單元,用于若非重傳關(guān)鍵幀中缺失的rtp數(shù)據(jù),進行正常數(shù)據(jù)幀處理;
第二處理單元,用于若是重傳關(guān)鍵幀中缺失的rtp數(shù)據(jù),進行關(guān)鍵幀重處理。
如圖7,是本發(fā)明實施例的一種第一處理單元結(jié)構(gòu)框架圖,包括:
第一判斷構(gòu)件,用于對接收數(shù)據(jù)緩沖區(qū)中的rtp包進行組幀,并判斷視頻幀是否完整;
第一解碼構(gòu)件,用于若視頻幀完整,則進行視頻幀解碼操作,解碼成功則標識處理結(jié)果 為成功,否則標識處理結(jié)果為失敗,并發(fā)送重編關(guān)鍵幀請求給發(fā)送端;
第一處理構(gòu)件,用于若視頻幀不完整,則進一步判斷視頻幀是否為關(guān)鍵幀,若該視頻幀為關(guān)鍵幀,將已接收的rtp數(shù)據(jù)包寫入等待緩沖區(qū),標記處理結(jié)果為失敗,并發(fā)送重傳關(guān)鍵幀中缺失的rtp數(shù)據(jù)請求給發(fā)送端,通知發(fā)送端重傳關(guān)鍵幀中丟失的rtp數(shù)據(jù);若該視頻幀為非關(guān)鍵幀,則丟棄該視頻幀,再判斷兩連續(xù)的關(guān)鍵幀之間已經(jīng)拋棄的非關(guān)鍵幀數(shù)量是否達到閾值,若已經(jīng)達到閾值,標記處理結(jié)果為失敗,并發(fā)送重編關(guān)鍵幀請求給發(fā)送端,否則標記處理結(jié)果為成功。
如圖8,是本發(fā)明實施例的一種第二處理單元結(jié)構(gòu)框架圖,包括:
第二接收構(gòu)件,用于將接收的重傳關(guān)鍵幀的rtp數(shù)據(jù)包寫入等待緩沖區(qū);
第二判斷構(gòu)件,用于對等待緩沖區(qū)中的rtp包進行組幀,并判斷等待緩沖區(qū)的重傳關(guān)鍵幀是否完整;
第二解碼構(gòu)件,用于若重傳關(guān)鍵幀完整,則進行視頻幀解碼操作,解碼成功則標識處理結(jié)果為成功,否則標識處理結(jié)果為失敗,并發(fā)送重編關(guān)鍵幀請求給發(fā)送端;
第二處理構(gòu)件,用于若重傳關(guān)鍵幀不完整,則進一步判斷是否等待超時,若等待未超時,則繼續(xù)等待,否則清空接收數(shù)據(jù)緩沖區(qū)和等待緩沖區(qū),標識處理結(jié)果為失敗,并發(fā)送重編關(guān)鍵幀請求給發(fā)送端。
同時,本發(fā)明提供了一種用于實時視頻傳輸?shù)脑O(shè)備,該設(shè)備可以為接收設(shè)備或發(fā)送設(shè)備,具體可以是手機、梯口機、門口機、室內(nèi)機等具有視頻傳輸功能的設(shè)備。其中,發(fā)送設(shè)備用于將視頻幀數(shù)據(jù)編碼為關(guān)鍵幀或非關(guān)鍵幀,發(fā)送rtp數(shù)據(jù)包給接收設(shè)備;關(guān)鍵幀的發(fā)送時機由配置的間隔參數(shù)確定;另外,發(fā)送設(shè)備還用于重編關(guān)鍵幀并修改關(guān)鍵幀的發(fā)送時機后向接收設(shè)備發(fā)送,或向接收設(shè)備發(fā)送請求的重傳關(guān)鍵幀中缺失的rtp數(shù)據(jù);
接收設(shè)備用于對rtp數(shù)據(jù)包進行處理,若處理成功,則顯示視頻幀,若處理失敗,則發(fā)送重編關(guān)鍵幀或重傳關(guān)鍵幀中缺失的rtp數(shù)據(jù)請求給發(fā)送設(shè)備。如圖9,是本發(fā)明實施例的一種用于實時視頻傳輸?shù)陌l(fā)送設(shè)備結(jié)構(gòu)圖,通過包含本發(fā)明的實時視頻傳輸裝置中的發(fā)送模塊一、發(fā)送模塊二以及循環(huán)模塊,可實現(xiàn)實時視頻傳輸發(fā)送端的功能。其中,發(fā)送模塊一,用于將視頻幀數(shù)據(jù)編碼為關(guān)鍵幀或非關(guān)鍵幀,發(fā)送rtp數(shù)據(jù)包給接收端;所述關(guān)鍵幀的發(fā)送時機由配置的間隔參數(shù)確定;發(fā)送模塊二,用于重編關(guān)鍵幀并修改關(guān)鍵幀的發(fā)送時機后向接收端發(fā)送,或向接收端重傳關(guān)鍵幀中缺失的rtp數(shù)據(jù);循環(huán)模塊,用于循環(huán)處理發(fā)送模塊一和發(fā)送模塊二的步驟直至所有視頻幀數(shù)據(jù)傳輸完成。
如圖10,是本發(fā)明實施例的另一種用于實時視頻傳輸?shù)慕邮赵O(shè)備結(jié)構(gòu)圖,通過包含本發(fā)明的實時視頻傳輸裝置中的接收模塊,可實現(xiàn)實時視頻傳輸接收端的功能。其中,接收模塊 用于對rtp數(shù)據(jù)包進行處理,若處理成功,則顯示視頻幀,若處理失敗,則發(fā)送重編關(guān)鍵幀或重傳關(guān)鍵幀中缺失的rtp數(shù)據(jù)請求給發(fā)送端。
在實際應(yīng)用中,通過上述的發(fā)送端設(shè)備和接收端設(shè)備的協(xié)同工作,實現(xiàn)實時視頻傳輸?shù)墓δ?。例如,在門禁系統(tǒng)的來訪客人視頻傳輸過程中,發(fā)送端為門口機,接收端為室內(nèi)機。門口機和室內(nèi)機應(yīng)用本發(fā)明的實時視頻傳輸裝置進行實時視頻傳輸時,
門口機的發(fā)送模塊一,用于將采集的來訪客人視頻幀數(shù)據(jù)編碼為關(guān)鍵幀或非關(guān)鍵幀,并拆分成rtp數(shù)據(jù)包給室內(nèi)機;其中,關(guān)鍵幀的發(fā)送時機由配置的間隔參數(shù)確定;
室內(nèi)機的接收模塊,用于接收門口機發(fā)送的rtp數(shù)據(jù)包,對rtp數(shù)據(jù)包進行組幀,再根據(jù)視頻幀的不同類型采用對應(yīng)方式解碼成靜態(tài)圖像幀,最后將圖像顯示在室內(nèi)機的屏幕上。在處理過程中,如果視頻幀的數(shù)據(jù)不完整,此時室內(nèi)機可根據(jù)對畫面質(zhì)量影響大小,決定是否向門口機請求重傳缺失的數(shù)據(jù)包;如果圖像幀數(shù)據(jù)完整,但是在解碼過程中出現(xiàn)錯誤,此時室內(nèi)機將請求門口機重編關(guān)鍵幀。
門口機的發(fā)送模塊二,用于在接收到重編關(guān)鍵幀請求時,重編關(guān)鍵幀并修改關(guān)鍵幀的發(fā)送時機后向室內(nèi)機發(fā)送;或接收到重傳關(guān)鍵幀缺失的rtp數(shù)據(jù)請求時,向室內(nèi)機重傳缺失的rtp數(shù)據(jù)包;
門口機的循環(huán)模塊,用于重復上述步驟直至所有視頻幀數(shù)據(jù)發(fā)送給室內(nèi)機。
又如,監(jiān)控系統(tǒng)中攝像頭視頻采集點和控制中心的視頻數(shù)據(jù)傳輸,視頻點播應(yīng)用中的服務(wù)器和手機客戶端之間的視頻傳輸,均可采用本發(fā)明裝置??傊?,兩個以上設(shè)備之間需要進行實時視頻傳輸時,均可應(yīng)用本發(fā)明的裝置。
如圖11,是本發(fā)明實施例的一種實時視頻傳輸系統(tǒng)結(jié)構(gòu)框架圖,包括發(fā)送端和接收端,發(fā)送端和接收端通過網(wǎng)絡(luò)連接,發(fā)送端用于將視頻幀數(shù)據(jù)編碼為關(guān)鍵幀或非關(guān)鍵幀,其中關(guān)鍵幀為i幀,非關(guān)鍵幀包含p幀和b幀,并將視頻幀數(shù)據(jù)拆分成多個rtp數(shù)據(jù)包發(fā)送給接收端;發(fā)送端根據(jù)配置的間隔參數(shù)確定關(guān)鍵幀;同時,發(fā)送端還用于重編關(guān)鍵幀并修改關(guān)鍵幀的發(fā)送時機后向接收端發(fā)送,或向接收端重傳關(guān)鍵幀中缺失的rtp數(shù)據(jù);
接收端主要負責接收rtp數(shù)據(jù)包,對rtp數(shù)據(jù)包進行組幀,再根據(jù)視頻幀的不同類型采用對應(yīng)方式解碼成靜態(tài)圖像幀,最后將圖像進行顯示。同時,當某一靜態(tài)圖像幀發(fā)送過程中出現(xiàn)數(shù)據(jù)包丟失導致數(shù)據(jù)不完整時,接收端根據(jù)對畫面質(zhì)量影響情況確定是否需要請求重傳關(guān)鍵幀中缺失的rtp數(shù)據(jù);或在解碼過程中出現(xiàn)錯誤的時候,發(fā)送重編關(guān)鍵幀請求。
在一優(yōu)選的實施例中,實時視頻傳輸系統(tǒng)的發(fā)送端可設(shè)置發(fā)送數(shù)據(jù)緩沖區(qū)用于緩存已發(fā)送的rtp數(shù)據(jù)包,當接收到重傳關(guān)鍵幀中缺失的rtp數(shù)據(jù)請求時,優(yōu)先查找所述發(fā)送數(shù)據(jù)緩沖區(qū),提高查找速度,縮短處理時間。
在另一優(yōu)選的實施例中,實時視頻傳輸系統(tǒng)的接收端可設(shè)置接收數(shù)據(jù)緩沖區(qū)和等待緩沖區(qū),接收數(shù)據(jù)緩沖區(qū)用于緩存接收到的rtp數(shù)據(jù)包,等待緩沖區(qū)用于緩存重傳關(guān)鍵幀已經(jīng)接收的rtp數(shù)據(jù)包,通過雙緩沖區(qū)機制,等待緩沖區(qū)保存不完整的幀數(shù)據(jù),接收數(shù)據(jù)緩沖區(qū)可以繼續(xù)接收后續(xù)rtp數(shù)據(jù)包,進行后續(xù)視頻幀的組幀處理,待重傳關(guān)鍵幀接收完整、組幀、解碼、顯示完成后可立即解碼顯示后續(xù)視頻幀,減少重傳關(guān)鍵幀處理后的恢復時間。