一種無(wú)線網(wǎng)絡(luò)多媒體播放補(bǔ)包系統(tǒng)及方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及無(wú)線網(wǎng)絡(luò)音視頻播放技術(shù)領(lǐng)域,具體涉及一種無(wú)線網(wǎng)絡(luò)多媒體播放補(bǔ)包系統(tǒng)及方法。
【背景技術(shù)】
[0002]目前地鐵列車上的網(wǎng)絡(luò)直播視頻的現(xiàn)狀大致如下:
第一,車廂中沒有LCD顯示屏,沒有視頻播放功能,只有簡(jiǎn)單的語(yǔ)音報(bào)站;
第二,車廂中有LCD視頻播放,但是沒有車地?zé)o線網(wǎng)絡(luò),只能播放車廂服務(wù)器中預(yù)先錄制好的錄播視頻;
第三,有車地?zé)o線網(wǎng)絡(luò)直播視頻,但是經(jīng)常會(huì)出現(xiàn)馬賽克。
[0003]網(wǎng)絡(luò)視頻直播效果的首要因素是車地?zé)o線網(wǎng)絡(luò),而其中有一種LTE無(wú)線網(wǎng)絡(luò),LTE無(wú)線網(wǎng)絡(luò)的LTE(Long Term Evolut1n,長(zhǎng)期演進(jìn))技術(shù)是3G的演進(jìn),始于2004年3GPP的多倫多會(huì)議。LTE是3G與4G技術(shù)之間的一個(gè)過渡,3.9G的全球標(biāo)準(zhǔn),改進(jìn)并增強(qiáng)了 3G的空中接入技術(shù)。與3G相比,LTE更具多方面的技術(shù)優(yōu)勢(shì),包括高數(shù)據(jù)速率、分組傳送、延遲降低、廣域覆蓋和向下兼容等。LTE技術(shù)在20MHz頻譜帶寬能夠提供下行100Mbps、上行50Mbps的峰值速率。LTE網(wǎng)絡(luò)的發(fā)射頻率和覆蓋范圍參考數(shù)據(jù),本發(fā)明在地鐵沿線上每隔300米會(huì)安裝一個(gè)LTE無(wú)線網(wǎng)絡(luò)終端,站點(diǎn)切換過程中斷網(wǎng)時(shí)間〈2秒。
[0004]由于地鐵列車一直在高速運(yùn)行并頻繁切換站點(diǎn),網(wǎng)絡(luò)不穩(wěn)定因素必然存在,幾秒斷網(wǎng)間隔會(huì)反復(fù)存在,斷網(wǎng)的間隔內(nèi),產(chǎn)生數(shù)據(jù)丟失,體現(xiàn)在LCD屏上就是出現(xiàn)播放馬賽克,聲音斷斷續(xù)續(xù)或雜音,本發(fā)明提出一種直播軟件的處理機(jī)制,在斷網(wǎng)期間丟失的數(shù)據(jù)進(jìn)行重新補(bǔ)充,再利用緩存機(jī)制消除播放馬賽克和雜音的問題。
【發(fā)明內(nèi)容】
[0005]本發(fā)明的目的在于克服現(xiàn)有技術(shù)存在的問題,提供一種無(wú)線網(wǎng)絡(luò)多媒體播放補(bǔ)包系統(tǒng)及方法,實(shí)現(xiàn)在網(wǎng)絡(luò)狀況不佳而產(chǎn)生丟包后能夠及時(shí)補(bǔ)包,避免了因網(wǎng)絡(luò)丟包產(chǎn)生視頻馬賽克等問題。
[0006]為實(shí)現(xiàn)上述技術(shù)目的,達(dá)到上述技術(shù)效果,本發(fā)明通過以下技術(shù)方案實(shí)現(xiàn):
一種無(wú)線網(wǎng)絡(luò)多媒體播放補(bǔ)包系統(tǒng),該系統(tǒng)包括地面數(shù)據(jù)服務(wù)器、Udp組播接收模塊、
tcp補(bǔ)包模塊、緩存模塊、本地?cái)?shù)據(jù)模塊和直播終端,所述地面數(shù)據(jù)服務(wù)器通過Udp協(xié)議向udp組播接收模塊無(wú)線傳輸多媒體數(shù)據(jù)包構(gòu)成無(wú)線傳輸udp組播數(shù)據(jù)包主通道,所述udp組播接收模塊分別連接緩存模塊和tcp補(bǔ)包模塊,udp組播接收模塊將多媒體數(shù)據(jù)包存入緩存模塊中并檢測(cè)是否有丟包,有丟包時(shí)向tcp補(bǔ)包模塊發(fā)送丟包信息并建立tcp補(bǔ)包通路,所述tcp補(bǔ)包通路為:udp組播接收模塊_>tcp補(bǔ)包模塊_>地面數(shù)據(jù)服務(wù)器_>udp組播接收模塊,其中tcp補(bǔ)包模塊通過tcp協(xié)議無(wú)線連接地面數(shù)據(jù)服務(wù)器構(gòu)成請(qǐng)求補(bǔ)包子通路,地面數(shù)據(jù)服務(wù)器通過tcp協(xié)議無(wú)線連接udp組播接收模塊構(gòu)成補(bǔ)包子通路,udp組播接收模塊將補(bǔ)包子通路傳輸過來(lái)的多媒體數(shù)據(jù)包存入緩存模塊中對(duì)應(yīng)的預(yù)留位置中,所述緩存模塊連接直播終端,并且所述直播終端同時(shí)連接本地?cái)?shù)據(jù)模塊,用于在緩存模塊和本地?cái)?shù)據(jù)模塊之間來(lái)回切換。
[0007]一種無(wú)線網(wǎng)絡(luò)多媒體播放補(bǔ)包方法,該方法包括以下步驟:
步驟1.1)建立Udp和tcp網(wǎng)絡(luò)連接,設(shè)定最大緩存時(shí)間T,啟動(dòng)本地錄播;
步驟1.2) udp組播接收模塊通過車底無(wú)線網(wǎng)絡(luò)接收地面數(shù)據(jù)服務(wù)器發(fā)出的多媒體數(shù)據(jù)包并存入緩存模塊recv_buffer中;
步驟1.3)所述udp組播接收模塊根據(jù)數(shù)據(jù)包號(hào)的連續(xù)性進(jìn)行是否丟包判斷,若是,則進(jìn)入下一步驟,若否,則跳轉(zhuǎn)至步驟1.5);
步驟1.4)啟動(dòng)tcp補(bǔ)包通路進(jìn)行補(bǔ)包,補(bǔ)充的數(shù)據(jù)包存入緩存模塊recv_buffer中;步驟1.5)判斷存入緩存模塊recv_buffer中數(shù)據(jù)包的時(shí)間是否大于設(shè)定的最大緩存時(shí)間T,若是,則進(jìn)入下一步驟,若否,則跳轉(zhuǎn)至步驟1.7);
步驟1.6)停止本地錄播,開始網(wǎng)絡(luò)直播,并跳轉(zhuǎn)至步驟1.2)緩存模塊recv_buffer繼續(xù)接收地面數(shù)據(jù)服務(wù)器發(fā)出的多媒體數(shù)據(jù)包;
步驟1.7)停止網(wǎng)絡(luò)直播,播放本地錄播,并跳轉(zhuǎn)至步驟1.2)緩存模塊recv_buffer繼續(xù)嘗試接收地面數(shù)據(jù)服務(wù)器發(fā)出的多媒體數(shù)據(jù)包。
[0008]進(jìn)一步的,所述步驟1.1)中建立udp和tcp網(wǎng)絡(luò)連接的同時(shí)創(chuàng)建并行的udp接收線程、tcp連接線程、請(qǐng)求補(bǔ)包線程、tcp接收補(bǔ)包線程、網(wǎng)絡(luò)直播線程和本地錄播線程。
[0009]進(jìn)一步的,所述步驟1.2)中當(dāng)udp組播接收模塊接收到一個(gè)正確的數(shù)據(jù)包后,首先取出包頭里面的包序號(hào)order,若此次收到的order=0或第一次啟動(dòng)udp組播接收標(biāo)志first_recv_flag=l,則記錄下udp組播接收模塊收到的第一個(gè)數(shù)據(jù)包序號(hào)udp_recv_first_order=order,上次接收的包號(hào)last_order=order,再將此包存儲(chǔ)于緩存模塊的recv_buffer[O]的位置處。
[0010]進(jìn)一步的,所述步驟1.3)中udp組播接收模塊檢測(cè)判斷否丟包的方法為:
若本次接收的數(shù)據(jù)包號(hào)this_order -上次接收到的數(shù)據(jù)包號(hào)last_order>l,
則表明存在丟包,丟失的包數(shù)量Num為:
Num=this_order - last_order -1。
[0011]進(jìn)一步的,所述多媒體數(shù)據(jù)包在緩存模塊中的實(shí)際存儲(chǔ)位置的計(jì)算方法為:
接收的數(shù)據(jù)包號(hào)偏移量recv_order_offset=當(dāng)前接收的包號(hào)packet, order-udp組播接收模塊第一次接收到的包號(hào)udp_recv_first_order,
實(shí)際存儲(chǔ)位置 save_array= (recv_order_offset)%MAX_PCK_NUM,其中,MAX_PCK_NUM為接收緩存能存儲(chǔ)的最大數(shù)據(jù)包數(shù)量,
最終存儲(chǔ)位置即為save_array,則:
接收緩存recv_buffer [save_array] =接收到的數(shù)據(jù)包中的實(shí)際數(shù)據(jù)packet, data,存儲(chǔ)成功后,將全局接收緩存數(shù)據(jù)包個(gè)數(shù)計(jì)數(shù)器值recv_buffer_count累加1,同時(shí)將未接收到多媒體數(shù)據(jù)包的存儲(chǔ)位置空置,直至接收到補(bǔ)充的對(duì)應(yīng)標(biāo)號(hào)的多媒體數(shù)據(jù)包,將其存入對(duì)應(yīng)的空置位。
[0012]進(jìn)一步的,所述udp接收線程包括以下步驟:
步驟2.1)建立udp連接通路;
步驟2.2)循環(huán)接收多媒體數(shù)據(jù)包,如果udp連接通路接收錯(cuò)誤,則重新執(zhí)行步驟2.1),否則,判斷是否有丟包,如有丟包,則將所有丟失包號(hào)存入丟包隊(duì)列中,并啟動(dòng)請(qǐng)求補(bǔ)包線程;如果包號(hào)連續(xù)即無(wú)丟包,則經(jīng)過校驗(yàn)后將多媒體數(shù)據(jù)包存入緩存模塊reCV_buffer中;步驟2.3)如果接收緩存值 > 最大緩存時(shí)間T,則啟動(dòng)網(wǎng)絡(luò)直播線程;否則返回繼續(xù)執(zhí)行步驟2.2),不斷接收,直到接收緩存大于預(yù)設(shè)的最大緩存時(shí)間T。
[0013]進(jìn)一步的,所述tcp連接線程包括以下步驟:
步驟3.1)首先判斷tcp連接標(biāo)志是否tcp_connect=l,如果tcp處于斷開狀態(tài),則等待循環(huán)檢測(cè),直到tcp_connect=l時(shí)進(jìn)行下一步;
步驟3.2)從補(bǔ)包隊(duì)列中取出丟失的數(shù)據(jù)包號(hào)order,如果取出為空,則休眠等待sleep一下重新執(zhí)行步驟3.1);否則將丟失的包號(hào)以tcp發(fā)送請(qǐng)求,如果發(fā)送成功,繼續(xù)執(zhí)行步驟
3.1)循環(huán)取下一個(gè);否則置位tcp_connect=0表明當(dāng)前tcp連接異常,重新執(zhí)行步驟3.1)。
[0014]進(jìn)一步的,所述請(qǐng)求補(bǔ)包線程包括以下步驟:
步驟4.1)首先判斷tcp連接標(biāo)志是否tcp_connect=l,如果tcp處于斷開狀態(tài),則等待循環(huán)檢測(cè),直到tcp_connect=l ;
步驟4.2)從補(bǔ)包隊(duì)列中取出丟失的數(shù)據(jù)包號(hào)order,如果取出為空,則休眠等待sleep一下重新執(zhí)行步驟4.1);否則將丟失的包號(hào)以tcp發(fā)送請(qǐng)求,如果發(fā)送成功,繼續(xù)執(zhí)行步驟
4.1)循環(huán)取下一個(gè);否則置位tcp_connect=0表明當(dāng)前tcp連接異常,重新執(zhí)行步驟4.1)。
[0015]進(jìn)一步的,所述tcp接收補(bǔ)包線程包括以下步驟:
步驟5.1)先判斷tcp連接狀況,若tcp_connect=l,則表明連接正常,開始循環(huán)接收地面數(shù)據(jù)服務(wù)器發(fā)送來(lái)的tcp補(bǔ)包;
步驟5.2)如果tcp接收錯(cuò)誤,則置位tcp_connect=0表明tcp此時(shí)處于異常情況,需要重連,重新執(zhí)行步驟5.1);否則經(jīng)過協(xié)議校驗(yàn),也將數(shù)據(jù)包存入與udp組播數(shù)據(jù)包主通道同樣的接收緩存中;
步驟5.3)判斷是否接收緩存值 > 最大緩存時(shí)間T,若是,則啟動(dòng)網(wǎng)絡(luò)直播;否則重新執(zhí)行步驟5.1)。
[0016]本發(fā)明的有益效果是:
1.本發(fā)明不需要特制的高帶寬網(wǎng)絡(luò)設(shè)備支持,在通用無(wú)線網(wǎng)絡(luò)條件下,依然可以緩沖實(shí)現(xiàn)網(wǎng)絡(luò)多媒體直播;
2.在網(wǎng)絡(luò)狀況不佳的情況下,只要斷網(wǎng)時(shí)間小于設(shè)定的緩存時(shí)間,即能持續(xù)進(jìn)行補(bǔ)包動(dòng)作,依然能夠