本發(fā)明屬于通信領(lǐng)域,尤其涉及一種自適應(yīng)碼流傳輸方法、裝置及設(shè)備。
背景技術(shù):
流媒體(streamingmedia)是指采用流式傳輸?shù)姆绞皆趇nternet播放的媒體格式。流媒體(streamingmedia)的出現(xiàn)極大地方便了人們的工作和生活。聲音、影像或動(dòng)畫等時(shí)基媒體由音視頻服務(wù)器或ipc等設(shè)備向用戶終端連續(xù)、實(shí)時(shí)傳送,用戶不必等到整個(gè)文件全部下載完畢即可進(jìn)行觀看。大大的減少了用戶等待時(shí)間,而且減少了緩存容量。
在流媒體數(shù)據(jù)傳輸時(shí),可能會(huì)由于網(wǎng)絡(luò)擁塞或丟包等異常情況,影響數(shù)據(jù)傳輸?shù)馁|(zhì)量。為了提高數(shù)據(jù)傳輸質(zhì)量,目前采用與tcp協(xié)議類似的重傳策略和擁塞控制策略,包括:客戶端發(fā)送收確認(rèn)包給服務(wù)器;服務(wù)器根據(jù)已發(fā)送的數(shù)據(jù)和接收到的收確認(rèn)包,檢測(cè)是否有丟包,并重發(fā)所丟包的數(shù)據(jù)。
該控制策略保證每一個(gè)發(fā)出去的數(shù)據(jù)包都需要被確認(rèn),否則就應(yīng)該被重傳。服務(wù)器首先會(huì)估計(jì)包的往返時(shí)間,超過(guò)該往返時(shí)間還未被應(yīng)答的包則需要被重傳。若干個(gè)包的確認(rèn)可以通過(guò)一個(gè)包回送給發(fā)送者。服務(wù)器的發(fā)包能力通過(guò)擁塞窗口的大小控制,擁塞窗口指的是服務(wù)器最大能發(fā)送的未經(jīng)確認(rèn)的包的個(gè)數(shù)。當(dāng)一個(gè)包已發(fā)送,該窗口就減小;當(dāng)一個(gè)包被確認(rèn),窗口就增大。
通過(guò)丟包重傳的控制策略,可以有效的提高傳輸圖像質(zhì)量,但是,當(dāng)網(wǎng)絡(luò)環(huán)境變化,比如帶寬變化或出現(xiàn)網(wǎng)絡(luò)抖動(dòng)時(shí),容易出現(xiàn)畫面卡頓、花屏。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本發(fā)明實(shí)施例提供了一種自適應(yīng)碼流傳輸方法、裝置及設(shè)備,以解決現(xiàn)有技術(shù)中的碼流傳輸時(shí),由于網(wǎng)絡(luò)環(huán)境變化,容易出現(xiàn)畫面卡頓和花屏的問(wèn)題。
本發(fā)明實(shí)施例的第一方面提供了一種自適應(yīng)碼流傳輸方法,所述自適應(yīng)碼流傳輸方法包括:
根據(jù)當(dāng)前時(shí)間之前的第一預(yù)定時(shí)間范圍內(nèi)的每個(gè)時(shí)間片內(nèi)發(fā)送端所發(fā)送的,以及接收端所接收的數(shù)據(jù)包數(shù)量或字節(jié)數(shù)量,確定當(dāng)前網(wǎng)絡(luò)狀態(tài);
根據(jù)所述當(dāng)前網(wǎng)絡(luò)狀態(tài),調(diào)用與所述當(dāng)前網(wǎng)絡(luò)狀態(tài)對(duì)應(yīng)的碼流傳輸策略。
結(jié)合第一方面,在第一方面的第一種可能實(shí)現(xiàn)方式中,所述根據(jù)當(dāng)前時(shí)間之前的第一預(yù)定時(shí)間范圍內(nèi)的每個(gè)時(shí)間片內(nèi)發(fā)送端所發(fā)送的,以及接收端所接收的數(shù)據(jù)包數(shù)量或字節(jié)數(shù)量,確定當(dāng)前網(wǎng)絡(luò)狀態(tài)的步驟包括:
獲取當(dāng)前時(shí)間之前的第一預(yù)定時(shí)間范圍內(nèi)的每個(gè)時(shí)間片內(nèi)發(fā)送端所發(fā)送的,以及接收端所接收的數(shù)據(jù)包數(shù)量或字節(jié)數(shù)量;
根據(jù)時(shí)間片與當(dāng)前時(shí)間的時(shí)間間隔,當(dāng)時(shí)間間隔越小時(shí),為所述時(shí)間片分配較高的權(quán)值,通過(guò)加權(quán)平均計(jì)算當(dāng)前的當(dāng)前所需帶寬以及實(shí)際有效帶寬;
將當(dāng)前的當(dāng)前所需帶寬與實(shí)際有效帶寬進(jìn)行比較,根據(jù)比較結(jié)果確定當(dāng)前網(wǎng)絡(luò)狀態(tài)。
結(jié)合第一方面或第一方面的第一種可能實(shí)現(xiàn)方式,在第一方面的第二種可能實(shí)現(xiàn)方式中,所述根據(jù)所述當(dāng)前網(wǎng)絡(luò)狀態(tài),調(diào)用與所述當(dāng)前網(wǎng)絡(luò)狀態(tài)對(duì)應(yīng)的碼流傳輸策略包括:
當(dāng)所述當(dāng)前網(wǎng)絡(luò)狀態(tài)為網(wǎng)絡(luò)抖動(dòng)狀態(tài)時(shí),如果數(shù)據(jù)包對(duì)應(yīng)的確認(rèn)包ack沒(méi)有收到,且晚于該數(shù)據(jù)包所在時(shí)間片發(fā)送的數(shù)據(jù)包的確認(rèn)包ack已收到,或者在第二預(yù)定時(shí)間范圍內(nèi)沒(méi)有接收到對(duì)應(yīng)的確認(rèn)包,則所述數(shù)據(jù)包為待重發(fā)包;
如果當(dāng)前時(shí)間與數(shù)據(jù)包的初始發(fā)送時(shí)間的間隔大于第一預(yù)定時(shí)長(zhǎng),或所述待重發(fā)包已重發(fā)過(guò),則不再重發(fā)。
結(jié)合第一方面的第二種可能實(shí)現(xiàn)方式,在第一方面的第三種可能實(shí)現(xiàn)方式中,所述方法還包括:
當(dāng)所述網(wǎng)絡(luò)抖動(dòng)狀態(tài)的抖動(dòng)值超過(guò)預(yù)定抖動(dòng)閾值時(shí),則在重發(fā)所述待重發(fā)包時(shí),在所述待重發(fā)包上添加糾錯(cuò)碼。
結(jié)合第一方面,在第一方面的第四種可能實(shí)現(xiàn)方式中,所述根據(jù)所述當(dāng)前網(wǎng)絡(luò)狀態(tài),調(diào)用與所述當(dāng)前網(wǎng)絡(luò)狀態(tài)對(duì)應(yīng)的碼流傳輸策略包括:
當(dāng)所述當(dāng)前網(wǎng)絡(luò)狀態(tài)為帶寬不足或丟包率持續(xù)時(shí),計(jì)算當(dāng)前允許的帶寬;
根據(jù)預(yù)設(shè)的帶寬與傳輸質(zhì)量的對(duì)應(yīng)關(guān)系,查找當(dāng)前允許的帶寬所對(duì)應(yīng)的傳輸質(zhì)量,根據(jù)查找的傳輸質(zhì)量進(jìn)行碼流傳輸。
結(jié)合第一方面,在第一方面的第五種可能實(shí)現(xiàn)方式中,所述根據(jù)所述當(dāng)前網(wǎng)絡(luò)狀態(tài),調(diào)用與所述當(dāng)前網(wǎng)絡(luò)狀態(tài)對(duì)應(yīng)的碼流傳輸策略包括:
當(dāng)所述當(dāng)前網(wǎng)絡(luò)狀態(tài)為帶寬充足時(shí),根據(jù)預(yù)設(shè)的帶寬與傳輸質(zhì)量的對(duì)應(yīng)關(guān)系,查找當(dāng)前網(wǎng)絡(luò)狀態(tài)的帶寬所對(duì)應(yīng)的傳輸質(zhì)量進(jìn)行碼流傳輸。
結(jié)合第一方面的第四種可能實(shí)現(xiàn)方式或第一方面的第五種可能實(shí)現(xiàn)方式,在第一方面的第六種可能實(shí)現(xiàn)方式中,所述傳輸質(zhì)量包括:傳輸?shù)陀谡Y|(zhì)量的音頻、傳輸正常質(zhì)量音頻、傳輸正常質(zhì)量的音頻和低于正常質(zhì)量的視頻、傳輸正常質(zhì)量的音頻和正常質(zhì)量的視頻。
本發(fā)明實(shí)施例的第二方面提供了一種自適應(yīng)碼流傳輸裝置,所述自適應(yīng)碼流傳輸裝置包括:
網(wǎng)絡(luò)狀態(tài)確定單元,用于根據(jù)當(dāng)前時(shí)間之前的第一預(yù)定時(shí)間范圍內(nèi)的每個(gè)時(shí)間片內(nèi)發(fā)送端所發(fā)送的,以及接收端所接收的數(shù)據(jù)包數(shù)量或字節(jié)數(shù)量,確定當(dāng)前網(wǎng)絡(luò)狀態(tài);
策略調(diào)用單元,用于根據(jù)所述當(dāng)前網(wǎng)絡(luò)狀態(tài),調(diào)用與所述當(dāng)前網(wǎng)絡(luò)狀態(tài)對(duì)應(yīng)的碼流傳輸策略。
本發(fā)明實(shí)施例的第三方面提供了一種自適應(yīng)碼流傳輸設(shè)備,包括存儲(chǔ)器、處理器以及存儲(chǔ)在所述存儲(chǔ)器中并可在所述處理器上運(yùn)行的計(jì)算機(jī)程序,所述處理器執(zhí)行所述計(jì)算機(jī)程序時(shí)實(shí)現(xiàn)第一方面任一項(xiàng)所述自適應(yīng)碼流傳輸方法的步驟。
本發(fā)明實(shí)施例的第四方面提供了一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),所述計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)存儲(chǔ)有計(jì)算機(jī)程序,所述計(jì)算機(jī)程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)如第一方面任一項(xiàng)所述自適應(yīng)碼流傳輸方法的步驟。
本發(fā)明實(shí)施例與現(xiàn)有技術(shù)相比存在的有益效果是:根據(jù)當(dāng)前時(shí)間之前的第一預(yù)定時(shí)間范圍內(nèi)的每個(gè)時(shí)間片內(nèi)發(fā)送端所發(fā)送的,以及接收端所接收的數(shù)據(jù)包數(shù)量或字節(jié)數(shù)量,確定當(dāng)前網(wǎng)絡(luò)狀態(tài),可以準(zhǔn)確有效的對(duì)當(dāng)前網(wǎng)絡(luò)狀態(tài)進(jìn)行識(shí)別,再根據(jù)所識(shí)別的當(dāng)前網(wǎng)絡(luò)狀態(tài),查找對(duì)應(yīng)的碼流傳輸策略進(jìn)行碼流傳輸,從而使得碼流適應(yīng)不同網(wǎng)絡(luò)狀態(tài)的要求,有利于減少畫面卡頓和花屏。
附圖說(shuō)明
為了更清楚地說(shuō)明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本發(fā)明實(shí)施例提供的自適應(yīng)碼流傳輸方法的實(shí)現(xiàn)流程示意圖;
圖2是本發(fā)明實(shí)施例提供的確定當(dāng)前網(wǎng)絡(luò)狀態(tài)的實(shí)現(xiàn)流程示意圖;
圖3是本發(fā)明實(shí)施例提供的網(wǎng)絡(luò)抖動(dòng)狀態(tài)時(shí)的自適應(yīng)碼流傳輸方法的實(shí)現(xiàn)流程示意圖;
圖4是本發(fā)明實(shí)施例提供的帶寬不足時(shí)的自適應(yīng)碼流傳輸方法的實(shí)現(xiàn)流程示意圖;
圖5是本發(fā)明實(shí)施例提供的自適應(yīng)碼流傳輸裝置的示意圖;
圖6是本發(fā)明實(shí)施例提供的自適應(yīng)碼流傳輸設(shè)備的示意圖。
具體實(shí)施方式
以下描述中,為了說(shuō)明而不是為了限定,提出了諸如特定系統(tǒng)結(jié)構(gòu)、技術(shù)之類的具體細(xì)節(jié),以便透徹理解本發(fā)明實(shí)施例。然而,本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)清楚,在沒(méi)有這些具體細(xì)節(jié)的其它實(shí)施例中也可以實(shí)現(xiàn)本發(fā)明。在其它情況中,省略對(duì)眾所周知的系統(tǒng)、裝置、電路以及方法的詳細(xì)說(shuō)明,以免不必要的細(xì)節(jié)妨礙本發(fā)明的描述。
為了說(shuō)明本發(fā)明所述的技術(shù)方案,下面通過(guò)具體實(shí)施例來(lái)進(jìn)行說(shuō)明。
如圖1所示為本發(fā)明實(shí)施例提供的一種自適應(yīng)碼流傳輸方法的實(shí)現(xiàn)流程,詳述如下:
在步驟s101中,根據(jù)當(dāng)前時(shí)間之前的第一預(yù)定時(shí)間范圍內(nèi)的每個(gè)時(shí)間片內(nèi)發(fā)送端所發(fā)送的,以及接收端所接收的數(shù)據(jù)包數(shù)量或字節(jié)數(shù)量,確定當(dāng)前網(wǎng)絡(luò)狀態(tài)。
具體的,在碼流傳輸過(guò)程中,為了保證碼流數(shù)據(jù)包有效的傳輸?shù)浇邮斩?,在客戶端接收到碼流后,會(huì)返回一個(gè)確認(rèn)包ack。所述確認(rèn)包ack可以包括多個(gè)數(shù)據(jù)包的確認(rèn)信息。其中,確認(rèn)包ack是acknowledge的縮寫。在碼流傳輸時(shí),每個(gè)時(shí)間片內(nèi)都會(huì)返回ack確認(rèn)包。一個(gè)確認(rèn)包可以對(duì)該時(shí)間片內(nèi)客戶端所有接收到的數(shù)據(jù)包的信息。
所述第一預(yù)定時(shí)間范圍,可以設(shè)定為若干個(gè)時(shí)間片的時(shí)間長(zhǎng)度之和。比如可以設(shè)定為n個(gè)時(shí)間片,n大于或等于2。所述時(shí)間片可以根據(jù)網(wǎng)絡(luò)抖動(dòng)發(fā)生的時(shí)間而靈活設(shè)定。通過(guò)獲取第一預(yù)定時(shí)間范圍內(nèi)的每個(gè)時(shí)間片內(nèi)接收和發(fā)送的數(shù)據(jù)包數(shù)量、字節(jié)數(shù)量,確定當(dāng)前的網(wǎng)絡(luò)狀態(tài),如圖2所示,具體可以包括:
在步驟s201中,獲取當(dāng)前時(shí)間之前的第一預(yù)定時(shí)間范圍內(nèi)的每個(gè)時(shí)間片內(nèi)發(fā)送端所發(fā)送的,以及接收端所接收的數(shù)據(jù)包數(shù)量或字節(jié)數(shù)量。
每個(gè)時(shí)間片的長(zhǎng)度相同,獲取在當(dāng)前時(shí)間之前多個(gè)連續(xù)的時(shí)間片,并統(tǒng)計(jì)每個(gè)時(shí)間片內(nèi)由發(fā)送端(一般為服務(wù)器或者網(wǎng)絡(luò)攝像頭ipc)發(fā)送,以及接收端所接收的數(shù)據(jù)包數(shù)量或字節(jié)數(shù)量。其中,所述接收端所接收的數(shù)據(jù)包數(shù)量或字節(jié)數(shù)量,可以根據(jù)接收端反饋給發(fā)送端的確認(rèn)包ack獲取接收端所接收的數(shù)據(jù)包數(shù)量或字節(jié)數(shù)量的信息。
在步驟s202中,根據(jù)時(shí)間片與當(dāng)前時(shí)間的時(shí)間間隔,當(dāng)時(shí)間間隔越小時(shí),為所述時(shí)間片分配較高的權(quán)值,通過(guò)加權(quán)平均計(jì)算當(dāng)前的當(dāng)前所需帶寬以及實(shí)際有效帶寬。
在得到了每個(gè)時(shí)間片所發(fā)送的數(shù)據(jù)包數(shù)量或字節(jié)數(shù)量,以及接收端所接收的數(shù)據(jù)包數(shù)量或字節(jié)數(shù)量后,根據(jù)每個(gè)時(shí)間片發(fā)送的數(shù)據(jù)包數(shù)量、字節(jié)數(shù)量,計(jì)算當(dāng)前所需帶寬,根據(jù)每個(gè)時(shí)間片接收端所接收的數(shù)據(jù)包數(shù)量、字節(jié)數(shù)量,計(jì)算當(dāng)前實(shí)際有效帶寬。
優(yōu)選的一種實(shí)施方式中,可以對(duì)不同的時(shí)間片分配不同的權(quán)值,距離當(dāng)前時(shí)間越近的時(shí)間片,分配的權(quán)值越高。對(duì)多個(gè)時(shí)間片進(jìn)行加權(quán)計(jì)算時(shí),可以得到更為有效的當(dāng)前所需帶寬以及實(shí)際有效帶寬。
其中,所述當(dāng)前所需帶寬的計(jì)算,可以根據(jù)加權(quán)計(jì)算每個(gè)時(shí)間片所發(fā)送的數(shù)據(jù)包數(shù)量或字節(jié)數(shù)量,結(jié)合對(duì)應(yīng)的權(quán)值計(jì)算得到。
所述當(dāng)前實(shí)際有效帶寬,可以根據(jù)加權(quán)計(jì)算每個(gè)時(shí)間片由接收端所接收的數(shù)據(jù)包數(shù)量或字節(jié)數(shù)量,結(jié)合對(duì)應(yīng)的權(quán)值計(jì)算得到。
由于距離當(dāng)前時(shí)間越近的時(shí)間片,所對(duì)應(yīng)的權(quán)值越高,因此,所計(jì)算的加權(quán)平均值越能有效的反應(yīng)當(dāng)前時(shí)間的數(shù)據(jù)狀態(tài),并且可以避免單個(gè)時(shí)間片異常對(duì)帶寬計(jì)算的影響。
在步驟s203中,將當(dāng)前的當(dāng)前所需帶寬與實(shí)際有效帶寬進(jìn)行比較,根據(jù)比較結(jié)果確定當(dāng)前網(wǎng)絡(luò)狀態(tài)。
根據(jù)當(dāng)前的實(shí)際有效帶寬與當(dāng)前所需帶寬的比較結(jié)果,并結(jié)合持續(xù)的時(shí)間,可以確定當(dāng)前網(wǎng)絡(luò)狀態(tài)。如果當(dāng)前的實(shí)際有效帶寬與當(dāng)前所需帶寬的差值小于預(yù)定差值,且檢測(cè)到持續(xù)時(shí)間小于預(yù)定的持續(xù)時(shí)長(zhǎng),則當(dāng)前網(wǎng)絡(luò)狀態(tài)為網(wǎng)絡(luò)抖動(dòng)狀態(tài)。
如果當(dāng)前的實(shí)際有效帶寬小于當(dāng)前所需帶寬,且差值大于預(yù)定差值,且持續(xù)時(shí)間大于預(yù)定的持續(xù)時(shí)長(zhǎng),則當(dāng)前網(wǎng)絡(luò)狀態(tài)為網(wǎng)絡(luò)帶寬不足。
如果在網(wǎng)絡(luò)帶寬不足或網(wǎng)絡(luò)抖動(dòng)狀態(tài)下采用相應(yīng)的策略調(diào)整后,當(dāng)前的實(shí)際有效帶寬仍小于當(dāng)前所需帶寬,則確定當(dāng)前網(wǎng)絡(luò)狀態(tài)為包括環(huán)境噪聲的網(wǎng)絡(luò)狀態(tài)。
在步驟s102中,根據(jù)所述當(dāng)前網(wǎng)絡(luò)狀態(tài),調(diào)用與所述當(dāng)前網(wǎng)絡(luò)狀態(tài)對(duì)應(yīng)的碼流傳輸策略。
根據(jù)當(dāng)前的當(dāng)前所需帶寬與實(shí)際有效帶寬的比較結(jié)果,可以確定當(dāng)前網(wǎng)絡(luò)是否為網(wǎng)絡(luò)抖動(dòng)狀態(tài),或者是否為網(wǎng)絡(luò)帶寬不足。
當(dāng)所述當(dāng)前網(wǎng)絡(luò)狀態(tài)為網(wǎng)絡(luò)抖動(dòng)狀態(tài)時(shí),可以通過(guò)數(shù)據(jù)重發(fā)的策略,減少出現(xiàn)花屏和卡頓的問(wèn)題。
當(dāng)所述當(dāng)前網(wǎng)絡(luò)狀態(tài)為網(wǎng)絡(luò)帶寬不足時(shí),可以根據(jù)當(dāng)前允許的帶寬,調(diào)整傳輸?shù)囊纛l和/或視頻的質(zhì)量,減少出現(xiàn)花屏和卡頓的問(wèn)題。
當(dāng)應(yīng)用上述策略后,當(dāng)前所需帶寬與實(shí)際有效帶寬存在的差值仍然大于預(yù)定差值,則判斷網(wǎng)絡(luò)當(dāng)前狀態(tài)為環(huán)境噪聲的網(wǎng)絡(luò)狀態(tài)??梢酝ㄟ^(guò)啟動(dòng)音頻和i幀前向糾錯(cuò)fec(英文全稱為forwarderrorcorrection);然后在fec啟動(dòng)條件下根據(jù)允許帶寬調(diào)節(jié)編碼器碼率。
根據(jù)當(dāng)前時(shí)間之前的第一預(yù)定時(shí)間范圍內(nèi)的每個(gè)時(shí)間片內(nèi)發(fā)送端所發(fā)送的,以及接收端所接收的數(shù)據(jù)包數(shù)量或字節(jié)數(shù)量,確定當(dāng)前網(wǎng)絡(luò)狀態(tài),可以準(zhǔn)確有效的對(duì)當(dāng)前網(wǎng)絡(luò)狀態(tài)進(jìn)行識(shí)別,再根據(jù)所識(shí)別的當(dāng)前網(wǎng)絡(luò)狀態(tài),查找對(duì)應(yīng)的碼流傳輸策略進(jìn)行碼流傳輸,從而使得碼流適應(yīng)不同網(wǎng)絡(luò)狀態(tài)的要求,有利于減少畫面卡頓和花屏。
圖3為本發(fā)明實(shí)施例提供的在網(wǎng)絡(luò)抖動(dòng)狀態(tài)時(shí)的自適應(yīng)碼流傳輸方法的實(shí)現(xiàn)流程,詳述如下:
在步驟s301中,根據(jù)當(dāng)前時(shí)間之前的第一預(yù)定時(shí)間范圍內(nèi)的每個(gè)時(shí)間片內(nèi)發(fā)送端所發(fā)送的,以及接收端所接收的數(shù)據(jù)包數(shù)量或字節(jié)數(shù)量,確定當(dāng)前網(wǎng)絡(luò)狀態(tài)。
在步驟s302中,當(dāng)所述當(dāng)前網(wǎng)絡(luò)狀態(tài)為網(wǎng)絡(luò)抖動(dòng)狀態(tài)時(shí),如果數(shù)據(jù)包對(duì)應(yīng)的確認(rèn)包ack沒(méi)有收到,且晚于該數(shù)據(jù)包所在時(shí)間片發(fā)送的數(shù)據(jù)包的確認(rèn)包ack已收到,或者在第二預(yù)定時(shí)間范圍內(nèi)沒(méi)有接收到對(duì)應(yīng)的確認(rèn)包,則所述數(shù)據(jù)包為待重發(fā)包。
具體的,根據(jù)圖2所述的當(dāng)前網(wǎng)絡(luò)狀態(tài)判斷方法,判斷當(dāng)前網(wǎng)絡(luò)狀態(tài)為網(wǎng)絡(luò)抖動(dòng)狀態(tài)時(shí),可以根據(jù)確認(rèn)包ack的返回時(shí)間來(lái)確定相應(yīng)的傳輸策略,具體可以為:
如果數(shù)據(jù)包對(duì)應(yīng)的確認(rèn)包ack沒(méi)有收到,且晚于該數(shù)據(jù)包所在時(shí)間片發(fā)送的數(shù)據(jù)包的確認(rèn)包ack已收到,則所述包為待重發(fā)包。
通過(guò)下一個(gè)反饋信息的到來(lái),才能確定上一次的反饋信息中沒(méi)有確認(rèn)消息ack的原因是因?yàn)閬y序而延遲出現(xiàn),還是由于丟失。
又或者,在初始發(fā)送時(shí)間之后的第二預(yù)定時(shí)間范圍內(nèi),沒(méi)有收到所對(duì)應(yīng)的確認(rèn)包ack,則所述包為待重發(fā)包。
在步驟s303中,如果當(dāng)前時(shí)間與數(shù)據(jù)包的初始發(fā)送時(shí)間的間隔大于第一預(yù)定時(shí)長(zhǎng),或所述待重發(fā)包已重發(fā)過(guò),則不再重發(fā)。
在確定了數(shù)據(jù)包為待重發(fā)包后,則將所述待重發(fā)包進(jìn)行重發(fā)操作,以保證數(shù)據(jù)包到達(dá)接收端仍然有效。為了避免重發(fā)包到達(dá)接收端時(shí),數(shù)據(jù)已經(jīng)無(wú)效,比如數(shù)據(jù)已經(jīng)被播放,本步驟中設(shè)置當(dāng)前時(shí)間與數(shù)據(jù)包的初始發(fā)送時(shí)間的間隔大于第一預(yù)定時(shí)長(zhǎng)時(shí),則不再重發(fā),如果當(dāng)前時(shí)間與數(shù)據(jù)包的初始發(fā)送時(shí)間的間隔小于第一預(yù)定時(shí)長(zhǎng),則重發(fā)所述待重發(fā)包。這是因?yàn)?,接收端的緩沖空間有限,重發(fā)包間隔時(shí)間太久時(shí),接收端即始接收到了重發(fā)包,也來(lái)不及組幀、存儲(chǔ)或預(yù)覽,因此超過(guò)第一預(yù)定時(shí)長(zhǎng)的重發(fā)包是無(wú)效的。如果數(shù)據(jù)包已經(jīng)重發(fā)過(guò),則也可不再重發(fā)。
另外,如果網(wǎng)絡(luò)抖動(dòng)狀態(tài)中的抖動(dòng)值大于一定閾值時(shí)且網(wǎng)絡(luò)帶寬充足時(shí),可以在上述重發(fā)的基礎(chǔ)上,進(jìn)一步增加前向糾錯(cuò)機(jī)制,
圖3所述的自適應(yīng)碼流傳輸方法,針對(duì)網(wǎng)絡(luò)抖動(dòng)狀態(tài),相應(yīng)的采用重發(fā)的傳輸策略,可有效的減少接收端出現(xiàn)卡頓、花屏故障的機(jī)率。
圖4為本發(fā)明實(shí)施例提供的針對(duì)帶寬不足的當(dāng)前網(wǎng)絡(luò)狀態(tài)所采用的自適應(yīng)碼流傳輸方法的實(shí)現(xiàn)流程,詳述如下:
在步驟s401中,根據(jù)當(dāng)前時(shí)間之前的第一預(yù)定時(shí)間范圍內(nèi)的每個(gè)時(shí)間片內(nèi)發(fā)送端所發(fā)送的,以及接收端所接收的數(shù)據(jù)包數(shù)量或字節(jié)數(shù)量,確定當(dāng)前網(wǎng)絡(luò)狀態(tài)。
步驟s401與步驟s101基本相同。
在步驟s402中,當(dāng)所述當(dāng)前網(wǎng)絡(luò)狀態(tài)為帶寬不足或丟包率持續(xù)時(shí),計(jì)算當(dāng)前允許的帶寬。
如果當(dāng)前的實(shí)際有效帶寬小于當(dāng)前所需帶寬,且差值大于預(yù)定差值時(shí),持續(xù)時(shí)長(zhǎng)大于預(yù)定時(shí)長(zhǎng)時(shí),服務(wù)器可以根據(jù)接收的確認(rèn)包ack,確定成功發(fā)送的數(shù)據(jù)以及成功發(fā)送的數(shù)據(jù)包的大小和發(fā)送時(shí)間,從而可以計(jì)算當(dāng)前允許的帶寬。
由于網(wǎng)絡(luò)帶寬不足,需要通過(guò)調(diào)節(jié)編碼器,降低當(dāng)前所需帶寬,從而避免出現(xiàn)卡頓或花屏現(xiàn)象。
在步驟s403中,根據(jù)預(yù)設(shè)的帶寬與傳輸質(zhì)量的對(duì)應(yīng)關(guān)系,查找當(dāng)前允許的帶寬所對(duì)應(yīng)的傳輸質(zhì)量,根據(jù)查找的傳輸質(zhì)量進(jìn)行碼流傳輸。
所述傳輸質(zhì)量,可以包括:
傳輸?shù)陀谡Y|(zhì)量的音頻:可以為預(yù)先設(shè)定的較低碼率的音頻編碼。
傳輸正常質(zhì)量音頻:按照正常碼率對(duì)音頻進(jìn)行編碼。
傳輸正常質(zhì)量的音頻和低于正常質(zhì)量的視頻:在正常碼率對(duì)音頻編碼的基礎(chǔ)上,啟動(dòng)前向糾錯(cuò)fec,視頻可以僅選用i幀編碼;
傳輸正常質(zhì)量的音頻和正常質(zhì)量的視頻:正常的音頻編碼,并且可以啟用或者不啟用前向糾錯(cuò)fec,視頻可以僅選用i幀編碼,并選用前向糾錯(cuò)fec,或者也可為正常碼率的視頻編碼。
另外,在本申請(qǐng)中,如果網(wǎng)絡(luò)情況得到改善,可以根據(jù)當(dāng)前網(wǎng)絡(luò)狀態(tài),相應(yīng)的提升碼率,從而提高音視頻質(zhì)量。另外,在提升碼率時(shí),所提升的碼率上限應(yīng)當(dāng)小于編碼器的輸出碼率上限。
另外,提升碼率時(shí),還可考慮當(dāng)前時(shí)間之前的一段時(shí)間內(nèi),帶寬是否發(fā)生明顯的變化,或者還可以考慮上次碼率調(diào)節(jié)的時(shí)間與當(dāng)前時(shí)間的間隔。
比如,當(dāng)在當(dāng)前時(shí)間之前的一段時(shí)間內(nèi)沒(méi)有帶寬變化,且上次碼率調(diào)節(jié)的時(shí)間距離當(dāng)前時(shí)間超過(guò)一設(shè)定的調(diào)節(jié)閾值時(shí)間,則進(jìn)行碼率調(diào)節(jié),否則不進(jìn)行碼率調(diào)節(jié)。當(dāng)碼率調(diào)節(jié)已達(dá)到質(zhì)量要求,也可停止碼率調(diào)節(jié)。
當(dāng)對(duì)于網(wǎng)絡(luò)抖動(dòng)狀態(tài)和網(wǎng)絡(luò)帶寬不足采用了相應(yīng)的傳輸策略后,當(dāng)前的當(dāng)前所需帶寬與實(shí)際有效帶寬的差值仍舊大于預(yù)定差值,則認(rèn)為當(dāng)前網(wǎng)絡(luò)存在環(huán)境噪聲,需要開啟前向糾錯(cuò)fec。
應(yīng)理解,上述實(shí)施例中各步驟的序號(hào)的大小并不意味著執(zhí)行順序的先后,各過(guò)程的執(zhí)行順序應(yīng)以其功能和內(nèi)在邏輯確定,而不應(yīng)對(duì)本發(fā)明實(shí)施例的實(shí)施過(guò)程構(gòu)成任何限定。
圖5為本發(fā)明實(shí)施例提供的一種自適應(yīng)碼流傳輸裝置的結(jié)構(gòu)示意圖,詳述如下:
所述自適應(yīng)碼流傳輸裝置包括:
網(wǎng)絡(luò)狀態(tài)確定單元501,用于根據(jù)當(dāng)前時(shí)間之前的第一預(yù)定時(shí)間范圍內(nèi)的每個(gè)時(shí)間片內(nèi)發(fā)送端所發(fā)送的,以及接收端所接收的數(shù)據(jù)包數(shù)量或字節(jié)數(shù)量,確定當(dāng)前網(wǎng)絡(luò)狀態(tài);
策略調(diào)用單元502,用于根據(jù)所述當(dāng)前網(wǎng)絡(luò)狀態(tài),調(diào)用與所述當(dāng)前網(wǎng)絡(luò)狀態(tài)對(duì)應(yīng)的碼流傳輸策略。
圖5所述的自適應(yīng)碼流傳輸裝置,與圖1-4中所述的自適應(yīng)碼流傳輸方法對(duì)應(yīng)。
圖6是本發(fā)明一實(shí)施例提供的自適應(yīng)碼流傳輸設(shè)備的示意圖。如圖6所示,該實(shí)施例的自適應(yīng)碼流傳輸設(shè)備6包括:處理器60、存儲(chǔ)器61以及存儲(chǔ)在所述存儲(chǔ)器61中并可在所述處理器60上運(yùn)行的計(jì)算機(jī)程序62,例如自適應(yīng)碼流傳輸程序。所述處理器60執(zhí)行所述計(jì)算機(jī)程序62時(shí)實(shí)現(xiàn)上述各個(gè)自適應(yīng)碼流傳輸方法實(shí)施例中的步驟,例如圖1所示的步驟101至102。或者,所述處理器60執(zhí)行所述計(jì)算機(jī)程序62時(shí)實(shí)現(xiàn)上述各裝置實(shí)施例中各模塊/單元的功能,例如圖5所示模塊501至502的功能。
示例性的,所述計(jì)算機(jī)程序62可以被分割成一個(gè)或多個(gè)模塊/單元,所述一個(gè)或者多個(gè)模塊/單元被存儲(chǔ)在所述存儲(chǔ)器61中,并由所述處理器60執(zhí)行,以完成本發(fā)明。所述一個(gè)或多個(gè)模塊/單元可以是能夠完成特定功能的一系列計(jì)算機(jī)程序指令段,該指令段用于描述所述計(jì)算機(jī)程序62在所述自適應(yīng)碼流傳輸設(shè)備6中的執(zhí)行過(guò)程。例如,所述計(jì)算機(jī)程序62可以被分割成網(wǎng)絡(luò)狀態(tài)確定單元和策略調(diào)用單元,各單元具體功能如下:
網(wǎng)絡(luò)狀態(tài)確定單元,用于根據(jù)當(dāng)前時(shí)間之前的第一預(yù)定時(shí)間范圍內(nèi)的每個(gè)時(shí)間片內(nèi)發(fā)送端所發(fā)送的,以及接收端所接收的數(shù)據(jù)包數(shù)量或字節(jié)數(shù)量,確定當(dāng)前網(wǎng)絡(luò)狀態(tài);
策略調(diào)用單元,用于根據(jù)所述當(dāng)前網(wǎng)絡(luò)狀態(tài),調(diào)用與所述當(dāng)前網(wǎng)絡(luò)狀態(tài)對(duì)應(yīng)的碼流傳輸策略。
所述自適應(yīng)碼流傳輸設(shè)備6可以是桌上型計(jì)算機(jī)、筆記本、掌上電腦及云端服務(wù)器等計(jì)算設(shè)備。所述自適應(yīng)碼流傳輸設(shè)備可包括,但不僅限于,處理器60、存儲(chǔ)器61。本領(lǐng)域技術(shù)人員可以理解,圖6僅僅是自適應(yīng)碼流傳輸設(shè)備6的示例,并不構(gòu)成對(duì)自適應(yīng)碼流傳輸設(shè)備6的限定,可以包括比圖示更多或更少的部件,或者組合某些部件,或者不同的部件,例如所述自適應(yīng)碼流傳輸設(shè)備還可以包括輸入輸出設(shè)備、網(wǎng)絡(luò)接入設(shè)備、總線等。
所稱處理器60可以是中央處理單元(centralprocessingunit,cpu),還可以是其他通用處理器、數(shù)字信號(hào)處理器(digitalsignalprocessor,dsp)、專用集成電路(applicationspecificintegratedcircuit,asic)、現(xiàn)成可編程門陣列(field-programmablegatearray,fpga)或者其他可編程邏輯器件、分立門或者晶體管邏輯器件、分立硬件組件等。通用處理器可以是微處理器或者該處理器也可以是任何常規(guī)的處理器等。
所述存儲(chǔ)器61可以是所述自適應(yīng)碼流傳輸設(shè)備6的內(nèi)部存儲(chǔ)單元,例如自適應(yīng)碼流傳輸設(shè)備6的硬盤或內(nèi)存。所述存儲(chǔ)器61也可以是所述自適應(yīng)碼流傳輸設(shè)備6的外部存儲(chǔ)設(shè)備,例如所述自適應(yīng)碼流傳輸設(shè)備6上配備的插接式硬盤,智能存儲(chǔ)卡(smartmediacard,smc),安全數(shù)字(securedigital,sd)卡,閃存卡(flashcard)等。進(jìn)一步地,所述存儲(chǔ)器61還可以既包括所述自適應(yīng)碼流傳輸設(shè)備6的內(nèi)部存儲(chǔ)單元也包括外部存儲(chǔ)設(shè)備。所述存儲(chǔ)器61用于存儲(chǔ)所述計(jì)算機(jī)程序以及所述自適應(yīng)碼流傳輸設(shè)備所需的其他程序和數(shù)據(jù)。所述存儲(chǔ)器61還可以用于暫時(shí)地存儲(chǔ)已經(jīng)輸出或者將要輸出的數(shù)據(jù)。
所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為了描述的方便和簡(jiǎn)潔,僅以上述各功能單元、模塊的劃分進(jìn)行舉例說(shuō)明,實(shí)際應(yīng)用中,可以根據(jù)需要而將上述功能分配由不同的功能單元、模塊完成,即將所述裝置的內(nèi)部結(jié)構(gòu)劃分成不同的功能單元或模塊,以完成以上描述的全部或者部分功能。實(shí)施例中的各功能單元、模塊可以集成在一個(gè)處理單元中,也可以是各個(gè)單元單獨(dú)物理存在,也可以兩個(gè)或兩個(gè)以上單元集成在一個(gè)單元中,上述集成的單元既可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能單元的形式實(shí)現(xiàn)。另外,各功能單元、模塊的具體名稱也只是為了便于相互區(qū)分,并不用于限制本申請(qǐng)的保護(hù)范圍。上述系統(tǒng)中單元、模塊的具體工作過(guò)程,可以參考前述方法實(shí)施例中的對(duì)應(yīng)過(guò)程,在此不再贅述。
在上述實(shí)施例中,對(duì)各個(gè)實(shí)施例的描述都各有側(cè)重,某個(gè)實(shí)施例中沒(méi)有詳述或記載的部分,可以參見其它實(shí)施例的相關(guān)描述。
本領(lǐng)域普通技術(shù)人員可以意識(shí)到,結(jié)合本文中所公開的實(shí)施例描述的各示例的單元及算法步驟,能夠以電子硬件、或者計(jì)算機(jī)軟件和電子硬件的結(jié)合來(lái)實(shí)現(xiàn)。這些功能究竟以硬件還是軟件方式來(lái)執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計(jì)約束條件。專業(yè)技術(shù)人員可以對(duì)每個(gè)特定的應(yīng)用來(lái)使用不同方法來(lái)實(shí)現(xiàn)所描述的功能,但是這種實(shí)現(xiàn)不應(yīng)認(rèn)為超出本發(fā)明的范圍。
在本發(fā)明所提供的實(shí)施例中,應(yīng)該理解到,所揭露的裝置/終端設(shè)備和方法,可以通過(guò)其它的方式實(shí)現(xiàn)。例如,以上所描述的裝置/終端設(shè)備實(shí)施例僅僅是示意性的,例如,所述模塊或單元的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)單元或組件可以結(jié)合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通訊連接可以是通過(guò)一些接口,裝置或單元的間接耦合或通訊連接,可以是電性,機(jī)械或其它的形式。
所述作為分離部件說(shuō)明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部單元來(lái)實(shí)現(xiàn)本實(shí)施例方案的目的。
另外,在本發(fā)明各個(gè)實(shí)施例中的各功能單元可以集成在一個(gè)處理單元中,也可以是各個(gè)單元單獨(dú)物理存在,也可以兩個(gè)或兩個(gè)以上單元集成在一個(gè)單元中。上述集成的單元既可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能單元的形式實(shí)現(xiàn)。
所述集成的模塊/單元如果以軟件功能單元的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷售或使用時(shí),可以存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中?;谶@樣的理解,本發(fā)明實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分流程,也可以通過(guò)計(jì)算機(jī)程序來(lái)指令相關(guān)的硬件來(lái)完成,所述的計(jì)算機(jī)程序可存儲(chǔ)于一計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,該計(jì)算機(jī)程序在被處理器執(zhí)行時(shí),可實(shí)現(xiàn)上述各個(gè)方法實(shí)施例的步驟。。其中,所述計(jì)算機(jī)程序包括計(jì)算機(jī)程序代碼,所述計(jì)算機(jī)程序代碼可以為源代碼形式、對(duì)象代碼形式、可執(zhí)行文件或某些中間形式等。所述計(jì)算機(jī)可讀介質(zhì)可以包括:能夠攜帶所述計(jì)算機(jī)程序代碼的任何實(shí)體或裝置、記錄介質(zhì)、u盤、移動(dòng)硬盤、磁碟、光盤、計(jì)算機(jī)存儲(chǔ)器、只讀存儲(chǔ)器(rom,read-onlymemory)、隨機(jī)存取存儲(chǔ)器(ram,randomaccessmemory)、電載波信號(hào)、電信信號(hào)以及軟件分發(fā)介質(zhì)等。需要說(shuō)明的是,所述計(jì)算機(jī)可讀介質(zhì)包含的內(nèi)容可以根據(jù)司法管轄區(qū)內(nèi)立法和專利實(shí)踐的要求進(jìn)行適當(dāng)?shù)脑鰷p,例如在某些司法管轄區(qū),根據(jù)立法和專利實(shí)踐,計(jì)算機(jī)可讀介質(zhì)不包括是電載波信號(hào)和電信信號(hào)。
以上所述實(shí)施例僅用以說(shuō)明本發(fā)明的技術(shù)方案,而非對(duì)其限制;盡管參照前述實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說(shuō)明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對(duì)前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的精神和范圍,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。