本發(fā)明涉及網(wǎng)絡(luò)通信技術(shù)領(lǐng)域,具體而言,涉及一種碼率自適應(yīng)調(diào)節(jié)方法、裝置及電子設(shè)備。
背景技術(shù):
延遲時(shí)間多少是衡量一個(gè)直播服務(wù)優(yōu)劣的重要指標(biāo),當(dāng)延遲比較大時(shí),作為觀眾要在比較長的時(shí)間后,才能看到在主播側(cè)的畫面。如果涉及到主播與觀眾的互動(dòng),那么雙方的互動(dòng)信息延遲將非常的大,極大的影響了用戶體驗(yàn)。直播延遲的造成是多方面的,其中,主要一種延遲產(chǎn)生于直播源產(chǎn)生端,也就是主播端產(chǎn)生的直播延遲,主播一般采用一些直播軟件來進(jìn)行直播,直播軟件將主播端的視頻、聲音等信息通過編碼,然后通過相關(guān)的網(wǎng)絡(luò)傳輸協(xié)議,發(fā)送至網(wǎng)絡(luò)服務(wù)提供商,所以主播端產(chǎn)生的直播延遲主要就是由直播軟件造成的,而直播軟件造成的延遲主要是由主播的上傳網(wǎng)絡(luò)不夠而導(dǎo)致的。
現(xiàn)有的解決延遲的方法是丟幀,通過丟棄相關(guān)的視頻幀或者音頻幀,來減少直播軟件中的編碼隊(duì)列緩存,來實(shí)現(xiàn)降低延遲。雖然這種方法在一定程度上減少了直播延遲,但是丟棄了相關(guān)的直播信息,會(huì)使觀眾觀看視頻時(shí)產(chǎn)生卡頓,仍然會(huì)影響用戶的體驗(yàn)度。因此,如何實(shí)現(xiàn)在丟幀的過程中,避免觀看端的視頻卡頓現(xiàn)象的問題十分重要。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本發(fā)明的目的在于提供一種碼率自適應(yīng)調(diào)節(jié)方法、裝置及電子設(shè)備,以改善上述問題。
本發(fā)明實(shí)施例提供一種碼率自適應(yīng)調(diào)節(jié)方法,應(yīng)用于與服務(wù)器通信連接的用戶端,對(duì)直播音視頻進(jìn)行碼率自適應(yīng)調(diào)節(jié),所述方法包括:
根據(jù)當(dāng)前系統(tǒng)網(wǎng)絡(luò)狀態(tài)設(shè)定最大碼率和最低碼率,根據(jù)所述最大碼率和所述最低碼率計(jì)算得到第一碼率,以所述第一碼率對(duì)傳輸?shù)拿襟w流進(jìn)行編碼;
判斷預(yù)設(shè)時(shí)長內(nèi)是否出現(xiàn)丟幀,若出現(xiàn)丟幀,則降低所述第一碼率得到第三碼率,以所述第三碼率對(duì)傳輸?shù)拿襟w流進(jìn)行編碼;
若未出現(xiàn)丟幀,則增大所述第一碼率得到第二碼率,以所述第二碼率對(duì)傳輸?shù)拿襟w流進(jìn)行編碼;
判斷以所述第二碼率進(jìn)行編碼時(shí)是否出現(xiàn)丟幀,若出現(xiàn)丟幀,則降低所述第二碼率得到第三碼率,以所述第三碼率對(duì)傳輸?shù)拿襟w流進(jìn)行編碼。
進(jìn)一步地,所述根據(jù)所述最大碼率和所述最低碼率計(jì)算得到第一碼率的步驟,包括:
將所述最大碼率和所述最低碼率按第一計(jì)算式:b1=(b(max)+b(min))/2計(jì)算得到第一碼率,其中,b1為第一碼率,b(max)為設(shè)定的最大碼率,b(min)為設(shè)定的最低碼率。
進(jìn)一步地,所述增大所述第一碼率得到第二碼率的步驟,包括:
將系統(tǒng)最低碼率重置為計(jì)算得到的所述第一碼率;
將重置后的最低碼率和設(shè)定的所述最大碼率按第二計(jì)算式:b2=(b(max)+b’(min))/2計(jì)算得到第二碼率,其中,b2為第二碼率,b(max)為設(shè)定的最大碼率,b’(min)為重置后的最低碼率。
進(jìn)一步地,所述第三碼率通過以下步驟獲得:
將系統(tǒng)最大碼率重置為計(jì)算得到的所述第一碼率并將系統(tǒng)最低碼率設(shè)置為設(shè)定的所述最低碼率,或?qū)⑾到y(tǒng)最大碼率重置為所述第二碼率并將系統(tǒng)最低碼率設(shè)置為重置后的最低碼率;
將重置后的最大碼率和重新設(shè)置后的最低碼率按第三計(jì)算式:b3=(b’(max)+b”(min))/2計(jì)算得到第三碼率,其中,b3為第三碼率,b’(max)為重置后的最大碼率,b”(min)為重新設(shè)置的最低碼率。
進(jìn)一步地,所述方法還包括:
檢測當(dāng)前系統(tǒng)是否出現(xiàn)丟包,若出現(xiàn)丟包,則觸發(fā)碼率調(diào)節(jié)請(qǐng)求;
所述根據(jù)當(dāng)前系統(tǒng)網(wǎng)絡(luò)狀態(tài)設(shè)定最大碼率和最低碼率的步驟在獲得所述碼率調(diào)節(jié)請(qǐng)求之后觸發(fā)執(zhí)行。
進(jìn)一步地,所述媒體流包括視頻流和音頻流,檢測當(dāng)前系統(tǒng)是否出現(xiàn)丟包通過以下步驟執(zhí)行:
在網(wǎng)絡(luò)傳輸線程中,檢測待發(fā)送隊(duì)列中的視頻流數(shù)據(jù)包或音頻流數(shù)據(jù)包是否累積達(dá)到預(yù)設(shè)閾值,若達(dá)到所述預(yù)設(shè)閾值,則判定當(dāng)前系統(tǒng)出現(xiàn)丟包,并觸發(fā)丟包邏輯。
進(jìn)一步地,所述視頻流數(shù)據(jù)包和所述音頻流數(shù)據(jù)包通過以下步驟獲得:
在視頻編碼線程中,對(duì)獲得的直播圖像進(jìn)行編碼,將編碼后生成的視頻流數(shù)據(jù)包投遞至所述網(wǎng)絡(luò)傳輸線程;
在音頻編碼線程,對(duì)獲得的直播聲音進(jìn)行編碼,將編碼后生成的音頻流數(shù)據(jù)包投遞至所述網(wǎng)絡(luò)傳輸線程。
本發(fā)明另一實(shí)施例還提供一種碼率自適應(yīng)調(diào)節(jié)裝置,應(yīng)用于與服務(wù)器通信連接的用戶端,對(duì)直播音視頻進(jìn)行碼率自適應(yīng)調(diào)節(jié),所述碼率自適應(yīng)調(diào)節(jié)裝置包括:
設(shè)定模塊,用于根據(jù)當(dāng)前系統(tǒng)網(wǎng)絡(luò)狀態(tài)設(shè)定最大碼率和最低碼率,根據(jù)所述最大碼率和所述最低碼率計(jì)算得到第一碼率,以所述第一碼率對(duì)傳輸?shù)拿襟w流進(jìn)行編碼;
判斷模塊,用于判斷預(yù)設(shè)時(shí)長內(nèi)是否出現(xiàn)丟幀;
第一修改模塊,用于在出現(xiàn)丟幀時(shí),降低所述第一碼率得到第三碼率,以所述第三碼率對(duì)傳輸?shù)拿襟w流進(jìn)行編碼;
第二修改模塊,用于在未出現(xiàn)丟幀時(shí),增大所述第一碼率得到第二碼率,以所述第二碼率對(duì)傳輸?shù)拿襟w流進(jìn)行編碼;
第二判斷模塊,用于判斷以所述第二碼率進(jìn)行編碼時(shí)是否出現(xiàn)丟幀;
第三修改模塊,用于在出現(xiàn)丟幀時(shí),降低所述第二碼率得到第三碼率,以所述第三碼率對(duì)傳輸?shù)拿襟w流進(jìn)行編碼。
本發(fā)明另一實(shí)施例還提供一種電子設(shè)備,包括:
存儲(chǔ)器;
處理器;及
碼率自適應(yīng)調(diào)節(jié)裝置,所述碼率自適應(yīng)調(diào)節(jié)裝置安裝于所述存儲(chǔ)器中并包括一個(gè)或多個(gè)由所述處理器執(zhí)行的軟件功能模塊。
本發(fā)明另一實(shí)施例還提供一種存儲(chǔ)介質(zhì),其上存儲(chǔ)有計(jì)算機(jī)程序,所述計(jì)算機(jī)程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)上述的碼率自適應(yīng)調(diào)節(jié)方法的步驟。
本發(fā)明實(shí)施例提供的碼率自適應(yīng)調(diào)節(jié)方法、裝置及電子設(shè)備,根據(jù)系統(tǒng)網(wǎng)絡(luò)狀態(tài)得到相應(yīng)的碼率,并利用得到的碼率對(duì)傳輸?shù)拿襟w流進(jìn)行編碼。通過檢測數(shù)據(jù)丟幀情況,根據(jù)數(shù)據(jù)丟幀情況相應(yīng)地增大或降低碼率,利用修改后的碼率對(duì)媒體流進(jìn)行編碼。通過上述的丟幀及碼率自適應(yīng)的調(diào)整,有效地解決了因直播延遲而采用丟幀后,因丟幀而引起的觀看端卡頓的問題。
為使本發(fā)明的上述目的、特征和優(yōu)點(diǎn)能更明顯易懂,下文特舉較佳實(shí)施例,并配合所附附圖,作詳細(xì)說明如下。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例的技術(shù)方案,下面將對(duì)實(shí)施例中所需要使用的附圖作簡單地介紹,應(yīng)當(dāng)理解,以下附圖僅示出了本發(fā)明的某些實(shí)施例,因此不應(yīng)被看作是對(duì)范圍的限定,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他相關(guān)的附圖。
圖1為本發(fā)明較佳實(shí)施例提供的一種碼率自適應(yīng)調(diào)節(jié)方法的應(yīng)用場景示意圖。
圖2為本發(fā)明實(shí)施例提供的用戶端的示意性結(jié)構(gòu)框圖。
圖3為本發(fā)明實(shí)施例提供的碼率自適應(yīng)調(diào)節(jié)方法的流程圖。
圖4為本發(fā)明實(shí)施例提供的碼率自適應(yīng)調(diào)節(jié)方法的另一流程圖。
圖5為本發(fā)明實(shí)施例提供的碼率自適應(yīng)調(diào)節(jié)方法的另一流程圖。
圖6為圖3中步驟s104的子步驟的流程圖。
圖7為本發(fā)明實(shí)施例提供的碼率自適應(yīng)調(diào)節(jié)方法的另一流程圖。
圖8為本發(fā)明實(shí)施例提供的碼率自適應(yīng)調(diào)節(jié)裝置的功能模塊框圖。
圖9為本發(fā)明實(shí)施例提供的碼率自適應(yīng)調(diào)節(jié)裝置的另一功能模塊框圖。
圖10為本發(fā)明實(shí)施例提供的碼率自適應(yīng)調(diào)節(jié)裝置的另一功能模塊框圖。
圖11為本發(fā)明實(shí)施例提供的第二修改模塊的功能模塊框圖。
圖12為本發(fā)明實(shí)施例提供的碼率自適應(yīng)調(diào)節(jié)裝置的另一功能模塊框圖。
圖標(biāo):100-用戶端;110-碼率自適應(yīng)調(diào)節(jié)裝置;111-設(shè)定模塊;112-第一判斷模塊;113-第一修改模塊;114-第二修改模塊;1141-重置單元;1142-計(jì)算單元;115-第二判斷模塊;116-第三修改模塊;117-退出判斷模塊;118-視頻編碼模塊;119-音頻編碼模塊;1110-檢測模塊;1111-判定模塊;1112-重置模塊;1113-計(jì)算模塊;120-處理器;130-存儲(chǔ)器;200-服務(wù)器。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。通常在此處附圖中描述和示出的本發(fā)明實(shí)施例的組件可以以各種不同的配置來布置和設(shè)計(jì)。因此,以下對(duì)在附圖中提供的本發(fā)明的實(shí)施例的詳細(xì)描述并非旨在限制要求保護(hù)的本發(fā)明的范圍,而是僅僅表示本發(fā)明的選定實(shí)施例?;诒景l(fā)明的實(shí)施例,本領(lǐng)域技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)的前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
應(yīng)注意到:相似的標(biāo)號(hào)和字母在下面的附圖中表示類似項(xiàng),因此,一旦某一項(xiàng)在一個(gè)附圖中被定義,則在隨后的附圖中不需要對(duì)其進(jìn)行進(jìn)一步定義和解釋。同時(shí),在本發(fā)明的描述中,除非另有明確的規(guī)定和限定,術(shù)語“安裝”、“設(shè)置”、“連接”應(yīng)做廣義理解,例如,可以是固定連接,也可以是可拆卸連接,或一體地連接;可以是機(jī)械連接,也可以是電連接;可以是直接相連,也可以通過中間媒介間接相連,可以是兩個(gè)元件內(nèi)部的連通。對(duì)于本領(lǐng)域的普通技術(shù)人員而言,可以具體情況理解上述術(shù)語在本發(fā)明中的具體含義。
碼率是音視頻編碼過程中一個(gè)非常重要的參數(shù),其直接影響到了音頻和視頻的清晰度,碼率越大,音視頻的清晰度越大,碼率越小,音視頻的清晰度越小。但是碼率越大,通過網(wǎng)絡(luò)傳輸時(shí),所傳輸?shù)淖止?jié)量就越多,所消耗的網(wǎng)絡(luò)帶寬就越大,所以就需要更大的網(wǎng)絡(luò)上傳速度。而直播軟件造成的延遲主要是由主播的上傳網(wǎng)絡(luò)不夠而導(dǎo)致的。通常解決延遲的方法是丟幀,通過丟棄相關(guān)的視頻幀或者音頻幀,來減少直播軟件中的編碼隊(duì)列緩存,來實(shí)現(xiàn)降低延遲。雖然這種方法在一定程度上減少了直播延遲,但是丟棄了相關(guān)的直播信息,會(huì)使觀眾觀看視頻時(shí)產(chǎn)生卡頓,仍然會(huì)引起用戶的體驗(yàn)度。因此,本發(fā)明提出一種在丟幀過程中,通過網(wǎng)絡(luò)狀態(tài)進(jìn)行碼率自適應(yīng)調(diào)節(jié)的方案,從而既能降低直播延遲,又不會(huì)產(chǎn)生卡頓的問題。
請(qǐng)參閱圖1,為本發(fā)明實(shí)施例提供的一種碼率自適應(yīng)調(diào)節(jié)方法的應(yīng)用場景示意圖。該場景包括用戶端100和服務(wù)器200。所述用戶端100通過網(wǎng)絡(luò)與所述服務(wù)器200通信連接,以進(jìn)行數(shù)據(jù)通信或交互。在本實(shí)施例中,所述用戶端100可以包括多個(gè)(圖中只示出一個(gè)),多個(gè)所述用戶端100與所述服務(wù)器200通信連接。在本實(shí)施例中,所述的用戶端100主要針對(duì)主播端所使用的用戶端100。
其中,所述用戶端100可以是但不限于個(gè)人電腦、平板電腦、智能手機(jī)、移動(dòng)上網(wǎng)設(shè)備等。所述用戶端100上安裝有視頻直播應(yīng)用軟件,以供用戶進(jìn)行視頻直播。所述服務(wù)器200為對(duì)應(yīng)于所述用戶端100上安裝的視頻直播應(yīng)用軟件的后臺(tái)服務(wù)器。所述服務(wù)器200可以是網(wǎng)絡(luò)服務(wù)器、數(shù)據(jù)庫服務(wù)器,可以是單獨(dú)的服務(wù)器也可以是服務(wù)器集群等。
請(qǐng)參閱圖2,為本發(fā)明實(shí)施例提供的一種電子設(shè)備的示意性結(jié)構(gòu)框圖。在本實(shí)施例中,所述電子設(shè)備可以為上述的用戶端100,所述用戶端100包括碼率自適應(yīng)調(diào)節(jié)裝置110、處理器120及存儲(chǔ)器130。其中,所述存儲(chǔ)器130與所述處理器120之間直接或間接的電性連接,以實(shí)現(xiàn)數(shù)據(jù)的傳輸或交互。所述碼率自適應(yīng)調(diào)節(jié)裝置110包括至少一個(gè)可以軟件或固件的形式存儲(chǔ)于所述存儲(chǔ)器130中或固化在所述用戶端100的操作系統(tǒng)中的軟件功能模塊。所述處理器120用于執(zhí)行所述存儲(chǔ)器130中存儲(chǔ)的可執(zhí)行模塊,例如所述碼率自適應(yīng)調(diào)節(jié)裝置110包括的軟件功能模塊或計(jì)算機(jī)程序。
請(qǐng)參閱圖3,是本發(fā)明實(shí)施例提供的一種應(yīng)用于上述用戶端100的碼率自適應(yīng)調(diào)節(jié)方法的流程圖。所應(yīng)說明的是,本發(fā)明提供的方法不以圖3及以下所述的具體順序?yàn)橄拗啤O旅鎸?duì)圖3中示出的各步驟進(jìn)行詳細(xì)說明。
步驟s101,根據(jù)當(dāng)前系統(tǒng)網(wǎng)絡(luò)狀態(tài)設(shè)定最大碼率和最低碼率,根據(jù)所述最大碼率和所述最低碼率計(jì)算得到第一碼率,以所述第一碼率對(duì)傳輸?shù)拿襟w流進(jìn)行編碼。
主播端的用戶端100發(fā)布的媒體流是通過直播軟件來完成的,而直播軟件對(duì)媒體流進(jìn)行相應(yīng)處理后,通過rtmp(realtimemessagingprotocol,實(shí)時(shí)消息傳輸協(xié)議)推送至服務(wù)器200。在系統(tǒng)中會(huì)有三個(gè)不同的線程來分別完成相應(yīng)的功能,包括視頻編碼線程、音頻編碼線程以及網(wǎng)絡(luò)傳輸線程。
其中,網(wǎng)絡(luò)傳輸線程主要作用是對(duì)媒體流數(shù)據(jù)包進(jìn)行傳輸,其中媒體流數(shù)據(jù)包包括視頻流數(shù)據(jù)包和音頻流數(shù)據(jù)包。請(qǐng)參閱圖4,網(wǎng)絡(luò)傳輸線程中的視頻流數(shù)據(jù)包和音頻流數(shù)據(jù)包主要是通過以下步驟獲得:
步驟s201,在視頻編碼線程中,對(duì)獲得的直播圖像進(jìn)行編碼,將編碼后生成的視頻流數(shù)據(jù)包投遞至所述網(wǎng)絡(luò)傳輸線程。
步驟s203,在音頻編碼線程中,對(duì)獲得的直播聲音進(jìn)行編碼,將編碼后生成的音頻流數(shù)據(jù)包投遞至所述網(wǎng)絡(luò)傳輸線程。
編碼器是指利用相關(guān)算法對(duì)原始的數(shù)據(jù)進(jìn)行編碼壓縮,從而利于原始數(shù)據(jù)的存儲(chǔ)與傳輸,編碼器可以是軟件形式的,也可以是硬件形式的。在多媒體領(lǐng)域,常用的編碼器主要為視頻編碼器和音頻編碼器,在直播軟件中視頻編碼器主要采用的是h264編碼器,音頻編碼器主要采用的是aac編碼器。編碼后產(chǎn)生的壓縮后數(shù)據(jù),通常稱為相應(yīng)的包。
可選地,在視頻編碼線程中,按照預(yù)先設(shè)置的幀率,對(duì)直播圖像利用h264視頻編碼器對(duì)圖像進(jìn)行編碼。在音頻編碼線程中,主要是對(duì)采集到的系統(tǒng)聲音利用aac音頻編碼器對(duì)聲音進(jìn)行編碼。
在網(wǎng)絡(luò)傳輸線程中,將視頻編碼線程和音頻編碼線程編碼后生成的數(shù)據(jù)包利用rtmp協(xié)議推送至服務(wù)器200,而直播延遲就是在這個(gè)過程中產(chǎn)生的。因此,在本實(shí)施例中,所述碼率自適應(yīng)調(diào)節(jié)方法還包括以下步驟:檢測當(dāng)前系統(tǒng)是否出現(xiàn)丟包,若出現(xiàn)丟包,則觸發(fā)碼率調(diào)節(jié)請(qǐng)求。在本實(shí)施例中,步驟根據(jù)當(dāng)前系統(tǒng)網(wǎng)絡(luò)狀態(tài)設(shè)定最大碼率和最低碼率是在獲得該碼率調(diào)節(jié)請(qǐng)求之后觸發(fā)而執(zhí)行的。請(qǐng)參閱圖5,而對(duì)于如何檢測當(dāng)前系統(tǒng)是否出現(xiàn)丟包則可以根據(jù)以下步驟獲得:
步驟s301,在網(wǎng)絡(luò)傳輸線程中,檢測待發(fā)送隊(duì)列中的視頻流數(shù)據(jù)包或音頻流數(shù)據(jù)包是否累積達(dá)到預(yù)設(shè)閾值,若達(dá)到預(yù)設(shè)閾值,則執(zhí)行以下步驟s203。
步驟s303,判定當(dāng)前系統(tǒng)出現(xiàn)丟包,并觸發(fā)丟包邏輯。
由于在網(wǎng)絡(luò)傳輸線程中是將來自視頻編碼線程和音頻編碼線程中的數(shù)據(jù)包按照時(shí)間順序,依次存儲(chǔ)在發(fā)送隊(duì)列中,然后再一個(gè)一個(gè)地發(fā)送至rtmp服務(wù)器。如果上一個(gè)數(shù)據(jù)包沒有發(fā)送完成,那么下一個(gè)數(shù)據(jù)包就只能等待上一個(gè)數(shù)據(jù)包發(fā)送完成之后才能發(fā)送。這樣的話,如果網(wǎng)絡(luò)上傳速度不夠,那么發(fā)送隊(duì)列中就會(huì)隨著直播時(shí)間的增加,就會(huì)累積非常多的視頻流數(shù)據(jù)包和音頻流數(shù)據(jù)包。這也是在主播端延遲發(fā)生的根本原因。
為了解決因?yàn)樯蟼魉俣炔粔蚨鴮?dǎo)致的直播延遲,可采用丟幀的方式來優(yōu)化直播延遲。當(dāng)網(wǎng)絡(luò)傳輸線程中的待發(fā)送隊(duì)列中的數(shù)據(jù)包累積達(dá)到預(yù)設(shè)閾值時(shí),則會(huì)觸發(fā)丟包邏輯,在檢測到系統(tǒng)出現(xiàn)丟包時(shí),則會(huì)觸發(fā)碼率調(diào)節(jié)請(qǐng)求。
可選地,網(wǎng)絡(luò)傳輸線程所傳輸?shù)拿襟w流數(shù)據(jù)包括了視頻流數(shù)據(jù)包和音頻流數(shù)據(jù)包。在對(duì)媒體流數(shù)據(jù)包的丟幀處理算法邏輯上可對(duì)視頻流及音頻流的丟幀優(yōu)先級(jí)進(jìn)行考慮。應(yīng)當(dāng)理解,對(duì)于一個(gè)視頻來說,感官最重要的是聲音,如果聲音不流暢,觀看者的體驗(yàn)將會(huì)非常的差,而如果視頻有稍微的不流暢,還是能夠接受的。并且,在網(wǎng)絡(luò)傳輸?shù)拇鷥r(jià)上,視頻的開銷會(huì)比音頻更大。因?yàn)橐曨l所占的體積大小比音頻要大的多,所以在丟幀策略中通常優(yōu)先丟棄視頻流數(shù)據(jù)包。
但是在丟棄視頻過程中,并不是任何一個(gè)視頻幀都是可以丟棄的,如果這樣的話,就有可能導(dǎo)致觀看端的播放器畫面發(fā)生花屏的現(xiàn)象。在丟棄視頻幀時(shí),首先需要判定該視頻流數(shù)據(jù)包是否為關(guān)鍵幀,如果不是關(guān)鍵幀,則該視頻流數(shù)據(jù)包不能丟棄。如果是關(guān)鍵幀,則該視頻流數(shù)據(jù)包將被丟棄,并且在該幀以后的所有非關(guān)鍵幀都將會(huì)被丟棄。當(dāng)丟幀后隊(duì)列中剩余的數(shù)據(jù)包達(dá)到預(yù)設(shè)閾值后,則可以停止丟幀,但是需要等到視頻關(guān)鍵幀時(shí)才能真正地停止丟幀。即丟棄視頻幀時(shí)是從關(guān)鍵幀開始丟棄,并且一直丟棄到關(guān)鍵幀為止才結(jié)束。
可選地,在檢測到系統(tǒng)出現(xiàn)丟包時(shí),則會(huì)觸發(fā)碼率調(diào)節(jié)請(qǐng)求。在觸發(fā)了碼率調(diào)節(jié)請(qǐng)求之后,系統(tǒng)響應(yīng)該調(diào)節(jié)請(qǐng)求,并且根據(jù)當(dāng)前的網(wǎng)絡(luò)狀態(tài)設(shè)定一最大碼率和一最低碼率,例如,將最大碼率設(shè)定為b(max),將最低碼率設(shè)定為b(min)。根據(jù)設(shè)定的最大碼率和最低碼率計(jì)算出第一碼率,并以計(jì)算出的第一碼率對(duì)傳輸?shù)囊曨l流和音頻流進(jìn)行編碼。
可選地,根據(jù)最大碼率和最低碼率計(jì)算得到第一碼率可按以下方式執(zhí)行:
將所述最大碼率和所述最低碼率按第一計(jì)算式:b1=(b(max)+b(min))/2計(jì)算得到第一碼率,其中,b1為第一碼率,b(max)為設(shè)定的最大碼率,b(min)為設(shè)定的最低碼率。
步驟s102,判斷預(yù)設(shè)時(shí)長內(nèi)是否出現(xiàn)丟幀,若出現(xiàn)丟幀,則執(zhí)行以下步驟s103,若未出現(xiàn)丟幀,則執(zhí)行以下步驟s104。
步驟s103,降低所述第一碼率得到第三碼率,以所述第三碼率對(duì)傳輸?shù)拿襟w流進(jìn)行編碼。
步驟s104,增大所述第一碼率得到第二碼率,以所述第二碼率對(duì)傳輸?shù)拿襟w流進(jìn)行編碼。
步驟s105,判斷以所述第二碼率進(jìn)行編碼時(shí)是否出現(xiàn)丟幀,若出現(xiàn)丟幀,則執(zhí)行以下步驟s106。
步驟s106,降低所述第二碼率得到第三碼率,以所述第三碼率對(duì)傳輸?shù)拿襟w流進(jìn)行編碼。
步驟s107,根據(jù)得到的所述第三碼率判斷是否滿足退出條件,若滿足退出條件,則結(jié)束碼率自適應(yīng)調(diào)節(jié),若不滿足退出條件,則檢測預(yù)設(shè)時(shí)長內(nèi)是否出現(xiàn)丟幀。
可選地,在對(duì)視頻流和音頻流進(jìn)行編碼及傳輸?shù)倪^程中,系統(tǒng)會(huì)實(shí)時(shí)檢測數(shù)據(jù)包是否出現(xiàn)丟幀現(xiàn)象。如果在預(yù)設(shè)時(shí)長內(nèi)未出現(xiàn)丟幀,則表明當(dāng)前采用的碼率能夠適應(yīng)于當(dāng)前的網(wǎng)絡(luò)上傳速度,因此可在當(dāng)前碼率的基礎(chǔ)上增大碼率值。此時(shí),可在第一碼率的基礎(chǔ)上進(jìn)行碼率增大,得到第二碼率,以得到的第二碼率進(jìn)行編碼。
可選地,請(qǐng)參閱圖6,在本實(shí)施例中,增大第一碼率得到第二碼率可按以下方式進(jìn)行:
步驟s1041,將系統(tǒng)最低碼率重置為計(jì)算得到的所述第一碼率。
步驟s1043,將重置后的最低碼率和設(shè)定的所述最大碼率按第二計(jì)算式:b2=(b(max)+b’(min))/2計(jì)算得到第二碼率,其中,b2為第二碼率,b(max)為設(shè)定的最大碼率,b’(min)為重置后的最低碼率。
可選地,增大第一碼率的方式可以是將當(dāng)前系統(tǒng)的最低碼率重置為所設(shè)定的最大碼率b(max)和最低碼率b(min)的平均值,即計(jì)算得到的第一碼率b1。則通過b2=(b(max)+b’(min))/2計(jì)算得到第二碼率,其中,b2為第二碼率,b(max)為設(shè)定的最大碼率,b’(min)為重置后的最低碼率,b’(min)=b1=(b(max)+b(min))/2。以計(jì)算出的第二碼率對(duì)視頻流和音頻流進(jìn)行編碼。若在預(yù)設(shè)時(shí)長內(nèi)仍未出現(xiàn)丟幀,則表明當(dāng)前得到的第二碼率依然可以適應(yīng)于當(dāng)前網(wǎng)絡(luò)的上傳速度,則可繼續(xù)降低第二碼率,并以降低后的第二碼率進(jìn)行編碼,按此邏輯一直到有b2(n)=(b2(n-1)+b(max))/2,其中,b(min)=b2(n-1)并且b2(n)<b2,n表示第二碼率更新的次數(shù)。
若在以第一碼率進(jìn)行編碼過程中,檢測出數(shù)據(jù)包出現(xiàn)了丟幀則需要在第一碼率的基礎(chǔ)上降低第一碼率得到第三碼率,以第三碼率進(jìn)行編碼。若在以第二碼率進(jìn)行編碼過程中出現(xiàn)了丟幀,則需要在第二碼率的基礎(chǔ)上降低第二碼率得到第三碼率,以第三碼率進(jìn)行編碼。
可選地,請(qǐng)參閱圖7,在本實(shí)施例中,將上述兩種情況均納入考慮,則所述第三碼率可通過以下步驟來獲得:
步驟s401,將系統(tǒng)最大碼率重置為計(jì)算得到的所述第一碼率并將系統(tǒng)最低碼率設(shè)置為設(shè)定的所述最低碼率,或?qū)⑾到y(tǒng)最大碼率重置為所述第二碼率并將系統(tǒng)最低碼率設(shè)置為重置后的最低碼率。
步驟s403,將重置后的最大碼率和重新設(shè)置后的最低碼率按第三計(jì)算式:b3=(b’(max)+b”(min))/2計(jì)算得到第三碼率,其中,b3為第三碼率,b’(max)為重置后的最大碼率,b”(min)為重新設(shè)置的最低碼率。
可選地,在本實(shí)施例中,若在以第一碼率進(jìn)行編碼時(shí),出現(xiàn)了丟幀,則將系統(tǒng)最大碼率重置為計(jì)算得到的第一碼率b1,并且將系統(tǒng)最低碼率設(shè)置為設(shè)定的最低碼率b(min),再將重置后的最大碼率和重新設(shè)置后的最低碼率按第三計(jì)算式:b3=(b’(max)+b”(min))/2計(jì)算得到第三碼率,其中,b3為第三碼率,b’(max)為重置后的最大碼率,b”(min)為重新設(shè)置的最低碼率。此時(shí)的b’(max)=b1,b”(min)=b(min)。
若在以第二碼率進(jìn)行編碼時(shí)出現(xiàn)了丟幀,則將系統(tǒng)最大碼率重置為計(jì)算得到的第二碼率,并且將系統(tǒng)最低碼率設(shè)置為重置后的最低碼率。即,若當(dāng)前的第二碼率為b2,表明當(dāng)前的最低碼率為b1,則重置后的最大碼率即為b2,重新設(shè)置的最低碼率即為b1。再將重置后的最大碼率和重新設(shè)置后的最低碼率按第三計(jì)算式:b3=(b’(max)+b”(min))/2計(jì)算得到第三碼率,其中,b3為第三碼率,b’(max)為重置后的最大碼率,b”(min)為重新設(shè)置的最低碼率。此時(shí)的b’(max)=b2,b”(min)=b1。按照此邏輯,可不斷降低編碼碼率,以適應(yīng)于當(dāng)前的網(wǎng)絡(luò)上傳速度,一直到更新后得到的第三碼率與重新設(shè)置的最低碼率之間的差的絕對(duì)值小于等于預(yù)設(shè)值為止,例如100,此時(shí)所得到的第三碼率即為最優(yōu)的碼率,可以以該最優(yōu)碼率對(duì)媒體流進(jìn)行編碼,以避免因出現(xiàn)丟幀而導(dǎo)致的視頻卡頓現(xiàn)象。
在實(shí)施時(shí),例如,在最開始時(shí),設(shè)定的最大碼率b(max)=2000,最低碼率b(min)=0,計(jì)算得到的第一碼率b1=(b(max)+b(min))/2=(2000+0)/2=1000,以1000的第一碼率對(duì)媒體流進(jìn)行編碼。若檢測到此時(shí)未出現(xiàn)丟幀現(xiàn)象,則增大第一碼率,將最低碼率重置為1000,得到的第二碼率為b2=(1000+2000)/2=1500,然后以1500的碼率進(jìn)行編碼。若此時(shí)出現(xiàn)了丟幀,則降低第二碼率得到第三碼率,此時(shí),將系統(tǒng)最大碼率重置為1500,將最低碼率設(shè)置為1000,然后重復(fù)上述步驟,得到第三碼率為b3=(1500+1000)/2=1250,以1250的碼率進(jìn)行編碼。若此時(shí)未出現(xiàn)丟幀,則最低碼率設(shè)置為1250,得到新的第二碼率b2=(1250+1500)/2=1375,然后以1375碼率對(duì)視頻進(jìn)行編碼,若沒有丟幀,則系統(tǒng)當(dāng)前最優(yōu)的碼率就為1375。若出現(xiàn)了丟幀,則系統(tǒng)最優(yōu)碼率就為1250碼率。在滿足退出條件的情況下,可結(jié)束對(duì)碼率的動(dòng)態(tài)調(diào)節(jié),并以該最優(yōu)的碼率進(jìn)行直播。
請(qǐng)參閱圖8,為本發(fā)明實(shí)施例提供的一種碼率自適應(yīng)調(diào)節(jié)裝置110的功能模塊框圖。所述碼率自適應(yīng)調(diào)節(jié)裝置110包括設(shè)定模塊111、第一判斷模塊112、第一修改模塊113、第二修改模塊114、第二判斷模塊115、第三修改模塊116以及退出判斷模塊117。
所述設(shè)定模塊111用于根據(jù)當(dāng)前系統(tǒng)網(wǎng)絡(luò)狀態(tài)設(shè)定最大碼率和最低碼率,根據(jù)所述最大碼率和所述最低碼率計(jì)算得到第一碼率,以所述第一碼率對(duì)傳輸?shù)拿襟w流進(jìn)行編碼。具體地,該設(shè)定模塊111可用于執(zhí)行圖3中所示的步驟s101,具體的操作方法可參考步驟s101的詳細(xì)描述。
所述第一判斷模塊112用于判斷預(yù)設(shè)時(shí)長內(nèi)是否出現(xiàn)丟幀。具體地,該第一判斷模塊112可用于執(zhí)行圖3中所示的步驟s102,具體的操作方法可參考步驟s102的詳細(xì)描述。
所述第一修改模塊113用于在出現(xiàn)丟幀時(shí),降低所述第一碼率得到第三碼率,以所述第三碼率對(duì)傳輸?shù)拿襟w流進(jìn)行編碼。具體地,該第一修改模塊113可用于執(zhí)行圖3中所示的步驟s103,具體的操作方法可參考步驟s103的詳細(xì)描述。
所述第二修改模塊114用于在未出現(xiàn)丟幀時(shí),降低所述第一碼率得到第二碼率,以所述第二碼率對(duì)傳輸?shù)拿襟w流進(jìn)行編碼。具體地,該第二修改模塊114可用于執(zhí)行圖3中所示的步驟s104,具體的操作方法可參考步驟s104的詳細(xì)描述。
所述第二判斷模塊115用于判斷以所述第二碼率進(jìn)行編碼時(shí)是否出現(xiàn)丟幀。具體地,該第二判斷模塊115可用于執(zhí)行圖3中所示的步驟s105,具體的操作方法可參考步驟s105的詳細(xì)描述。
所述第三修改模塊116用于在出現(xiàn)丟幀時(shí),降低所述第二碼率得到第三碼率,以所述第三碼率對(duì)傳輸?shù)拿襟w流進(jìn)行編碼。具體地,該第三修改模塊116可用于執(zhí)行圖3中所示的步驟s106,具體的操作方法可參考步驟s106的詳細(xì)描述。
所述退出判斷模塊117用于根據(jù)得到的所述第三碼率判斷是否滿足退出條件。具體地,該退出判斷模塊117可用于執(zhí)行圖3中所示的步驟s107,具體的操作方法可參考步驟s107的詳細(xì)描述。
請(qǐng)參閱圖9,在本實(shí)施例中,所述碼率自適應(yīng)調(diào)節(jié)裝置110還包括視頻編碼模塊118和音頻編碼模塊119。
所述視頻編碼模塊118用于在視頻編碼線程中,對(duì)獲得的直播圖像進(jìn)行編碼,將編碼后生成的視頻流數(shù)據(jù)包投遞至所述網(wǎng)絡(luò)傳輸線程。具體地,該視頻編碼模塊118可用于執(zhí)行圖4中所示的步驟s201,具體的操作方法可參考步驟s201的詳細(xì)描述。
所述音頻編碼模塊119用于在音頻編碼線程中,對(duì)獲得的直播聲音進(jìn)行編碼,將編碼后生成的音頻流數(shù)據(jù)包投遞至所述網(wǎng)絡(luò)傳輸線程。具體地,該音頻編碼模塊119可用于執(zhí)行圖4中所示的步驟s203,具體的操作方法可參考步驟s203的詳細(xì)描述。
請(qǐng)參閱圖10,在本實(shí)施例中,所述碼率自適應(yīng)調(diào)節(jié)裝置110還包括檢測模塊1110和判定模塊1111。
所述檢測模塊1110用于在網(wǎng)絡(luò)傳輸線程中,檢測待發(fā)送隊(duì)列中的視頻流數(shù)據(jù)包或音頻流數(shù)據(jù)包是否累積達(dá)到預(yù)設(shè)閾值。具體地,該檢測模塊1110可用于執(zhí)行圖5中所示的步驟s301,具體的操作方法可參考步驟s301的詳細(xì)描述。
所述判定模塊1111用于在達(dá)到預(yù)設(shè)閾值時(shí),判定當(dāng)前系統(tǒng)出現(xiàn)丟包,并觸發(fā)丟包邏輯。具體地,該判定模塊1111可用于執(zhí)行圖5中所示的步驟s303,具體的操作方法可參考步驟s303的詳細(xì)描述。
可選地,請(qǐng)參閱圖11,在本實(shí)施例中,所述第二修改模塊114包括重置單元1141以及計(jì)算單元1142。
所述重置單元1141用于將系統(tǒng)最低碼率重置為計(jì)算得到的所述第一碼率。具體地,該重置單元1141可用于執(zhí)行圖6中所示的步驟s1041,具體的操作方法可參考步驟s1041的詳細(xì)描述。
所述計(jì)算單元1142用于將重置后的最低碼率和設(shè)定的所述最大碼率按第二計(jì)算式:b2=(b(max)+b’(min))/2計(jì)算得到第二碼率,其中,b2為第二碼率,b(max)為設(shè)定的最大碼率,b’(min)為重置后的最低碼率。具體地,該計(jì)算單元1142可用于執(zhí)行圖6中所示的步驟s1043,具體的操作方法可參考步驟s1043的詳細(xì)描述。
可選地,請(qǐng)參閱圖12,在本實(shí)施例中,所述碼率自適應(yīng)調(diào)節(jié)裝置110還包括重置模塊1112以及計(jì)算模塊1113。
所述重置模塊1112用于將系統(tǒng)最大碼率重置為計(jì)算得到的所述第一碼率并將系統(tǒng)最低碼率設(shè)置為設(shè)定的所述最低碼率,或?qū)⑾到y(tǒng)最大碼率重置為所述第二碼率并將系統(tǒng)最低碼率設(shè)置為重置后的最低碼率。具體地,該重置模塊1112可用于執(zhí)行圖7中所示的步驟s401,具體的操作方法可參考步驟s401的詳細(xì)描述。
所述計(jì)算模塊1113用于將重置后的最大碼率和重新設(shè)置后的最低碼率按第三計(jì)算式:b3=(b’(max)+b”(min))/2計(jì)算得到第三碼率,其中,b3為第三碼率,b’(max)為重置后的最大碼率,b”(min)為重新設(shè)置的最低碼率。具體地,該計(jì)算模塊1113可用于執(zhí)行圖7中所示的步驟s403,具體的操作方法可參考步驟s403的詳細(xì)描述。
此外,本發(fā)明另一較佳實(shí)施例還提供一種存儲(chǔ)介質(zhì),其上存儲(chǔ)有計(jì)算機(jī)程序,所述計(jì)算機(jī)程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)上述的碼率自適應(yīng)調(diào)節(jié)方法的步驟。
綜上所述,本發(fā)明提供的一種碼率自適應(yīng)調(diào)節(jié)方法、裝置及電子設(shè)備,根據(jù)系統(tǒng)網(wǎng)絡(luò)狀態(tài)得到相應(yīng)的碼率,并利用得到的碼率對(duì)傳輸?shù)拿襟w流進(jìn)行編碼。通過檢測數(shù)據(jù)丟幀情況,根據(jù)數(shù)據(jù)丟幀情況相應(yīng)的增大或降低碼率,利用修改后的碼率對(duì)媒體流進(jìn)行編碼。通過丟幀及碼率自適應(yīng)的調(diào)整,有效地解決了因直播延遲而采用丟幀后,因丟幀而引起的觀看端卡頓的問題。
在本申請(qǐng)所提供的實(shí)施例中,應(yīng)該理解到,所揭露的裝置和方法,也可以通過其它的方式實(shí)現(xiàn)。以上所描述的裝置實(shí)施例僅僅是示意性的,例如,附圖中的流程圖和框圖顯示了根據(jù)本發(fā)明的實(shí)施例的裝置、方法和計(jì)算機(jī)程序產(chǎn)品的可能實(shí)現(xiàn)的體系架構(gòu)、功能和操作。在這點(diǎn)上,流程圖或框圖中的每個(gè)方框可以代表一個(gè)模塊、程序段或代碼的一部分,所述模塊、程序段或代碼的一部分包含一個(gè)或多個(gè)用于實(shí)現(xiàn)規(guī)定的邏輯功能的可執(zhí)行指令。也應(yīng)當(dāng)注意,在有些作為替換的實(shí)現(xiàn)方式中,方框中所標(biāo)注的功能也可以以不同于附圖中所標(biāo)注的順序發(fā)生。例如,兩個(gè)連續(xù)的方框?qū)嶋H上可以基本并行地執(zhí)行,它們有時(shí)也可以按相反的順序執(zhí)行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個(gè)方框、以及框圖和/或流程圖中的方框的組合,可以用執(zhí)行規(guī)定的功能或動(dòng)作的專用的基于硬件的系統(tǒng)來實(shí)現(xiàn),或者可以用專用硬件與計(jì)算機(jī)指令的組合來實(shí)現(xiàn)。
需要說明的是,在本文中,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個(gè)……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設(shè)備中還存在另外的相同要素。
以上所述僅為本發(fā)明的優(yōu)選實(shí)施例而已,并不用于限制本發(fā)明,對(duì)于本領(lǐng)域的技術(shù)人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。應(yīng)注意到:相似的標(biāo)號(hào)和字母在下面的附圖中表示類似項(xiàng),因此,一旦某一項(xiàng)在一個(gè)附圖中被定義,則在隨后的附圖中不需要對(duì)其進(jìn)行進(jìn)一步定義和解釋。
以上所述,僅為本發(fā)明的具體實(shí)施方式,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)以所述權(quán)利要求的保護(hù)范圍為準(zhǔn)。