服務(wù)器、客戶端及基于rtsp/rtp的播放系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開了一種服務(wù)器、客戶端及基于RTSP/RTP的播放系統(tǒng)。其中,服務(wù)器包括用于接收客戶端發(fā)送的倒序播放請求的接收模塊,其中,倒序播放請求包括起始位置信息和結(jié)束位置信息,起始位置信息對應(yīng)倒序開始視頻幀,結(jié)束位置信息對應(yīng)倒序結(jié)束視頻幀,倒序開始視頻幀與倒序結(jié)束視頻幀之間包括多個關(guān)鍵幀。用于判斷倒序開始視頻幀是否為關(guān)鍵幀的判斷模塊、若倒序開始視頻幀非關(guān)鍵幀時,用于定位與倒序開始視頻幀距離最近且位于倒序開始視頻幀與倒序結(jié)束視頻幀之間的第1關(guān)鍵幀的定位模塊以及用于從第1關(guān)鍵幀開始逐幀發(fā)送第1關(guān)鍵幀與倒序開始視頻幀之間的所有視頻幀至客戶端的發(fā)送模塊。
【專利說明】
服務(wù)器、客戶端及基于RTSP/RTP的播放系統(tǒng)
技術(shù)領(lǐng)域
[0001]本發(fā)明涉及視頻監(jiān)控技術(shù)領(lǐng)域,尤其涉及一種服務(wù)器、客戶端及基于RTSP/RTP的播放系統(tǒng)。
【背景技術(shù)】
[0002]視頻回放已經(jīng)成為近年來視頻監(jiān)控的主要手段,而現(xiàn)有的視頻回放的技術(shù)手段主要有如下兩種:
[0003]第一種為采用私有協(xié)議傳輸視頻流。譬如:專利申請?zhí)枮?CN201310544305.4,專利名稱為:一種基于硬盤錄像機(jī)的視頻倒序回查方法。該專利申請公開了“在視頻順序播放時,如果想從某個時間點開始倒放,先停止順序播放,獲取現(xiàn)在的視頻播放結(jié)束時間,將該時間點確定為視頻倒放開始時間;啟動下載線程,從倒放開始時間算起,每5秒鐘下載一段視頻,直到將設(shè)定的倒放時間段內(nèi)的視頻倒放完畢,獲得該倒放停止點的時間點;然后從倒放停止的時間點開始進(jìn)入視頻的順序播放。”該技術(shù)方案中,客戶端每隔5S鐘下載一段視頻,并對該視頻進(jìn)行解碼后輸出。該技術(shù)方案客戶端頻繁的下載請求會增大被下載端的工作量,降低被下載端的響應(yīng)速度,此外,該技術(shù)方案中每隔5秒下載一段視頻的模式不具有通用性,應(yīng)用范圍受到限制。
[0004]第二種為服務(wù)器端解碼視頻,倒序發(fā)送解碼后的視頻畫面至客戶端。譬如:專利申請?zhí)枮?CN201410048139.3,專利名稱為:一種HTTP流媒體實現(xiàn)快進(jìn)快退播放的方法和系統(tǒng)。該專利申請公開了“當(dāng)用戶請求快進(jìn)快退播放時,在該請求中攜帶快進(jìn)快退的速度和開始的時間點,則根據(jù)快進(jìn)快退的速度和開始的時間點向客戶端順序返回視頻文件的截圖。本發(fā)明通過服務(wù)器端向客戶端投放一組截圖代替視頻,客戶端按順序快速顯示截圖代替視頻播放,從而實現(xiàn)快進(jìn)快退?!痹摷夹g(shù)方案中,服務(wù)器端解碼視頻幀,增大了服務(wù)器端的工作量,降低了服務(wù)器端的處理速率。此外,發(fā)送解碼后的圖片信息至客戶端,增加了網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)量,以致降低了網(wǎng)絡(luò)傳輸速度以及提升了網(wǎng)絡(luò)占用量。
[0005]綜上所述,如何在不影響服務(wù)器端的處理效率和網(wǎng)絡(luò)傳輸速率的前提下,拓寬應(yīng)用范圍,是當(dāng)前亟待解決的上技術(shù)問題。
【發(fā)明內(nèi)容】
[0006]有鑒于此,實有必要提供一種不影響服務(wù)器端的處理效率和網(wǎng)絡(luò)傳輸速率的前提下,拓寬應(yīng)用范圍的基于RTSP/RTP的播放系統(tǒng),其中,該基于RTSP/RTP的播放系統(tǒng)包括服務(wù)器和客戶端。
[0007]—種服務(wù)器,包括:
[0008]接收模塊,用于接收客戶端發(fā)送的倒序播放請求,倒序播放請求包括起始位置信息和結(jié)束位置信息,起始位置信息對應(yīng)倒序開始視頻幀,結(jié)束位置信息對應(yīng)倒序結(jié)束視頻幀,倒序開始視頻幀與倒序結(jié)束視頻幀之間包括多個關(guān)鍵幀。
[0009]判斷模塊,用于判斷倒序開始視頻幀是否為關(guān)鍵幀。
[0010]定位模塊,用于若倒序開始視頻幀非關(guān)鍵幀,定位與倒序開始視頻幀距離最近且位于倒序開始視頻幀與倒序結(jié)束視頻幀之間的第η關(guān)鍵幀,其中,η = I。
[0011 ]發(fā)送模塊,用于從第η關(guān)鍵幀開始逐幀發(fā)送第η關(guān)鍵幀與倒序開始視頻幀之間的所有視頻幀至客戶端。
[0012]優(yōu)選地,服務(wù)器還包括重定位模塊。
[0013]定位模塊,還用于若第η關(guān)鍵幀與倒序開始視頻之間的視頻幀發(fā)送完成后,定位與第η關(guān)鍵幀距離最近且位于倒序結(jié)束視頻幀與第η關(guān)鍵幀之間的第n+1關(guān)鍵幀。
[0014]優(yōu)選地,發(fā)送模塊,還用于逐幀對視頻幀進(jìn)行編碼得到視頻數(shù)據(jù)包且逐個發(fā)送該視頻數(shù)據(jù)包至客戶端。
[0015]發(fā)送模塊,還用于若第n+1關(guān)鍵幀定位成功,從第n+1關(guān)鍵幀開始逐幀發(fā)送第n+1關(guān)鍵幀與第η關(guān)鍵幀之間的所有視頻幀至客戶端,且發(fā)送每一個視頻幀之間休眠預(yù)設(shè)時間段,預(yù)設(shè)時間段與顯示視頻幀的幀率成反比。
[0016]重定位模塊,用于第n+1關(guān)鍵幀與第η關(guān)鍵幀之間的所有視頻幀發(fā)送完成后,η++,定位與第η關(guān)鍵幀距離最近且位于倒序結(jié)束視頻幀與第η關(guān)鍵幀之間的第n+1關(guān)鍵幀,重復(fù)執(zhí)行發(fā)送模塊和重定位模塊,直至發(fā)送倒序結(jié)束視頻幀至客戶端。
[0017]優(yōu)選地,發(fā)送模塊,用于若倒序開始視頻幀是關(guān)鍵幀,發(fā)送倒序開始視頻幀至客戶端。
[0018]—種客戶端,客戶端用于解碼并輸出上述服務(wù)器發(fā)送的視頻幀??蛻舳税?
[0019]存儲空間數(shù)組創(chuàng)建模塊,用于創(chuàng)建包括多個存儲單元的存儲空間數(shù)組a且設(shè)置每一個存儲單元的標(biāo)志位為空閑,存儲單元的個數(shù)為GopSize*2。
[0020]接收模塊,用于從第η關(guān)鍵幀開始逐幀接收第η關(guān)鍵幀與倒序開始視頻幀之間的每一個視頻幀,其中η = I。
[0021]解碼模塊,用于每接收完成一個視頻幀,利用第η關(guān)鍵幀解碼視頻幀以得到視頻畫面且記錄視頻幀的解碼時間。
[0022]存儲模塊,用于每解碼完成一個視頻幀,存儲與視頻幀對應(yīng)的視頻畫面至標(biāo)志位為空閑的存儲單元中且視頻畫面存儲完成后,修改存儲視頻畫面的存儲單元的標(biāo)志位為未顯不O
[0023]標(biāo)志位修訂模塊,用于接收到第n+1關(guān)鍵幀時,修改已存儲至存儲空間數(shù)組a中,且標(biāo)志位為未顯示的所有存儲單元的標(biāo)志位為待顯示。
[0024]輸出模塊,用于標(biāo)志位為未顯示的所有存儲單元的標(biāo)志位由未顯示修改為待顯示時,對標(biāo)志位為待顯示的所有存儲單元中的視頻畫面按照解碼時間的先后進(jìn)行排序,并從解碼時間最晚的視頻畫面開始輸出且每輸出一幀視頻畫面之后休眠預(yù)設(shè)時間段,預(yù)設(shè)時間段與顯示視頻幀的幀率成反比。
[0025]標(biāo)志位修訂模塊,還用于每輸出一幀視頻畫面后,修改存儲視頻畫面的存儲單元的標(biāo)志位為空閑。
[0026]優(yōu)選地,
[0027]接收模塊,用于從第n+1關(guān)鍵幀開始逐幀接收第n+1關(guān)鍵幀與第η關(guān)鍵幀之間的每一個視頻幀。
[0028]解碼模塊,用于每接收完成一個視頻幀,利用第n+1關(guān)鍵幀解碼視頻幀以得到視頻畫面且記錄視頻幀的解碼時間。
[0029]存儲模塊,用于每解碼完成一個視頻幀,存儲與視頻幀對應(yīng)的視頻畫面至標(biāo)志位為空閑的存儲單元中且視頻畫面存儲完成后,修改存儲視頻畫面的存儲單元的標(biāo)志位為未顯不O
[0030]標(biāo)志位修訂模塊,用于接收到第n+2關(guān)鍵幀時,修改已存儲至存儲空間數(shù)組a中,且標(biāo)志位為未顯示的所有存儲單元的標(biāo)志位為待顯示。
[0031]輸出模塊,用于標(biāo)志位為未顯示的所有存儲單元的標(biāo)志位由未顯示修改為待顯示時,對標(biāo)志位為待顯示的所有存儲單元中的視頻畫面按照解碼時間的先后進(jìn)行排序,并從解碼時間最晚的視頻畫面開始輸出且每輸出一幀視頻畫面之后休眠預(yù)設(shè)時間段,預(yù)設(shè)時間段與顯示視頻幀的幀率成反比。
[0032]標(biāo)志位修訂模塊,還用于每輸出一幀視頻畫面,修改存儲視頻畫面的存儲單元的標(biāo)志位為空閑O
[0033]n++,重復(fù)執(zhí)行接收模塊、解碼模塊、存儲模塊、標(biāo)志位修訂模塊和輸出模塊,直至接收模塊收到倒序結(jié)束視頻幀。
[0034]優(yōu)選地,輸出模塊,用于若倒序開始視頻幀是關(guān)鍵幀,輸出關(guān)鍵幀解碼后的視頻畫面。
[0035]一種基于RTSP/RTP的播放系統(tǒng),其包括上述的服務(wù)器和上述的客戶端,服務(wù)器與客戶端之間通過網(wǎng)絡(luò)通信連接
[0036]當(dāng)?shù)剐蜷_始視頻幀非關(guān)鍵幀時,服務(wù)器從第I關(guān)鍵幀開始逐幀發(fā)送該第I關(guān)鍵幀與倒序開始視頻幀之間每一個視頻幀至客戶端。本發(fā)明通過采用RTSP/RTP協(xié)議傳輸視頻幀至客戶端,因此達(dá)到了開發(fā)難度小、協(xié)議通用以及應(yīng)用范圍廣的技術(shù)效果。
【附圖說明】
[0037]圖1為本發(fā)明基于RTSP/RTP的播放系統(tǒng)一種實施例的方框結(jié)構(gòu)示意圖。
[0038]圖2為服務(wù)器處理倒序播放請求一種實施例的流程示意圖。
[0039]圖3為客戶端倒序播放視頻幀一種實施例的流程示意圖。
【具體實施方式】
[0040]為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用來限定本發(fā)明。
[0041 ]圖1展示了本發(fā)明基于RTSP/RTP的播放系統(tǒng)的一種實施例。在本實施例中,該基于RTSP/RTP的播放系統(tǒng)包括服務(wù)器I和客戶端2,該服務(wù)器I與該客戶端2之間通過網(wǎng)絡(luò)通信連接。其中,服務(wù)器I包括接收模塊11、判斷模塊12、定位模塊13、發(fā)送模塊14和重定位模塊15。該客戶端2包括存儲空間數(shù)組創(chuàng)建模塊21、接收模塊22、解碼模塊23、存儲模塊24、標(biāo)志位修訂模塊25和輸出模塊26。
[0042]服務(wù)器I響應(yīng)客戶端2的倒序播放請求時:需要說明的是:第I關(guān)鍵幀與倒序開始視頻幀之間的所有視頻幀構(gòu)成第一個G0P。服務(wù)器I逐幀從第I關(guān)鍵幀開始發(fā)送第一 GOP的視頻幀至客戶端2時,視頻幀之間無需休眠預(yù)設(shè)時間段。所謂G0P,即視頻幀的編碼單位,每一個視頻幀為了便于傳輸和儲存,都會進(jìn)行編碼以得到視頻壓縮數(shù)據(jù)包。此外,假設(shè)一個GOP中包括GopSize個視頻幀,其中,有I個關(guān)鍵幀和GopSize-1個參考幀。此外,關(guān)鍵幀(I幀)和參考幀(P幀):關(guān)鍵幀(I幀)包含有所有的視頻畫面細(xì)節(jié),而參考幀(P幀)則保存基于關(guān)鍵幀的變化信息。關(guān)鍵幀(I幀)可以直接解碼,參考幀(P幀)解碼前必須要有當(dāng)前GOP組中關(guān)鍵幀的信息和本參考幀之前的參考幀。
[0043]接收模塊11,用于接收客戶端2發(fā)送的倒序播放請求,倒序播放請求包括起始位置信息和結(jié)束位置信息,起始位置信息對應(yīng)倒序開始視頻幀,結(jié)束位置信息對應(yīng)倒序結(jié)束視頻幀,倒序開始視頻幀與倒序結(jié)束視頻幀之間包括多個關(guān)鍵幀。判斷模塊12,用于判斷倒序開始視頻幀是否為關(guān)鍵幀。若倒序開始視頻幀非關(guān)鍵幀,定位模塊13,用于定位與倒序開始視頻幀距離最近且位于倒序開始視頻幀與倒序結(jié)束視頻幀之間的第η關(guān)鍵幀,其中,η = I。發(fā)送模塊14,用于從第η關(guān)鍵幀開始逐幀發(fā)送第η關(guān)鍵幀與倒序開始視頻幀之間的所有視頻幀至客戶端2。此外,若倒序開始視頻幀是關(guān)鍵幀,發(fā)送倒序開始視頻幀至客戶端2。
[0044]在某些實施例中,例如本實施例中,發(fā)送模塊14,還用于逐幀對視頻幀進(jìn)行編碼得到視頻數(shù)據(jù)包且逐個發(fā)送該視頻數(shù)據(jù)包至客戶端2。本實施例通過發(fā)送視頻數(shù)據(jù)包至客戶端2,減少了傳輸?shù)臄?shù)據(jù)量,以致節(jié)省了網(wǎng)絡(luò)資源。
[0045]另一方面,第η關(guān)鍵幀與第n+1關(guān)鍵幀之間的所有視頻幀構(gòu)成第N個G0P,其中η=1,N= 2。服務(wù)器I逐幀從第n+1關(guān)鍵幀開始發(fā)送第N個GOP的視頻幀至客戶端2時,視頻幀之間休眠預(yù)設(shè)時間段。此外,第N個GOP發(fā)送完成后,n++,N++。所謂預(yù)設(shè)時間段與顯示視頻幀的幀率成反比。假設(shè)幀率為H,預(yù)設(shè)時間段為T,則T=A/H,其中A為常數(shù)。
[0046]定位模塊13,還用于若第η關(guān)鍵幀與倒序開始視頻之間的視頻幀發(fā)送完成后,定位與第η關(guān)鍵幀距離最近且位于倒序結(jié)束視頻幀與第η關(guān)鍵幀之間的第n+1關(guān)鍵幀。發(fā)送模塊14,還用于若第n+1關(guān)鍵幀定位成功,從第n+1關(guān)鍵幀開始逐幀發(fā)送第n+1關(guān)鍵幀與第η關(guān)鍵幀之間的所有視頻幀至客戶端2,且發(fā)送每一個視頻幀之間休眠預(yù)設(shè)時間段,預(yù)設(shè)時間段與顯示視頻幀的幀率成反比。重定位模塊15,用于第n+1關(guān)鍵幀與第η關(guān)鍵幀之間的所有視頻幀發(fā)送完成后,η++,定位與第η關(guān)鍵幀距離最近且位于倒序結(jié)束視頻幀與第η關(guān)鍵幀之間的第n+1關(guān)鍵幀,重復(fù)執(zhí)行發(fā)送模塊14和重定位模塊15,直至發(fā)送倒序結(jié)束視頻幀至客戶端2。
[0047]本實施例通過在發(fā)送第二個GOP開始,在該GOP的每一個視頻幀之間休眠預(yù)設(shè)時間段,避免服務(wù)器I出現(xiàn)CPU占用率過高的問題。
[0048]本實施例的服務(wù)器I響應(yīng)客戶端2的順序播放請求時:服務(wù)器I逐幀發(fā)送視頻幀至客戶端2。
[0049]客戶端2倒序播放視頻幀時:存儲空間數(shù)組創(chuàng)建模塊21,用于創(chuàng)建包括多個存儲單元的存儲空間數(shù)組a且設(shè)置每一個存儲單元的標(biāo)志位為空閑,存儲單元的個數(shù)為GopSize*
2。接收模塊22,用于從第η關(guān)鍵幀開始逐幀接收第η關(guān)鍵幀與倒序開始視頻幀之間的每一個視頻幀,其中η = I。解碼模塊23,用于每接收完成一個視頻幀,利用第η關(guān)鍵幀解碼視頻幀以得到視頻畫面且記錄視頻幀的解碼時間。存儲模塊24,用于每解碼完成一個視頻幀,存儲與視頻幀對應(yīng)的視頻畫面至標(biāo)志位為空閑的存儲單元中且視頻畫面存儲完成后,修改存儲視頻畫面的存儲單元的標(biāo)志位為未顯示。標(biāo)志位修訂模塊25,用于接收到第n+1關(guān)鍵幀時,修改已存儲至存儲空間數(shù)組a中,且標(biāo)志位為未顯示的所有存儲單元的標(biāo)志位為待顯示。輸出模塊26,用于標(biāo)志位為未顯示的所有存儲單元的標(biāo)志位由未顯示修改為待顯示時,對標(biāo)志位為待顯示的所有存儲單元中的視頻畫面按照解碼時間的先后進(jìn)行排序,并從解碼時間最晚的視頻畫面開始輸出且每輸出一幀視頻畫面之后休眠預(yù)設(shè)時間段,預(yù)設(shè)時間段與顯示視頻幀的幀率成反比。標(biāo)志位修訂模塊25,還用于每輸出一幀視頻畫面后,修改存儲視頻畫面的存儲單元的標(biāo)志位為空閑。
[0050]在某些實施例中,例如本實施例中,若倒序開始視頻幀是關(guān)鍵幀,輸出模塊26用于輸出關(guān)鍵幀解碼后的視頻畫面。
[0051]在某些實施例中,例如本實施例中,創(chuàng)建第一線程和第二線程。其中第一線程,用于實現(xiàn)接收模塊22、解碼模塊23和存儲模塊24的功能、以及標(biāo)志位修訂模塊25的部分功能。第二線程,用于實現(xiàn)輸出模塊26的功能,以及標(biāo)志位修訂模塊25的部分功能。本實施例由于服務(wù)器I是從第I關(guān)鍵幀開始逐幀發(fā)送第I關(guān)鍵幀與倒開始視頻幀之間的視頻幀,因此,本實施例的客戶端2的第一線程從第I關(guān)鍵幀開始接收第I關(guān)鍵幀與倒開始視頻幀之間的視頻幀,且可以利用該第I關(guān)鍵幀對第I關(guān)鍵幀與倒開始視頻幀之間的視頻幀進(jìn)行解碼,并將解碼后的視頻畫面存儲至存儲空間數(shù)組a中。當(dāng)客戶端2的第一線程接收到第2關(guān)鍵幀時,第二線程按照解碼時間輸出存儲空間數(shù)組a中存儲的視頻畫面,本實施例通過采用多線程技術(shù),提升了客戶端的處理效率。
[0052]接收模塊22,用于從第n+1關(guān)鍵幀開始逐幀接收第n+1關(guān)鍵幀與第η關(guān)鍵幀之間的每一個視頻幀。
[0053]解碼模塊23,用于每接收完成一個視頻幀,利用第n+1關(guān)鍵幀解碼視頻幀以得到視頻畫面且記錄視頻幀的解碼時間。
[0054]存儲模塊24,用于每解碼完成一個視頻幀,存儲與視頻幀對應(yīng)的視頻畫面至標(biāo)志位為空閑的存儲單元中且視頻畫面存儲完成后,修改存儲視頻畫面的存儲單元的標(biāo)志位為未顯不O
[0055]標(biāo)志位修訂模塊25,用于接收到第n+2關(guān)鍵幀時,修改已存儲至存儲空間數(shù)組a中,且標(biāo)志位為未顯示的所有存儲單元的標(biāo)志位為待顯示。
[0056]輸出模塊26,用于標(biāo)志位為未顯示的所有存儲單元的標(biāo)志位由未顯示修改為待顯示時,對標(biāo)志位為待顯示的所有存儲單元中的視頻畫面按照解碼時間的先后進(jìn)行排序,并從解碼時間最晚的視頻畫面開始輸出且每輸出一幀視頻畫面之后休眠預(yù)設(shè)時間段,預(yù)設(shè)時間段與顯示視頻幀的幀率成反比。
[0057]標(biāo)志位修訂模塊25,還用于每輸出一幀視頻畫面,修改存儲視頻畫面的存儲單元的標(biāo)志位為空閑。
[0058]η++,重復(fù)執(zhí)行接收模塊22、解碼模塊23、存儲模塊24、標(biāo)志位修訂模塊25和輸出模塊26,直至接收模塊22收到倒序結(jié)束視頻幀。
[0059]圖2展示了本發(fā)明服務(wù)器處理倒序播放請求的一種實施例。在本實施例中,服務(wù)器處理倒序播放請求包括如下步驟:
[0060]步驟SI,接收客戶端發(fā)送的倒序播放請求,倒序播放請求包括起始位置信息和結(jié)束位置信息,起始位置信息對應(yīng)倒序開始視頻幀,結(jié)束位置信息對應(yīng)倒序結(jié)束視頻幀,倒序開始視頻幀與倒序結(jié)束視頻幀之間包括多個關(guān)鍵幀。
[0061 ]步驟S2,判斷倒序開始視頻幀是否為關(guān)鍵幀。若倒序開始視頻幀非關(guān)鍵幀,執(zhí)行步驟S3。若倒序開始視頻幀是關(guān)鍵幀,執(zhí)行步驟S9。
[0062]步驟S3,定位與倒序開始視頻幀距離最近且位于倒序開始視頻幀與倒序結(jié)束視頻幀之間的第η關(guān)鍵幀,其中,η = I。
[0063]步驟S4,用于從第η關(guān)鍵幀開始逐幀發(fā)送第η關(guān)鍵幀與倒序開始視頻幀之間的所有視頻幀至客戶端。
[0064]步驟S5,若第η關(guān)鍵幀與倒序開始視頻之間的視頻幀發(fā)送完成后,定位與第η關(guān)鍵幀距離最近且位于倒序結(jié)束視頻幀與第η關(guān)鍵幀之間的第n+1關(guān)鍵幀。
[0065]步驟S6,若第n+1關(guān)鍵幀定位成功,從第n+1關(guān)鍵幀開始逐幀發(fā)送第n+1關(guān)鍵幀與第η關(guān)鍵幀之間的所有視頻幀至客戶端,且發(fā)送每一個視頻幀之間休眠預(yù)設(shè)時間段,預(yù)設(shè)時間段與顯示視頻幀的幀率成反比。
[0066]步驟S7,第n+1關(guān)鍵幀與第η關(guān)鍵幀之間的所有視頻幀發(fā)送完成后,η++,定位與第η關(guān)鍵幀距離最近且位于倒序結(jié)束視頻幀與第η關(guān)鍵幀之間的第n+1關(guān)鍵幀。
[0067]步驟S8,判斷是否發(fā)送倒序結(jié)束視頻幀至客戶端。若未發(fā)送倒序結(jié)束視頻幀至客戶端,執(zhí)行步驟S6。若發(fā)送倒序結(jié)束視頻幀至客戶端,執(zhí)行結(jié)束。
[0068]步驟S9,發(fā)送倒序開始視頻幀至客戶端。執(zhí)行步驟S3。
[0069]圖3展示了本發(fā)明客戶端倒序播放視頻幀的一種實施例。在本實施例中,客戶端倒序播放視頻幀包括如下步驟:
[0070]步驟S20,判斷接收到的第一個視頻幀是否為倒序開始視頻幀。若第一個視頻幀非倒序開始視頻幀,執(zhí)行步驟S21。若第一個視頻幀是倒序開始視頻幀,執(zhí)行步驟S35。
[0071]步驟S21,創(chuàng)建包括多個存儲單元的存儲空間數(shù)組a且設(shè)置每一個存儲單元的標(biāo)志位為空閑,所述存儲單元的個數(shù)為GopSize*2。
[0072]步驟S22,從第η關(guān)鍵幀開始逐幀接收第η關(guān)鍵幀與倒序開始視頻幀之間的每一個視頻幀,其中η = I。
[0073]步驟S23,每接收完成一個視頻幀,利用第η關(guān)鍵幀解碼視頻幀以得到視頻畫面且記錄視頻幀的解碼時間。
[0074]步驟S24,每解碼完成一個視頻幀,存儲與視頻幀對應(yīng)的視頻畫面至標(biāo)志位為空閑的存儲單元中且視頻畫面存儲完成后,修改存儲視頻畫面的存儲單元的標(biāo)志位為未顯示。
[0075]步驟S25,接收到第n+1關(guān)鍵幀時,修改已存儲至存儲空間數(shù)組a中,且標(biāo)志位為未顯示的所有存儲單元的標(biāo)志位為待顯示。
[0076]步驟S26,標(biāo)志位為未顯示的所有存儲單元的標(biāo)志位由未顯示修改為待顯示時,對標(biāo)志位為待顯示的所有存儲單元中的視頻畫面按照解碼時間的先后進(jìn)行排序,并從解碼時間最晚的視頻畫面開始輸出且每輸出一幀視頻畫面之后休眠預(yù)設(shè)時間段,預(yù)設(shè)時間段與顯示視頻幀的幀率成反比。
[0077]步驟S27,每輸出一幀視頻畫面后,修改存儲視頻畫面的存儲單元的標(biāo)志位為空閑。
[0078]步驟S28,標(biāo)識位為待顯示的視頻畫面輸出完成后,判斷是否輸出與倒序結(jié)束視頻幀對應(yīng)的視頻畫面。若輸出了與倒序結(jié)束視頻幀對應(yīng)的視頻畫面,執(zhí)行結(jié)束。若未輸出與倒序結(jié)束視頻幀對應(yīng)的視頻畫面,執(zhí)行步驟S29。
[0079]步驟S29,從第n+1關(guān)鍵幀開始逐幀接收第n+1關(guān)鍵幀與第η關(guān)鍵幀之間的每一個視頻幀。
[0080]步驟S30,每接收完成一個視頻幀,利用第n+1關(guān)鍵幀解碼視頻幀以得到視頻畫面且記錄視頻幀的解碼時間。
[0081]步驟S31,每解碼完成一個視頻幀,存儲與視頻幀對應(yīng)的視頻畫面至標(biāo)志位為空閑的存儲單元中且視頻畫面存儲完成后,修改存儲視頻畫面的存儲單元的標(biāo)志位為未顯示。
[0082]步驟S32,接收到第n+2關(guān)鍵幀時,修改已存儲至存儲空間數(shù)組a中,且標(biāo)志位為未顯示的所有存儲單元的標(biāo)志位為待顯示。
[0083]步驟S33,標(biāo)志位為未顯示的所有存儲單元的標(biāo)志位由未顯示修改為待顯示時,對標(biāo)志位為待顯示的所有存儲單元中的視頻畫面按照解碼時間的先后進(jìn)行排序,并從解碼時間最晚的視頻畫面開始輸出且每輸出一幀視頻畫面之后休眠預(yù)設(shè)時間段,預(yù)設(shè)時間段與顯示視頻幀的幀率成反比。
[0084]步驟S34,每輸出一個視頻畫面后,修改存儲視頻畫面的存儲單元的標(biāo)志位為空閑,且待顯示的所有視頻畫面輸出完成之后,n++,執(zhí)行步驟S28。
[0085 ]步驟S35,輸出關(guān)鍵幀解碼后的視頻畫面,執(zhí)行步驟S21。
[0086]以上對發(fā)明的【具體實施方式】進(jìn)行了詳細(xì)說明,但其只作為范例,本發(fā)明并不限制與以上描述的【具體實施方式】。對于本領(lǐng)域的技術(shù)人員而言,任何對該發(fā)明進(jìn)行的等同修改或替代也都在本發(fā)明的范疇之中,因此,在不脫離本發(fā)明的精神和原則范圍下所作的均等變換和修改、改進(jìn)等,都應(yīng)涵蓋在本發(fā)明的范圍內(nèi)。
【主權(quán)項】
1.一種服務(wù)器,其特征在于,包括: 接收模塊,用于接收客戶端發(fā)送的倒序播放請求,所述倒序播放請求包括起始位置信息和結(jié)束位置信息,所述起始位置信息對應(yīng)倒序開始視頻幀,所述結(jié)束位置信息對應(yīng)倒序結(jié)束視頻幀,所述倒序開始視頻幀與所述倒序結(jié)束視頻幀之間包括多個關(guān)鍵幀; 判斷模塊,用于判斷所述倒序開始視頻幀是否為關(guān)鍵幀; 定位模塊,用于若所述倒序開始視頻幀非所述關(guān)鍵幀,定位與所述倒序開始視頻幀距離最近且位于所述倒序開始視頻幀與所述倒序結(jié)束視頻幀之間的第η關(guān)鍵幀,其中,η = I; 發(fā)送模塊,用于從所述第η關(guān)鍵幀開始逐幀發(fā)送所述第η關(guān)鍵幀與所述倒序開始視頻幀之間的所有視頻幀至客戶端。2.根據(jù)權(quán)利要求1所述的服務(wù)器,其特征在于,所述服務(wù)器還包括重定位模塊; 定位模塊,還用于若所述第η關(guān)鍵幀與所述倒序開始視頻之間的視頻幀發(fā)送完成后,定位與所述第η關(guān)鍵幀距離最近且位于所述倒序結(jié)束視頻幀與所述第η關(guān)鍵幀之間的第η+1關(guān)鍵幀; 發(fā)送模塊,還用于若所述第η+1關(guān)鍵幀定位成功,從所述第η+1關(guān)鍵幀開始逐幀發(fā)送所述第η+1關(guān)鍵幀與所述第η關(guān)鍵幀之間的所有視頻幀至客戶端,且發(fā)送每一個視頻幀之間休眠預(yù)設(shè)時間段,所述預(yù)設(shè)時間段與顯示視頻幀的幀率成反比; 重定位模塊,用于所述第η+1關(guān)鍵幀與所述第η關(guān)鍵幀之間的所有視頻幀發(fā)送完成后,η++,定位與所述第η關(guān)鍵幀距離最近且位于所述倒序結(jié)束視頻幀與所述第η關(guān)鍵幀之間的第η+1關(guān)鍵幀,重復(fù)執(zhí)行所述發(fā)送模塊和所述重定位模塊,直至發(fā)送所述倒序結(jié)束視頻幀至客戶端。3.根據(jù)權(quán)利要求1所述的服務(wù)器,其特征在于, 發(fā)送模塊,用于若所述倒序開始視頻幀是所述關(guān)鍵幀,發(fā)送所述倒序開始視頻幀至客戶端。4.一種客戶端,所述客戶端用于解碼并輸出權(quán)利要求1?3之一所述服務(wù)器發(fā)送的視頻幀;其特征在于,包括: 存儲空間數(shù)組創(chuàng)建模塊,用于創(chuàng)建包括多個存儲單元的存儲空間數(shù)組a且設(shè)置每一個所述存儲單元的標(biāo)志位為空閑,所述存儲單元的個數(shù)為GopSize*2; 接收模塊,用于從第η關(guān)鍵幀開始逐幀接收所述第η關(guān)鍵幀與倒序開始視頻幀之間的每一個視頻幀,其中η = I; 解碼模塊,用于每接收完成一個視頻幀,利用所述第η關(guān)鍵幀解碼所述視頻幀以得到視頻畫面且記錄所述視頻幀的解碼時間; 存儲模塊,用于每解碼完成一個視頻幀,存儲與所述視頻幀對應(yīng)的視頻畫面至標(biāo)志位為空閑的存儲單元中且所述視頻畫面存儲完成后,修改存儲所述視頻畫面的存儲單元的標(biāo)志位為未顯不; 標(biāo)志位修訂模塊,用于接收到第η+1關(guān)鍵幀時,修改已存儲至所述存儲空間數(shù)組a中,且標(biāo)志位為未顯示的所有存儲單元的標(biāo)志位為待顯示; 輸出模塊,用于標(biāo)志位為未顯示的所有存儲單元的標(biāo)志位由未顯示修改為待顯示時,對標(biāo)志位為待顯示的所有存儲單元中的視頻畫面按照所述解碼時間的先后進(jìn)行排序,并從所述解碼時間最晚的視頻畫面開始輸出且每輸出一幀所述視頻畫面之后休眠預(yù)設(shè)時間段,所述預(yù)設(shè)時間段與顯示所述視頻幀的幀率成反比; 標(biāo)志位修訂模塊,還用于每輸出一幀所述視頻畫面后,修改存儲所述視頻畫面的存儲單元的標(biāo)志位為空閑。5.根據(jù)權(quán)利要求4所述的客戶端,其特征在于, 接收模塊,用于從所述第n+1關(guān)鍵幀開始逐幀接收所述第n+1關(guān)鍵幀與所述第η關(guān)鍵幀之間的每一個視頻幀; 解碼模塊,用于每接收完成一個視頻幀,利用所述第n+1關(guān)鍵幀解碼所述視頻幀以得到視頻畫面且記錄所述視頻幀的解碼時間; 存儲模塊,用于每解碼完成一個視頻幀,存儲與所述視頻幀對應(yīng)的視頻畫面至標(biāo)志位為空閑的存儲單元中且所述視頻畫面存儲完成后,修改存儲所述視頻畫面的存儲單元的標(biāo)志位為未顯不; 標(biāo)志位修訂模塊,用于接收到第n+2關(guān)鍵幀時,修改已存儲至所述存儲空間數(shù)組a中,且標(biāo)志位為未顯示的所有存儲單元的標(biāo)志位為待顯示; 輸出模塊,用于標(biāo)志位為未顯示的所有存儲單元的標(biāo)志位由未顯示修改為待顯示時,對標(biāo)志位為待顯示的所有存儲單元中的視頻畫面按照所述解碼時間的先后進(jìn)行排序,并從所述解碼時間最晚的視頻畫面開始輸出且每輸出一幀所述視頻畫面之后休眠預(yù)設(shè)時間段,所述預(yù)設(shè)時間段與顯示視頻幀的幀率成反比; 標(biāo)志位修訂模塊,還用于每輸出一幀所述視頻畫面,修改存儲所述視頻畫面的存儲單元的標(biāo)志位為空閑; η++,重復(fù)執(zhí)行所述接收模塊、解碼模塊、存儲模塊、標(biāo)志位修訂模塊和輸出模塊,直至所述接收模塊收到所述倒序結(jié)束視頻幀。6.根據(jù)權(quán)利要求4所述的客戶端,其特征在于, 輸出模塊,用于若所述倒序開始視頻幀是所述關(guān)鍵幀,輸出所述關(guān)鍵幀解碼后的視頻畫面。7.—種基于RTSP/RTP的播放系統(tǒng),其特征在于,其包括權(quán)利要求1?3之一所述的服務(wù)器和權(quán)利要求4?6之一所述的客戶端,所述服務(wù)器與所述客戶端之間通過網(wǎng)絡(luò)通信連接。
【文檔編號】H04N21/239GK105828109SQ201510816316
【公開日】2016年8月3日
【申請日】2015年11月20日
【發(fā)明人】蘇福, 劉莉, 歐陽建輝, 鄭灼, 張華俊
【申請人】廣東億迅科技有限公司