本發(fā)明涉及網(wǎng)絡(luò)技術(shù),尤其是涉及一種在服務(wù)器中用于自適應(yīng)提供多碼率流媒體的方法以及在服務(wù)器中用于自適應(yīng)提供多碼率流媒體的裝置。
背景技術(shù):
利用流媒體技術(shù)可以在網(wǎng)絡(luò)中以流的方式傳輸音頻以及視頻等媒體內(nèi)容。由于流媒體技術(shù)具有實時性強(qiáng)的特點而被廣泛應(yīng)用于視頻點播、視頻會議、遠(yuǎn)程教育、遠(yuǎn)程醫(yī)療以及在線直播等系統(tǒng)中。
流媒體服務(wù)器為用戶提供多碼率流媒體服務(wù)的方式通常包括如下兩種:
方式一、用戶根據(jù)其網(wǎng)絡(luò)情況選擇“流暢”、“清晰”或者“高清”等播放選項,服務(wù)器根據(jù)用戶選擇的播放選項向該用戶提供相應(yīng)碼率的媒體流。
方式二、利用HLS(HTTP Live Streaming,HTTP直播流)自適應(yīng)的為用戶提供多碼率流媒體,具體的,流媒體服務(wù)器向用戶下發(fā)的媒體流由視頻片組成,且每個視頻片包括可播放10秒媒體內(nèi)容的多媒體數(shù)據(jù),流媒體服務(wù)器可以根據(jù)網(wǎng)絡(luò)質(zhì)量自適應(yīng)的為用戶不同碼率的媒體流。
發(fā)明人在實現(xiàn)本發(fā)明過程中發(fā)現(xiàn),上述方式一由于是根據(jù)用戶選擇的播放選項為用戶推送相應(yīng)碼率的媒體流,因此,無法自適應(yīng)的為用戶提供多碼率流媒體,智能化程度有所欠缺;另外,用戶通常是在播放出現(xiàn)停頓或者馬賽克等播放不正常的情況下更換播放選項,因此,上述方式一會對用戶體驗造成不良影響。上述方式二能夠解決方式一存在的技術(shù)問題,但是,方式二中的視頻片的播放時長會使碼率切換存在較大的延時。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的是,提供一種在服務(wù)器中用于自適應(yīng)提供多碼率流媒體的方法及裝置。
根據(jù)本發(fā)明的一個方面,提供一種在服務(wù)器中用于自適應(yīng)提供多碼率流媒體的方法,包括:獲取網(wǎng)絡(luò)質(zhì)量信息;在根據(jù)所述網(wǎng)絡(luò)質(zhì)量信息確定出需要碼率切換的情況下,從所有隊列中選擇一個隊列作為發(fā)送隊列,其中,不同隊列中存儲有針對同一媒體內(nèi)容的不同碼率的多媒體數(shù)據(jù)幀;從所述發(fā)送隊列中讀取多媒體數(shù)據(jù)幀并下發(fā);根據(jù)已下發(fā)的多媒體數(shù)據(jù)幀刪除各隊列中相應(yīng)的多媒體數(shù)據(jù)幀。
根據(jù)本發(fā)明的另一個方面,提供一種在服務(wù)器中用于自適應(yīng)提供多碼率流媒體的裝置,且所述自適應(yīng)提供多碼率流媒體的裝置包括:用于獲取網(wǎng)絡(luò)質(zhì)量信息的裝置;用于在根據(jù)所述網(wǎng)絡(luò)質(zhì)量信息確定出需要碼率切換的情況下,從所有隊列中選擇一個隊列作為發(fā)送隊列的裝置,其中,不同隊列中存儲有針對同一媒體內(nèi)容的不同碼率的多媒體數(shù)據(jù)幀;用于從所述發(fā)送隊列中讀取出多媒體數(shù)據(jù)幀并下發(fā),且其他隊列中的與已下發(fā)的多媒體數(shù)據(jù)幀具有同一媒體內(nèi)容的多媒體數(shù)據(jù)幀均被刪除的裝置。
與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點:本發(fā)明通過設(shè)置多個隊列,并使各隊列所對應(yīng)的碼率不同,使同一媒體內(nèi)容的不同碼率的多媒體數(shù)據(jù)幀可以各自設(shè)置于不同的隊列中,這樣,在根據(jù)網(wǎng)絡(luò)質(zhì)量信息確定出需要碼率切換時,本發(fā)明可以通過從所有隊列中選取出一個與當(dāng)前網(wǎng)絡(luò)質(zhì)量更匹配的碼率所對應(yīng)的隊列,并從該選取的隊列中讀取多媒體數(shù)據(jù)幀并下發(fā),可以快速實現(xiàn)碼率切換;本發(fā)明通過針對當(dāng)前下發(fā)的多媒體數(shù)據(jù)幀,刪除各隊列中相應(yīng)的多媒體數(shù)據(jù)幀,使各隊列中位于隊首的多媒體數(shù)據(jù)幀均是針對同一媒體內(nèi)容的不同碼率的多媒體數(shù)據(jù)幀,這樣,無論何時確定出需要碼率切換,本發(fā)明都能夠在快速及時的實現(xiàn)碼率切換的同時,保證碼率切換操作不會影響媒體內(nèi)容的連貫性;由此可知,本發(fā)明提供的技術(shù)方案在實現(xiàn)了自適應(yīng)的碼率切換的同時,降低了碼率切換延時,并實現(xiàn)了快速無縫的自適應(yīng)碼率切換。
附圖說明
通過閱讀參照以下附圖所作的對非限制性實施例所作的詳細(xì)描述,本發(fā)明的其它特征、目的和優(yōu)點將會變得更明顯:
圖1為本發(fā)明實施例一的在服務(wù)器中用于自適應(yīng)提供多碼率流媒體的方法的流程圖;
圖2為本發(fā)明實施例二的在視頻直播應(yīng)用場景中,流媒體服務(wù)器為用戶自適應(yīng)提供多碼率流媒體的方法示意圖;
圖3為本發(fā)明實施例四的在服務(wù)器中用于自適應(yīng)提供多碼率流媒體的裝置的結(jié)構(gòu)示意圖。
附圖中相同或相似的附圖標(biāo)記代表相同或相似的部件。
具體實施方式
在更加詳細(xì)地討論示例性實施例之前,應(yīng)當(dāng)提到的是,一些示例性實施例被描述成作為流程圖描繪的處理或方法。雖然流程圖將各項操作描述成順序的處理,但是,其中的許多操作可以被并行地、并發(fā)地或者同時實施。此外,各項操作的執(zhí)行順序可以被重新安排。當(dāng)其操作完成時所述處理可以被終止,但是還可以具有未包括在附圖中的附加步驟。所述處理可以對應(yīng)于方法、函數(shù)、規(guī)程、子例程、子程序等等。
在上下文中所稱“計算機(jī)設(shè)備”,也稱為“電腦”,是指可以通過運行預(yù)定程序或指令來執(zhí)行數(shù)值計算和/或邏輯計算等預(yù)定處理過程的智能電子設(shè)備,其可以包括處理器與存儲器,由處理器執(zhí)行在存儲器中預(yù)存的存續(xù)指令來執(zhí)行預(yù)定處理過程,或者是由ASIC、FPGA、DSP等硬件執(zhí)行預(yù)定處理過程,或者是由上述二者組合來實現(xiàn)。計算機(jī)設(shè)備包括但不限于服務(wù)器、個人電腦以及筆記本電腦等。
所述計算機(jī)設(shè)備包括用戶設(shè)備與網(wǎng)絡(luò)設(shè)備。其中,所述用戶設(shè)備包括但不限于電腦、智能手機(jī)、PDA等;所述網(wǎng)絡(luò)設(shè)備包括但不限于單個網(wǎng)絡(luò)服務(wù)器、多個網(wǎng)絡(luò)服務(wù)器組成的服務(wù)器組或基于云計算(Cloud Computing)的由大量計算機(jī)或網(wǎng)絡(luò)服務(wù)器構(gòu)成的云,其中,云計算是分布式計算的一種,由一群松散耦合的計算機(jī)集組成的一個超級虛擬計算機(jī)。其中,所述計算機(jī)設(shè)備可單獨運行來實現(xiàn)本發(fā)明,也可接入網(wǎng)絡(luò)并通過與網(wǎng)絡(luò)中的其他計算機(jī)設(shè)備的交互操作來實現(xiàn)本發(fā)明。其中,所述計算機(jī)設(shè)備所處的網(wǎng)絡(luò)包括但不限于互聯(lián)網(wǎng)、廣域網(wǎng)、城域網(wǎng)、局域網(wǎng)、VPN網(wǎng)絡(luò)等。
需要說明的是,所述用戶設(shè)備、網(wǎng)絡(luò)設(shè)備和網(wǎng)絡(luò)等僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的計算機(jī)設(shè)備或網(wǎng)絡(luò)如可適用于本發(fā)明,也應(yīng)包含在本發(fā)明保護(hù)范圍以內(nèi),并以引用方式包含于此。
后面所討論的方法(其中一些通過流程圖示出)可通過硬件、軟件、固件、中間件、微代碼、硬件描述語言或者其任意組合來實施。當(dāng)用軟件、固件、中間件或微代碼來實施時,用以實施必要任務(wù)的程序代碼或代碼段可以被存儲在機(jī)器或計算機(jī)可讀介質(zhì)(比如存儲介質(zhì))中。(一個或多個)處理器可以實施必要的任務(wù)。
這里所公開的具體結(jié)構(gòu)和功能細(xì)節(jié)僅僅是代表性的,并且是用于描述本發(fā)明的示例性實施例的目的。但是,本發(fā)明可以通過許多替換形式來具體實現(xiàn),并且不應(yīng)當(dāng)被解釋成僅僅受限于這里所闡述的實施例。
應(yīng)當(dāng)理解的是,雖然在這里可能使用了術(shù)語“第一”、“第二”等等來描述各個單元,但是這些單元不應(yīng)當(dāng)受這些術(shù)語限制。使用這些術(shù)語僅僅是為了將一個單元與另一個單元進(jìn)行區(qū)分。舉例來說,在不背離示例性實施例的范圍的情況下,第一單元可以被稱為第二單元,并且類似地第二單元可以被稱為第一單元。這里所使用的術(shù)語“和/或”包括其中一個或更多所列出的相關(guān)聯(lián)項目的任意和所有組合。
應(yīng)當(dāng)理解的是,當(dāng)一個單元被稱為“連接”或者“耦合”到另一個單元時,其可以直接連接或耦合到所述另一單元,或者可以存在中間單元。與此相對,當(dāng)一個單元被稱為“直接連接”或“直接耦合”到另一單元時,則不存在中間單元。應(yīng)當(dāng)按照類似的方式來解釋被用于描述單元之間的關(guān)系的其他詞語(例如“處于...之間”相比于“直接處于...之間”,“與...鄰近”相比于“與...直接鄰近”等等)。
這里所使用的術(shù)語僅僅是為了描述具體實施例而不意圖限制示例性實施例。除非上下文明確地另有所指,否則這里所使用的單數(shù)形式“一個”、“一項”還意圖包括復(fù)數(shù)。還應(yīng)當(dāng)理解的是,這里所使用的術(shù)語“包括”和/或“包含”規(guī)定所陳述的特征、整數(shù)、步驟、操作、單元和/或組件的存在,而不排除存在或添加一個或更多其他特征、整數(shù)、步驟、操作、單元、組件和/或其組合。
還應(yīng)當(dāng)提到的是,在一些替換實現(xiàn)方式中,所提到的功能/動作可以按照不同于附圖中標(biāo)示的順序發(fā)生。舉例來說,取決于所涉及的功能/動作,相繼示出的兩幅圖實際上可以基本上同時執(zhí)行或者有時可以按照相反的順序來執(zhí)行。
下面結(jié)合附圖對本發(fā)明作進(jìn)一步詳細(xì)描述。
實施例一、在服務(wù)器中用于自適應(yīng)提供多碼率流媒體的方法。
本實施例是利用多個隊列來為用戶提供自適應(yīng)多碼率流媒體服務(wù)的,且隊列的數(shù)量與碼率的數(shù)量相適應(yīng)。本實施例的方法由流媒體服務(wù)器執(zhí)行。本實施例中的隊列是指能夠在邏輯上順序存儲多個多媒體數(shù)據(jù)幀的一段存儲空間,如本實施例中的隊列可以通過鏈表或者FIFO(First Input First Output,先入先出)隊列等方式來實現(xiàn)。
本實施例的在服務(wù)器中用于自適應(yīng)提供多碼率流媒體的方法的流程如圖1所示。圖1中,本實施例的方法主要包括:S100、S110以及S120。
S100、獲取網(wǎng)絡(luò)質(zhì)量信息。
作為示例,本實施例中的網(wǎng)絡(luò)質(zhì)量信息可以包括:網(wǎng)絡(luò)傳輸延時、丟包率以及網(wǎng)絡(luò)抖動信息等。優(yōu)選的,本實施例中的網(wǎng)絡(luò)質(zhì)量信息可以使用隊列的數(shù)據(jù)充盈信息來體現(xiàn),隊列的數(shù)據(jù)充盈信息即表示數(shù)據(jù)在隊列中的存儲情況的信息。
作為示例,本實施例中的隊列的數(shù)據(jù)充盈信息可以具體為隊列中存儲的多媒體數(shù)據(jù)幀所占用的存儲空間大小與隊列的總存儲空間大小的比值(也可以稱為比例或者百分比等,且可以統(tǒng)稱為隊列的數(shù)據(jù)充盈率),隊列的數(shù)據(jù)充盈信息也可以具體為隊列中存儲的多媒體數(shù)據(jù)幀所占用的存儲空間大小或者隊列中的閑置存儲空間大小等能夠反應(yīng)網(wǎng)絡(luò)質(zhì)量的隊列參數(shù)。
作為示例,本實施例可以定時(如1秒或者小于1秒等)獲取所有隊列中的任意一個隊列的數(shù)據(jù)充盈信息,以根據(jù)該隊列的數(shù)據(jù)充盈信息及時的獲知當(dāng)前網(wǎng)絡(luò)狀態(tài)。上述任意一個隊列可以是隨機(jī)確定出的一個隊列,也可以是預(yù)先確定的一個固定的隊列,即本實施例可以隨機(jī)獲取某一個隊列的數(shù)據(jù)充盈信息,也可以固定獲取某一個隊列(如第一個隊列或者第二個隊列)的數(shù)據(jù)充盈信息。優(yōu)選的,本實施例可以定時獲取隊列中的發(fā)送隊列的數(shù)據(jù)充盈信息(如隊列的數(shù)據(jù)充盈率),從而根據(jù)發(fā)送隊列的數(shù)據(jù)充盈信息及時的獲知當(dāng)前網(wǎng)絡(luò)狀態(tài)。本實施例中的發(fā)送隊列是指當(dāng)前正在被發(fā)送給終端設(shè)備的多媒體數(shù)據(jù)幀所屬的隊列,也就是說,雖然本實施例針對不同碼率的多媒體數(shù)據(jù)幀分別設(shè)置了相應(yīng)的隊列,且每一個隊列中均存儲有相應(yīng)碼率的多媒體數(shù)據(jù)幀,但是,針對任一時刻而言,只有一個隊列中存儲的多媒體數(shù)據(jù)幀被發(fā)送給終端設(shè)備,該隊列即為發(fā)送隊列。
S110、在根據(jù)網(wǎng)絡(luò)質(zhì)量信息確定出需要碼率切換的情況下,從所有隊列中選擇一個隊列作為發(fā)送隊列。
作為示例,本實施例設(shè)置有多個隊列,每一個隊列均對應(yīng)一種碼率,且不同隊列對應(yīng)不同碼率。每一個隊列中都存儲有多媒體數(shù)據(jù)幀,且所有隊列中位于隊首的多媒體數(shù)據(jù)幀所對應(yīng)的媒體內(nèi)容是完全相同的;一種優(yōu)選的方式,所有隊列中存儲的多媒體數(shù)據(jù)幀的媒體內(nèi)容是完全相同的,即從媒體內(nèi)容的角度來說,所有隊列中存儲的多媒體數(shù)據(jù)幀是同步的,也就是說,針對同一媒體內(nèi)容而言,不同碼率的多媒體數(shù)據(jù)幀被設(shè)置在不同隊列中。本實施例中的媒體內(nèi)容可以為視頻畫面,同一媒體內(nèi)容即同一視頻畫面。
作為示例,本實施例中的所有隊列的存儲空間大小通常會存在差異,然而,所有隊列的存儲空間所能夠存儲的多媒體數(shù)據(jù)幀的數(shù)量通常相同。在本實施例中的所有隊列的存儲空間所能夠存儲的多媒體數(shù)據(jù)幀的數(shù)量相同的情況下,由于不同隊列存儲不同碼率的多媒體數(shù)據(jù)幀,而不同碼率的多媒體數(shù)據(jù)幀所占用的存儲空間存在差異,因此,本實施例中的所有隊列的存儲空間大小會存在差異,且對應(yīng)高碼率的隊列的存儲空間大小會高于對應(yīng)低碼率的隊列的存儲空間大小。當(dāng)然,本實施例并不排除所有隊列具有相同存儲空間的可能性。各隊列的存儲空間大小可以根據(jù)實際需求來設(shè)置,然而,各隊列的存儲空間大小均不會小于兩個多媒體數(shù)據(jù)幀所占用的存儲空間,即每一個隊列均至少能夠存儲兩個多媒體數(shù)據(jù)幀。本實施例中的多媒體數(shù)據(jù)幀可以包括關(guān)鍵幀和該關(guān)鍵幀對應(yīng)的所有非關(guān)鍵幀。
作為示例,本實施例中各隊列中存儲的多媒體數(shù)據(jù)幀可以采用GOP(Group of Pictures,畫面組)結(jié)構(gòu),如在本實施例的多媒體數(shù)據(jù)幀采用基于MPEG(Moving Picture Experts Group,動態(tài)圖像專家組)編碼格式的多媒體數(shù)據(jù)幀的情況下,可以由一個I幀(即內(nèi)部編碼幀,也可以稱為關(guān)鍵幀)、多個P幀(即前向預(yù)測幀)以及多個B幀(即雙向內(nèi)插幀)形成一個GOP,一個GOP即為一個多媒體數(shù)據(jù)幀。本實施例中的多媒體數(shù)據(jù)幀中的關(guān)鍵幀(如I幀)通常是一個完整的畫面,而其他幀(如P幀和B幀)主要用于記錄相對于關(guān)鍵幀的變化,沒有關(guān)鍵幀,P幀和B幀則無法解碼。
作為示例,本實施例的不同隊列中存儲的所有多媒體數(shù)據(jù)幀具有相同的編碼格式,如不同隊列中存儲的所有多媒體數(shù)據(jù)幀具有相同的GOP結(jié)構(gòu)。另外,不同隊列中存儲的多媒體數(shù)據(jù)幀通常是同步更新的,如同時刪除針對同一媒體內(nèi)容的多媒體數(shù)據(jù)幀,再如在同時刪除各隊列中的針對同一媒體內(nèi)容的多媒體數(shù)據(jù)幀的情況下,同時在各隊列中同步增加針對同一媒體內(nèi)容的多媒體數(shù)據(jù)幀。當(dāng)然,本實施例并不排除以非同步的方式在各隊列中增加針對同一媒體內(nèi)容的多媒體數(shù)據(jù)幀的可能性,但是,必須同時刪除針對同一媒體內(nèi)容的多媒體數(shù)據(jù)幀,以保證所有隊列中位于隊首的多媒體數(shù)據(jù)幀所對應(yīng)的媒體內(nèi)容是完全相同的。
作為示例,本實施例在各隊列中同步增加針對同一媒體內(nèi)容的多媒體數(shù)據(jù)幀的一個具體的例子為:本實施例為每一種碼率均設(shè)置了一個緩存,如在多媒體數(shù)據(jù)幀采用GOP結(jié)構(gòu)的情況下,本實施例為每一種碼率分別設(shè)置了一個GOP緩存;首先,針對編碼處理后的各多媒體數(shù)據(jù)幀(如針對MPEG編碼處理后的各多媒體數(shù)據(jù)幀)進(jìn)行轉(zhuǎn)碼處理,以獲得多個不同碼率的多媒體數(shù)據(jù)幀,然后,將不同碼率的多媒體數(shù)據(jù)幀同時寫入相應(yīng)的GOP緩存中,如在各GOP緩存均為空(可以由于GOP緩存中的多媒體數(shù)據(jù)幀被放入隊列而形成GOP緩存為空,也可以由于清空操作而使GOP緩存為空)的情況下,將轉(zhuǎn)碼處理后的不同碼率的多媒體數(shù)據(jù)幀同時寫入相應(yīng)的GOP緩存中;之后,同時從各GOP緩存中讀取相同數(shù)量的多媒體數(shù)據(jù)幀,并將讀取出的相同數(shù)量的多媒體數(shù)據(jù)幀分別存儲于相應(yīng)的隊列中,從而使各隊列中同步增加了針對同一媒體內(nèi)容的多媒體數(shù)據(jù)幀。
作為示例,在本實施例中的網(wǎng)絡(luò)質(zhì)量信息包括隊列的數(shù)據(jù)充盈率,并且在所有隊列各自的存儲空間所能存儲的多媒體數(shù)據(jù)幀的數(shù)量均相同的情況下,本實施例的根據(jù)網(wǎng)絡(luò)質(zhì)量信息確定出需要碼率切換的過程可以為:預(yù)先針對所有隊列設(shè)置兩個統(tǒng)一的閾值,即第一閾值和第二閾值,從預(yù)先維護(hù)的信息中獲取各隊列的總存儲空間大小,并定時獲取所有隊列中的任一隊列中當(dāng)前存儲的所有多媒體數(shù)據(jù)幀所占用的總存儲空間大小(如定時獲取發(fā)送隊列當(dāng)前存儲的所有多媒體數(shù)據(jù)幀所占用的總存儲空間大小),然后,根據(jù)上述獲取到的隊列中當(dāng)前存儲的所有多媒體數(shù)據(jù)幀所占用的總存儲空間大小和該隊列的總存儲空間大小計算該隊列的數(shù)據(jù)充盈率,在判斷出該隊列的數(shù)據(jù)充盈率高于第一閾值時,確定出需要向低碼率切換;而在判斷出該隊列的數(shù)據(jù)充盈率低于第二閾值時,確定出需要向高碼率切換。上述第一閾值通常遠(yuǎn)大于第二閾值,如第一閾值為80%,而第二閾值為20%。
作為示例,在本實施例中的網(wǎng)絡(luò)質(zhì)量信息包括隊列的數(shù)據(jù)充盈率,并且在所有隊列各自的存儲空間所能存儲的多媒體數(shù)據(jù)幀的數(shù)量不相同的情況下,本實施例的根據(jù)網(wǎng)絡(luò)質(zhì)量信息確定出需要碼率切換的過程可以為:預(yù)先為每一個隊列分別設(shè)置兩個閾值,即每一個隊列均對應(yīng)各自的第一閾值和第二閾值,不同隊列各自對應(yīng)的第一閾值通常不相同,同樣的,不同隊列各自對應(yīng)的第二閾值通常也不相同;從預(yù)先維護(hù)的信息中獲取各隊列的總存儲空間大小以及各隊列自身對應(yīng)的第一閾值和第二閾值,定時獲取所有隊列中的任一隊列中當(dāng)前存儲的所有多媒體數(shù)據(jù)幀所占用的總存儲空間大小(如定時獲取發(fā)送隊列當(dāng)前存儲的所有多媒體數(shù)據(jù)幀所占用的總存儲空間大小),并根據(jù)上述獲取到的隊列中當(dāng)前存儲的所有多媒體數(shù)據(jù)所占用的總存儲空間大小和該隊列的總存儲空間大小計算該隊列的數(shù)據(jù)充盈率,在判斷出該隊列的數(shù)據(jù)充盈率高于該隊列對應(yīng)的第一閾值時,確定出需要向低碼率切換;而在判斷出該隊列的數(shù)據(jù)充盈率低于該隊列所對應(yīng)的第二閾值時,確定出需要向高碼率切換。上述第一閾值通常遠(yuǎn)大于第二閾值,如第一閾值為80%,而第二閾值為20%。
作為示例,在本實施例中的網(wǎng)絡(luò)質(zhì)量信息包括隊列中當(dāng)前存儲的所有多媒體數(shù)據(jù)幀所占用的總存儲空間大小的情況下,本實施例的根據(jù)網(wǎng)絡(luò)質(zhì)量信息確定出需要碼率切換的過程可以具體為:無論所有隊列各自的存儲空間所能夠存儲的多媒體數(shù)據(jù)幀的數(shù)量是否相同,均預(yù)先為每一個隊列分別設(shè)置兩個閾值,即每一個隊列均對應(yīng)各自的第三閾值和第四閾值,且不同隊列所對應(yīng)的第三閾值通常不相同,同樣的,不同隊列所對應(yīng)的第四閾值通常也不相同;從預(yù)先維護(hù)的信息中獲取各隊列分別對應(yīng)的第三閾值和第四閾值,定時獲取所有隊列中的任一隊列中當(dāng)前存儲的所有多媒體數(shù)據(jù)幀所占用的總存儲空間大小(如定時獲取發(fā)送隊列當(dāng)前存儲的所有多媒體數(shù)據(jù)幀所占用的總存儲空間大小),并將上述獲取到的隊列中當(dāng)前存儲的所有多媒體數(shù)據(jù)幀所占用的總存儲空間大小與該隊列所對應(yīng)的第三閾值和第四閾值進(jìn)行比較,在比較的結(jié)果為上述獲取到的隊列中當(dāng)前存儲的所有多媒體數(shù)據(jù)幀所占用的總存儲空間大小大于該隊列所對應(yīng)的第三閾值時,確定出需要向低碼率切換;而在比較的結(jié)果為上述獲取到的隊列中當(dāng)前存儲的所有多媒體數(shù)據(jù)幀所占用的總存儲空間大小小于該隊列所對應(yīng)的第四閾值時,確定出需要向高碼率切換。上述第三閾值通常遠(yuǎn)大于第四閾值。
作為示例,在本實施例中的網(wǎng)絡(luò)質(zhì)量信息包括隊列當(dāng)前閑置存儲空間大小的情況下,本實施例的根據(jù)網(wǎng)絡(luò)質(zhì)量信息確定出需要碼率切換的過程可以為:無論所有隊列各自的存儲空間所能夠存儲的多媒體數(shù)據(jù)幀的數(shù)量是否相同,均預(yù)先為每一個隊列分別設(shè)置兩個閾值,即每一個隊列均對應(yīng)各自的第五閾值以及第六閾值,且不同隊列各自對應(yīng)的第五閾值通常不相同,同樣的,不同隊列各自對應(yīng)的第六閾值通常也不相同;從預(yù)先維護(hù)的信息中獲取各隊列各自對應(yīng)的第五閾值和第六閾值,定時獲取所有隊列中的任一隊列當(dāng)前閑置存儲空間大小(如定時獲取發(fā)送隊列當(dāng)前閑置存儲空間大小),并將上述獲取到的隊列當(dāng)前閑置存儲空間大小與該隊列所對應(yīng)的第五閾值和第六閾值進(jìn)行比較,在比較的結(jié)果為上述獲取到的隊列當(dāng)前閑置存儲空間大小大于上述獲取到的第五閾值時,確定出需要向高碼率切換;而在比較的結(jié)果為上述獲取到的隊列當(dāng)前閑置存儲空間大小小于第六閾值時,確定出需要向低碼率切換。上述第五閾值通常遠(yuǎn)小于第六閾值。
作為示例,為避免出現(xiàn)由于網(wǎng)絡(luò)抖動等原因而造成的頻繁碼率切換的現(xiàn)象,本實施例可以在判斷是否需要碼率切換的過程中,增加控制碼率頻繁切換的限制條件,也就是說,本實施例可以根據(jù)網(wǎng)絡(luò)質(zhì)量信息以及預(yù)先設(shè)置的碼率切換的時間限制條件確定出需要碼率切換。上述預(yù)先設(shè)置的碼率切換的時間限制條件可以具體為當(dāng)前時間距離前一次碼率切換時間超過預(yù)定時長。
作為示例,本實施例根據(jù)網(wǎng)絡(luò)質(zhì)量信息和預(yù)先設(shè)置的碼率切換的時間限制條件確定出需要碼率切換的第一個具體例子為:在所有隊列各自的存儲空間所能夠存儲的多媒體數(shù)據(jù)幀的數(shù)量均相同的情況下,預(yù)先針對所有隊列設(shè)置兩個統(tǒng)一的閾值,即第一閾值和第二閾值,從預(yù)先維護(hù)的信息中獲取隊列的總存儲空間大小、預(yù)定時長以及前一次碼率切換的時間,并定時獲取所有隊列中的任一隊列中當(dāng)前存儲的所有多媒體數(shù)據(jù)幀所占用的總存儲空間大小,然后,根據(jù)上述獲取到的任一隊列中當(dāng)前存儲的所有多媒體數(shù)據(jù)幀所占用的總存儲空間大小和該隊列的總存儲空間大小計算隊列的數(shù)據(jù)充盈率,在判斷出該數(shù)據(jù)充盈率高于第一閾值且當(dāng)前時間與前一次碼率切換的時間之差超過預(yù)定時長時,確定出需要向低碼率切換;而在判斷出該數(shù)據(jù)充盈率低于第二閾值且當(dāng)前時間與前一次碼率切換的時間之差超過預(yù)定時長時,確定出需要向高碼率切換。
作為示例,本實施例根據(jù)網(wǎng)絡(luò)質(zhì)量信息和預(yù)先設(shè)置的碼率切換的時間限制條件確定出需要碼率切換的第二個具體例子為:在所有隊列各自的存儲空間所能夠存儲的多媒體數(shù)據(jù)幀的數(shù)量不相同的情況下,預(yù)先針對每一個隊列分別設(shè)置兩個閾值,即每一個隊列均對應(yīng)各自的第一閾值和第二閾值,不同隊列各自對應(yīng)的第一閾值通常不相同,同樣的,不同隊列各自對應(yīng)的第二閾值通常也不相同;從預(yù)先維護(hù)的信息中獲取各隊列的總存儲空間大小、各隊列各自對應(yīng)的第一閾值和第二閾值、預(yù)定時長以及前一次碼率切換的時間,定時獲取所有隊列中的任一隊列中當(dāng)前存儲的所有多媒體數(shù)據(jù)幀所占用的總存儲空間大小(優(yōu)選的,定時獲取發(fā)送隊列當(dāng)前存儲的所有多媒體數(shù)據(jù)幀所占用的總存儲空間大小),并根據(jù)上述獲取到的隊列中當(dāng)前存儲的所有多媒體數(shù)據(jù)所占用的總存儲空間大小和該隊列的總存儲空間大小計算隊列的數(shù)據(jù)充盈率,在判斷出該數(shù)據(jù)充盈率高于該隊列對應(yīng)的第一閾值且當(dāng)前時間與前一次碼率切換的時間之差超過預(yù)定時長時,確定出需要向低碼率切換;而在判斷出該數(shù)據(jù)充盈率低于該隊列所對應(yīng)的第二閾值且當(dāng)前時間與前一次碼率切換的時間之差超過預(yù)定時長時,確定出需要向高碼率切換。上述第一閾值通常遠(yuǎn)大于第二閾值,如第一閾值為80%,而第二閾值為20%。
作為示例,本實施例根據(jù)網(wǎng)絡(luò)質(zhì)量信息和預(yù)先設(shè)置的碼率切換的時間限制條件確定出需要碼率切換的第三個具體例子為:預(yù)先針對每一個隊列分別設(shè)置兩個閾值,即每一個隊列均對應(yīng)各自的第三閾值和第四閾值,且不同隊列所對應(yīng)的第三閾值通常不相同,同樣的,不同隊列所對應(yīng)的第四閾值通常也不相同;從預(yù)先維護(hù)的信息中獲取各隊列分別對應(yīng)的第三閾值和第四閾值、預(yù)定時長以及前一次碼率切換的時間,定時獲取所有隊列中的任一隊列中當(dāng)前存儲的所有多媒體數(shù)據(jù)幀所占用的總存儲空間大小(優(yōu)選的,可以定時獲取發(fā)送隊列當(dāng)前存儲的所有多媒體數(shù)據(jù)幀所占用的總存儲空間大小),并將上述獲取到的隊列中當(dāng)前存儲的所有多媒體數(shù)據(jù)幀所占用的總存儲空間大小與該隊列所對應(yīng)的第三閾值和第四閾值進(jìn)行比較,在比較的結(jié)果為上述獲取到的隊列中當(dāng)前存儲的所有多媒體數(shù)據(jù)幀所占用的總存儲空間大小大于該隊列所對應(yīng)的第三閾值且當(dāng)前時間與前一次碼率切換的時間之差超過預(yù)定時長時,確定出需要向低碼率切換;而在比較的結(jié)果為上述獲取到的隊列中當(dāng)前存儲的所有多媒體數(shù)據(jù)幀所占用的總存儲空間大小小于該隊列所對應(yīng)的第四閾值且當(dāng)前時間與前一次碼率切換的時間之差超過預(yù)定時長時,確定出需要向高碼率切換。上述第三閾值通常遠(yuǎn)大于第四閾值。
作為示例,本實施例根據(jù)網(wǎng)絡(luò)質(zhì)量信息和預(yù)先設(shè)置的碼率切換的時間限制條件確定出需要碼率切換的第四個具體例子為:預(yù)先針對每一個隊列分別設(shè)置兩個閾值,即每一個隊列均對應(yīng)各自的第五閾值以及第六閾值,且不同隊列各自對應(yīng)的第五閾值通常不相同,同樣的,不同隊列各自對應(yīng)的第六閾值通常也不相同;從預(yù)先維護(hù)的信息中獲取各隊列各自對應(yīng)的第五閾值和第六閾值、預(yù)定時長以及前一次碼率切換的時間,定時獲取所有隊列中的任一隊列當(dāng)前閑置存儲空間大小(優(yōu)選的,可以定時獲取發(fā)送隊列當(dāng)前閑置存儲空間大小),并將上述獲取到的隊列當(dāng)前閑置存儲空間大小與該隊列所對應(yīng)的第五閾值和第六閾值進(jìn)行比較,在比較的結(jié)果為上述獲取到的隊列當(dāng)前閑置存儲空間大小大于上述獲取到的第五閾值且當(dāng)前時間與前一次碼率切換的時間之差超過預(yù)定時長時,確定出需要向高碼率切換;而在比較的結(jié)果為上述獲取到的隊列當(dāng)前閑置存儲空間大小小于第六閾值且當(dāng)前時間與前一次碼率切換的時間之差超過預(yù)定時長時,確定出需要向低碼率切換。上述第五閾值通常遠(yuǎn)小于第六閾值。
需要特別說明的是,本實施例在確定出需要向低碼率切換時,如果切換前的發(fā)送隊列的碼率已經(jīng)是所有隊列的碼率中的最低碼率,則切換后的新的發(fā)送隊列仍然為切換前的發(fā)送隊列,而如果切換前的發(fā)送隊列的碼率并不是所有隊列的碼率中的最低碼率,則應(yīng)從碼率低于切換前的發(fā)送隊列的碼率的所有隊列中選擇一個隊列作為發(fā)送隊列,如從碼率低于切換前的發(fā)送隊列的碼率的所有隊列中選擇碼率最低的隊列作為發(fā)送隊列。本實施例在確定出需要向高碼率切換時,如果切換前的發(fā)送隊列的碼率已經(jīng)是所有隊列的碼率中的最高碼率,則切換后的新的發(fā)送隊列仍然為切換前的發(fā)送隊列,而如果切換前的發(fā)送隊列的碼率并不是所有隊列的碼率中的最高碼率,則應(yīng)從碼率高于切換前的發(fā)送隊列的碼率的所有隊列中選擇一個隊列作為發(fā)送隊列,如從碼率高于切換前的發(fā)送隊列的碼率的所有隊列中選擇碼率最高的隊列作為發(fā)送隊列。
S120、從發(fā)送隊列中讀取出多媒體數(shù)據(jù)幀并下發(fā),且其他隊列中的與已下發(fā)的多媒體數(shù)據(jù)幀具有同一媒體內(nèi)容的多媒體數(shù)據(jù)幀均被刪除。
作為示例,在不需要進(jìn)行碼率切換的情況下,本實施例應(yīng)始終從發(fā)送隊列中讀取出多媒體數(shù)據(jù)幀并下發(fā),從發(fā)送隊列中讀取出并下發(fā)的多媒體數(shù)據(jù)幀從發(fā)送隊列中刪除;而在確定出需要進(jìn)行碼率切換的情況下,本實施例應(yīng)從切換后的新的發(fā)送隊列中讀取出多媒體數(shù)據(jù)幀并下發(fā)。
作為示例,在多媒體數(shù)據(jù)幀從發(fā)送隊列中被讀取出并下發(fā)時,本實施例還應(yīng)同步刪除其他隊列(即所有隊列中除了發(fā)送隊列之外的所有隊列)中相應(yīng)的多媒體數(shù)據(jù)幀,以保證位于所有隊列的隊首處的多媒體數(shù)據(jù)幀始終對應(yīng)同一媒體內(nèi)容。
作為示例,在確定出需要進(jìn)行碼率切換的情況下,本實施例應(yīng)注意從切換后的新的發(fā)送隊列中讀取多媒體數(shù)據(jù)幀并下發(fā)的時機(jī),具體的,在確定出需要進(jìn)行碼率切換的情況下,本實施例應(yīng)在需要從切換前的發(fā)送隊列中讀取出關(guān)鍵幀(如I幀)時,停止從切換前的發(fā)送隊列中讀取出多媒體數(shù)據(jù)幀并下發(fā),而是從切換后的發(fā)送隊列中讀取出多媒體數(shù)據(jù)幀并下發(fā);一個具體的例子,在確定出需要進(jìn)行碼率切換時,如果當(dāng)前正在從切換前的發(fā)送隊列中讀取出非關(guān)鍵幀(如P幀或者B幀等)并下發(fā),則應(yīng)等待,直到從切換前的發(fā)送隊列中讀取完已下發(fā)的關(guān)鍵幀(如I幀)對應(yīng)的所有非關(guān)鍵幀,并在需要從切換前的發(fā)送隊列中讀取出下一個關(guān)鍵幀并下發(fā),且除了切換前的發(fā)送隊列之外的所有隊列中均刪除了相應(yīng)的非關(guān)鍵幀時,不再從切換前的發(fā)送隊列中讀取關(guān)鍵幀,而是開始從碼率切換后的新的發(fā)送隊列中讀取出多媒體數(shù)據(jù)幀并下發(fā),直到下一次碼率切換。
實施例二、在視頻直播應(yīng)用場景中,流媒體服務(wù)器為用戶自適應(yīng)提供多碼率流媒體的方法。
在視頻直播應(yīng)用場景中,設(shè)定流媒體服務(wù)器自適應(yīng)的為網(wǎng)絡(luò)中的n(n>2)個用戶(即用戶1、用戶2,……以及用戶n)分別提供三種碼率的流媒體服務(wù),則流媒體服務(wù)器自適應(yīng)提供多碼率流媒體的實現(xiàn)方式如圖2所示。
在圖2中,流媒體服務(wù)器針對三種碼率設(shè)置了三個GOP緩存,并為一個用戶分別設(shè)置了三個隊列,即第一GOP緩存、第二GOP緩存、第三GOP緩存、第一隊列、第二隊列以及第三隊列;其中第一GOP緩存和第一隊列對應(yīng)第一種碼率,第二GOP緩存和第二隊列對應(yīng)第二種碼率,第三GOP緩存和第三隊列對應(yīng)第三種碼率,且第一碼率高于第二碼率,而第二碼率高于第三碼率。
本實施例中的三個GOP緩存的存儲空間存在差異,但是三個GOP緩存所能存儲的視頻幀的數(shù)量相同。三個隊列的存儲空間存在差異,但是三個隊列所能存儲的視頻幀的數(shù)量相同。
流媒體服務(wù)器針對當(dāng)前實時產(chǎn)生的編碼處理后的具有GOP結(jié)構(gòu)的視頻幀(即具有GOP結(jié)構(gòu)的多媒體數(shù)據(jù)幀)進(jìn)行轉(zhuǎn)碼處理,從而針對編碼處理后的視頻幀產(chǎn)生基于第一碼率的視頻幀、基于第二碼率的視頻幀以及基于第三碼率的視頻幀。
作為示例,流媒體服務(wù)器可以同步的將不同碼率的視頻幀放入相應(yīng)的GOP緩存中,即基于第一碼率的視頻幀被緩存于第一GOP緩存中,基于第二碼率的視頻幀被緩存于第二GOP緩存中,基于第三碼率的視頻幀被緩存于第三GOP緩存中。流媒體服務(wù)器可以控制三個GOP緩存中的視頻幀的數(shù)量相同,且三個GOP緩存中的視頻幀所對應(yīng)的媒體內(nèi)容完全相同。
針對網(wǎng)絡(luò)中的任意一個用戶而言,流媒體服務(wù)器可以同步的將第一GOP緩存中的視頻幀讀取出放入第一隊列中,將第二GOP緩存中的視頻幀讀取出并放入第二隊列中,并將第三GOP緩存中的視頻幀讀取出并放入第三隊列中。流媒體服務(wù)器可以控制同步放入三個隊列中的視頻幀所對應(yīng)的媒體內(nèi)容完全相同。
針對網(wǎng)絡(luò)中的任意一個用戶而言,在開始向該用戶提供本次直播的媒體流時,流媒體服務(wù)器首先會將該用戶對應(yīng)的三個隊列中的其中一個隊列作為發(fā)送隊列,如流媒體服務(wù)器根據(jù)缺省設(shè)置將相應(yīng)的隊列作為發(fā)送隊列;再如流媒體服務(wù)器根據(jù)用戶選擇的碼率將該碼率對應(yīng)的隊列作為發(fā)送隊列;再如流媒體服務(wù)器根據(jù)當(dāng)前網(wǎng)絡(luò)傳輸速率將相應(yīng)碼率的隊列作為發(fā)送隊列;流媒體服務(wù)器從發(fā)送隊列(如第二個隊列)中讀取出視頻幀并向該用戶發(fā)送,且每下發(fā)一個視頻幀,該視頻幀即從發(fā)送隊列中刪除,流媒體服務(wù)器還會將第一個隊列和第三個隊列中的與該視頻幀對應(yīng)的碼率不同的視頻幀也刪除。流媒體服務(wù)器在持續(xù)的從發(fā)送隊列中讀取視頻幀并下發(fā)的過程中,會監(jiān)測發(fā)送隊列的數(shù)據(jù)充盈率(即發(fā)送隊列當(dāng)前存儲的視頻幀所占用的存儲空間與發(fā)送隊列的總存儲空間大小的比值),流媒體服務(wù)器在監(jiān)測到發(fā)送隊列的數(shù)據(jù)充盈率高于第一充盈率,且距離前一次碼率切換的時間達(dá)到預(yù)定時長時,確定出需要向低碼率切換,流媒體服務(wù)器將第三個隊列作為新的發(fā)送隊列,在應(yīng)該從第二個隊列中讀取I幀時,開始從新的發(fā)送隊列(即第三個隊列)中讀取視頻幀并下發(fā),同樣的,讀取出的視頻幀即從發(fā)送隊列中刪除,流媒體服務(wù)器還會將第一個隊列和第二個隊列中的與從第三個隊列中讀取出的視頻幀對應(yīng)的碼率不同的視頻幀也刪除;流媒體服務(wù)器在監(jiān)測到發(fā)送隊列的數(shù)據(jù)充盈率高于第二充盈率,且距離前一次碼率切換的時間達(dá)到預(yù)定時長時,確定出需要向高碼率切換,流媒體服務(wù)器將第二個隊列作為新的發(fā)送隊列,在應(yīng)該從第三個隊列中讀取I幀時,開始從新的發(fā)送隊列(即第二個隊列)中讀取視頻幀并下發(fā),同樣的,讀取出的視頻幀從發(fā)送隊列中刪除,流媒體服務(wù)器還會將第一個隊列和第三個隊列中的與從第二個隊列中讀取出的視頻幀對應(yīng)的碼率不同的視頻幀也刪除。
實施例三、在視頻電話會議應(yīng)用場景中,流媒體服務(wù)器為用戶自適應(yīng)提供多碼率流媒體的方法。
在視頻電話會議應(yīng)用場景中,設(shè)定流媒體服務(wù)器能夠自適應(yīng)的為參加視頻電話會議的每一個與會者均提供三種碼率的流媒體服務(wù),流媒體服務(wù)器設(shè)置三個GOP緩存,即第一GOP緩存、第二GOP緩存以及第三GOP緩存,其中第一GOP緩存對應(yīng)第一種碼率,第二GOP緩存對應(yīng)第二種碼率,第三GOP緩存對應(yīng)第三種碼率,且第一碼率高于第二碼率,而第二碼率高于第三碼率。
在一個用戶申請加入視頻電話會議時,流媒體服務(wù)器為該用戶配置相應(yīng)的信息,如動態(tài)的為該用戶設(shè)置三個隊列,即第一隊列、第二隊列以及第三隊列;其中第一隊列對應(yīng)第一種碼率,第二隊列對應(yīng)第二種碼率,第三隊列對應(yīng)第三種碼率。本實施例中的三個GOP緩存的存儲空間存在差異,但是三個GOP緩存所能存儲的視頻幀的數(shù)量相同。三個隊列的存儲空間存在差異,但是三個隊列所能存儲的視頻幀的數(shù)量相同。
流媒體服務(wù)器在成功為該用戶配置了相應(yīng)的信息后,該用戶成為本次視頻電話會議中的與會者。流媒體服務(wù)器針對當(dāng)前實時產(chǎn)生的編碼處理后的具有GOP結(jié)構(gòu)的視頻幀進(jìn)行轉(zhuǎn)碼處理,從而針對編碼處理后的視頻幀產(chǎn)生基于第一碼率的視頻幀、基于第二碼率的視頻幀以及基于第三碼率的視頻幀。
流媒體服務(wù)器可以同步的將不同碼率的視頻幀放入三個GOP緩存中,即基于第一碼率的視頻幀被緩存于第一GOP緩存中,基于第二碼率的視頻幀被緩存于第二GOP緩存中,基于第三碼率的視頻幀被緩存于第三GOP緩存中。流媒體服務(wù)器可以控制三個GOP緩存中的視頻幀的數(shù)量相同,且三個GOP緩存中的視頻幀所對應(yīng)的媒體內(nèi)容完全相同。
流媒體服務(wù)器可以同步的將該與會者的第一GOP緩存中的視頻幀讀取出放入第一隊列中,將第二GOP緩存中的視頻幀讀取出并放入第二隊列中,并將第三GOP緩存中的視頻幀讀取出并放入第三隊列中。流媒體服務(wù)器可以控制同步放入三個隊列中的視頻幀所對應(yīng)的媒體內(nèi)容完全相同。
在開始向該與會者提供視頻電話會議的媒體流時,流媒體服務(wù)器首先會根據(jù)該與會者選擇的碼率將該碼率對應(yīng)的隊列作為發(fā)送隊列;流媒體服務(wù)器從發(fā)送隊列(如第三個隊列)中讀取出視頻幀并向該與會者發(fā)送,且每下發(fā)一個視頻幀,該視頻幀即從發(fā)送隊列中刪除,流媒體服務(wù)器還會將第一個隊列和第二個隊列中的與該視頻幀對應(yīng)的碼率不同的視頻幀也刪除。流媒體服務(wù)器在持續(xù)的從發(fā)送隊列中讀取視頻幀并下發(fā)的過程中,會監(jiān)測發(fā)送隊列的數(shù)據(jù)充盈率,流媒體服務(wù)器在監(jiān)測到發(fā)送隊列的數(shù)據(jù)充盈率高于第一充盈率,且距離前一次碼率切換的時間達(dá)到預(yù)定時長時,確定出需要向低碼率切換,由于第三個隊列的碼率已經(jīng)是最低碼率,因此,流媒體服務(wù)器仍然將第三個隊列作為發(fā)送隊列,并繼續(xù)從第三個隊列中讀取視頻幀并下發(fā);流媒體服務(wù)器在監(jiān)測到發(fā)送隊列的數(shù)據(jù)充盈率高于第二充盈率,且距離前一次碼率切換的時間達(dá)到預(yù)定時長時,確定出需要向高碼率切換,流媒體服務(wù)器將第二個隊列作為新的發(fā)送隊列,在應(yīng)該從第三個隊列中讀取I幀時,開始從新的發(fā)送隊列(即第二個隊列)中讀取視頻幀并下發(fā),同樣的,讀取出的視頻幀從發(fā)送隊列中刪除,流媒體服務(wù)器還會將第一個隊列和第三個隊列中的與從第二個隊列中讀取出的視頻幀對應(yīng)的碼率不同的視頻幀也刪除。
實施例四、在服務(wù)器中用于自適應(yīng)提供多碼率流媒體的裝置。
本實施例的服務(wù)器即流媒體服務(wù)器,用于自適應(yīng)提供多碼率流媒體的裝置通常會被設(shè)置于充當(dāng)流媒體服務(wù)器的計算機(jī)設(shè)備中,如本實施例所記載的用于自適應(yīng)提供多碼率流媒體的裝置可以設(shè)置于充當(dāng)流媒體服務(wù)器的臺式計算機(jī)、服務(wù)器以及其他網(wǎng)絡(luò)設(shè)備中。本實施例的用于自適應(yīng)提供多碼率流媒體的裝置的主要結(jié)構(gòu)如圖3所示。
下面參照具體實施例對在服務(wù)器中用于自適應(yīng)提供多碼率流媒體的裝置進(jìn)行說明。
圖3中,本實施例的用于自適應(yīng)提供多碼率流媒體的裝置包括:用于獲取網(wǎng)絡(luò)質(zhì)量信息的裝置(下述簡稱為“獲取網(wǎng)絡(luò)質(zhì)量裝置300”)、用于在根據(jù)網(wǎng)絡(luò)質(zhì)量信息確定出需要碼率切換的情況下,從所有隊列中選擇一個隊列作為發(fā)送隊列的裝置(下述簡稱為“控制碼率切換裝置310”)以及用于從發(fā)送隊列中讀取出多媒體數(shù)據(jù)幀并下發(fā),且其他隊列中的與已下發(fā)的多媒體數(shù)據(jù)幀具有同一媒體內(nèi)容的多媒體數(shù)據(jù)幀均被刪除的裝置(下述簡稱為“下發(fā)數(shù)據(jù)幀裝置320”);其中的獲取網(wǎng)絡(luò)質(zhì)量裝置可以包括:用于獲取發(fā)送隊列的數(shù)據(jù)充盈信息的裝置(下述簡稱為“獲取充盈信息裝置301”)。可選的,本實施例的用于自適應(yīng)提供多碼率流媒體的裝置還可以包括:用于將編碼處理后的多媒體數(shù)據(jù)幀轉(zhuǎn)碼為不同碼率的多媒體數(shù)據(jù)幀的裝置(下述簡稱為“轉(zhuǎn)碼裝置330”)、用于將轉(zhuǎn)碼后的不同碼率的多媒體數(shù)據(jù)幀分別存儲于相應(yīng)的GOP緩存中的裝置(下述簡稱為“第一存儲控制裝置340”)以及用于從各GOP緩存中同步讀取多媒體數(shù)據(jù)幀,并將讀取出的多媒體數(shù)據(jù)分別存儲于相應(yīng)的隊列中的裝置(下述簡稱為“第二存儲控制裝置350”)。
獲取網(wǎng)絡(luò)質(zhì)量裝置300主要用于獲取網(wǎng)絡(luò)質(zhì)量信息。
作為示例,獲取網(wǎng)絡(luò)質(zhì)量裝置300所獲取的網(wǎng)絡(luò)質(zhì)量信息可以包括:網(wǎng)絡(luò)傳輸延時、丟包率以及網(wǎng)絡(luò)抖動信息等。優(yōu)選的,本實施例中的網(wǎng)絡(luò)質(zhì)量信息可以使用隊列的數(shù)據(jù)充盈信息來體現(xiàn),即由獲取充盈信息裝置301獲取隊列的數(shù)據(jù)充盈信息。
作為示例,獲取充盈信息裝置301所獲取的隊列的數(shù)據(jù)充盈信息可以具體為隊列中存儲的多媒體數(shù)據(jù)幀所占用的存儲空間大小與隊列的總存儲空間大小的比值(即數(shù)據(jù)充盈率),也可以具體為隊列中存儲的多媒體數(shù)據(jù)幀所占用的存儲空間大小或者隊列中的閑置存儲空間大小等能夠反應(yīng)網(wǎng)絡(luò)質(zhì)量的隊列參數(shù)。
作為示例,獲取充盈信息裝置301可以定時(如1秒或者小于1秒等)獲取所有隊列中的任意一個隊列的數(shù)據(jù)充盈信息,以根據(jù)該隊列的數(shù)據(jù)充盈信息及時的獲知當(dāng)前網(wǎng)絡(luò)狀態(tài)。上述任意一個隊列可以是隨機(jī)確定出的一個隊列,也可以是預(yù)先確定的一個固定的隊列,即獲取充盈信息裝置301可以隨機(jī)獲取某一個隊列的數(shù)據(jù)充盈信息,也可以固定獲取某一個隊列的數(shù)據(jù)充盈信息。優(yōu)選的,獲取充盈信息裝置301可以定時獲取隊列中的發(fā)送隊列的數(shù)據(jù)充盈信息,從而獲取充盈信息裝置301根據(jù)發(fā)送隊列的數(shù)據(jù)充盈信息及時的獲知當(dāng)前網(wǎng)絡(luò)狀態(tài)。本實施例中的發(fā)送隊列是指當(dāng)前正在被發(fā)送給終端設(shè)備的多媒體數(shù)據(jù)幀所屬的隊列,也就是說,雖然本實施例針對不同碼率的多媒體數(shù)據(jù)幀分別設(shè)置了相應(yīng)的隊列,且每一個隊列中均存儲有相應(yīng)碼率的多媒體數(shù)據(jù)幀,但是,針對任一時刻而言,只有一個隊列中存儲的多媒體數(shù)據(jù)幀被發(fā)送給終端設(shè)備,該隊列即為發(fā)送隊列。
控制碼率切換裝置310主要用于在根據(jù)網(wǎng)絡(luò)質(zhì)量信息確定出需要碼率切換的情況下,從所有隊列中選擇一個隊列作為發(fā)送隊列。
作為示例,本實施例的不同隊列中存儲的所有多媒體數(shù)據(jù)幀具有相同的編碼格式,如不同隊列中存儲的所有多媒體數(shù)據(jù)幀具有相同的GOP結(jié)構(gòu)。另外,不同隊列中存儲的多媒體數(shù)據(jù)幀通常是同步更新的;如在多媒體數(shù)據(jù)幀采用GOP結(jié)構(gòu)的情況下,本實施例為每一種碼率分別設(shè)置一個GOP緩存;首先,轉(zhuǎn)碼裝置330針對編碼處理后的各多媒體數(shù)據(jù)幀進(jìn)行轉(zhuǎn)碼處理,以獲得多個不同碼率的多媒體數(shù)據(jù)幀,然后,第一存儲控制裝置340將不同碼率的多媒體數(shù)據(jù)幀同時寫入相應(yīng)的GOP緩存中,如在各GOP緩存均為空(可以由于GOP緩存中的多媒體數(shù)據(jù)幀被放入隊列而形成GOP緩存為空,也可以由于清空操作而使GOP緩存為空)的情況下,第一存儲控制裝置340將轉(zhuǎn)碼處理后的不同碼率的多媒體數(shù)據(jù)幀同時寫入相應(yīng)的GOP緩存中;之后,第二存儲控制裝置350同時從各GOP緩存中讀取相同數(shù)量的多媒體數(shù)據(jù)幀,并將讀取出的相同數(shù)量的多媒體數(shù)據(jù)幀分別存儲于相應(yīng)的隊列中,從而使各隊列中同步增加了針對同一媒體內(nèi)容的多媒體數(shù)據(jù)幀。
作為示例,在獲取網(wǎng)絡(luò)質(zhì)量裝置300獲取到的隊列的數(shù)據(jù)充盈信息包括:隊列的數(shù)據(jù)充盈率,并且在所有隊列各自的存儲空間所能夠存儲的多媒體數(shù)據(jù)幀的數(shù)量均相同的情況下,控制碼率切換裝置310根據(jù)網(wǎng)絡(luò)質(zhì)量信息確定出需要碼率切換的過程可以具體為:預(yù)先針對所有隊列設(shè)置兩個統(tǒng)一的閾值,即第一閾值和第二閾值,控制碼率切換裝置310從預(yù)先維護(hù)的信息中獲取各隊列的總存儲空間大小,并定時獲取所有隊列中的任一隊列中當(dāng)前存儲的所有多媒體數(shù)據(jù)幀所占用的總存儲空間大小(如控制碼率切換裝置310定時獲取發(fā)送隊列當(dāng)前存儲的所有多媒體數(shù)據(jù)幀所占用的總存儲空間大小),然后,控制碼率切換裝置310根據(jù)上述獲取到的隊列中當(dāng)前存儲的所有多媒體數(shù)據(jù)幀所占用的總存儲空間大小和該隊列的總存儲空間大小計算隊列的數(shù)據(jù)充盈率,在判斷出該數(shù)據(jù)充盈率高于第一閾值時,確定出需要向低碼率切換;而在判斷出該數(shù)據(jù)充盈率低于第二閾值時,確定出需要向高碼率切換。上述第一閾值通常遠(yuǎn)大于第二閾值,如第一閾值為80%,而第二閾值為20%。
作為示例,在獲取網(wǎng)絡(luò)質(zhì)量裝置300獲取到的隊列的數(shù)據(jù)充盈信息包括:隊列的數(shù)據(jù)充盈率,并且在所有隊列各自的存儲空間所能夠存儲的多媒體數(shù)據(jù)幀的數(shù)量不相同的情況下,控制碼率切換裝置310根據(jù)網(wǎng)絡(luò)質(zhì)量信息確定出需要碼率切換的過程可以為:預(yù)先為每一個隊列分別設(shè)置兩個閾值,即每一個隊列均對應(yīng)各自的第一閾值和第二閾值,不同隊列各自對應(yīng)的第一閾值通常不相同,同樣的,不同隊列各自對應(yīng)的第二閾值通常也不相同;控制碼率切換裝置310從預(yù)先維護(hù)的信息中獲取各隊列的總存儲空間大小以及各隊列自身對應(yīng)的第一閾值和第二閾值,控制碼率切換裝置310定時獲取所有隊列中的任一隊列中當(dāng)前存儲的所有多媒體數(shù)據(jù)幀所占用的總存儲空間大小(如控制碼率切換裝置310定時獲取發(fā)送隊列當(dāng)前存儲的所有多媒體數(shù)據(jù)幀占用的總存儲空間大小),并根據(jù)上述獲取到的隊列中當(dāng)前存儲的所有多媒體數(shù)據(jù)所占用的總存儲空間大小以及該隊列的總存儲空間大小計算隊列的數(shù)據(jù)充盈率,控制碼率切換裝置310在判斷出該數(shù)據(jù)充盈率高于該隊列對應(yīng)的第一閾值時,確定出需要向低碼率切換;而控制碼率切換裝置310在判斷出該數(shù)據(jù)充盈率低于該隊列所對應(yīng)的第二閾值時,確定出需要向高碼率切換。
作為示例,在本實施例中的網(wǎng)絡(luò)質(zhì)量信息包括:隊列中當(dāng)前存儲的所有多媒體數(shù)據(jù)幀所占用的總存儲空間大小的情況下,控制碼率切換裝置310根據(jù)網(wǎng)絡(luò)質(zhì)量信息確定出需要碼率切換的過程可以具體為:無論所有隊列各自的存儲空間所能夠存儲的多媒體數(shù)據(jù)幀的數(shù)量是否相同,均預(yù)先為每一個隊列分別設(shè)置兩個閾值,即每一個隊列均對應(yīng)各自的第三閾值和第四閾值,且不同隊列所對應(yīng)的第三閾值通常不相同,同樣的,不同隊列所對應(yīng)的第四閾值通常也不相同;控制碼率切換裝置310從預(yù)先維護(hù)的信息中獲取各隊列分別對應(yīng)的第三閾值和第四閾值,控制碼率切換裝置310定時獲取所有隊列中的任一隊列中當(dāng)前存儲的所有多媒體數(shù)據(jù)幀所占用的總存儲空間大小(如定時獲取發(fā)送隊列當(dāng)前存儲的所有多媒體數(shù)據(jù)幀占用的總存儲空間大小),并將上述獲取到的隊列中當(dāng)前存儲的所有多媒體數(shù)據(jù)幀所占用的總存儲空間大小與該隊列所對應(yīng)的第三閾值和第四閾值進(jìn)行比較,在比較的結(jié)果為上述獲取到的隊列中當(dāng)前存儲的所有多媒體數(shù)據(jù)幀所占用的總存儲空間大小大于該隊列所對應(yīng)的第三閾值時,控制碼率切換裝置310確定出需要向低碼率切換;而在比較的結(jié)果為上述獲取到的隊列中當(dāng)前存儲的所有多媒體數(shù)據(jù)幀所占用的總存儲空間大小小于該隊列所對應(yīng)的第四閾值時,控制碼率切換裝置310確定出需要向高碼率切換。上述第三閾值通常遠(yuǎn)大于第四閾值。
作為示例,在本實施例中的網(wǎng)絡(luò)質(zhì)量信息包括:隊列當(dāng)前閑置存儲空間大小的情況下,控制碼率切換裝置310根據(jù)網(wǎng)絡(luò)質(zhì)量信息確定出需要碼率切換的過程可以具體為:無論所有隊列各自的存儲空間所能夠存儲的多媒體數(shù)據(jù)幀的數(shù)量是否相同,均預(yù)先為每一個隊列分別設(shè)置兩個閾值,即每一個隊列均對應(yīng)各自的第五閾值以及第六閾值,且不同隊列各自對應(yīng)的第五閾值通常不相同,同樣的,不同隊列各自對應(yīng)的第六閾值通常也不相同;控制碼率切換裝置310從預(yù)先維護(hù)的信息中獲取各隊列各自對應(yīng)的第五閾值和第六閾值,控制碼率切換裝置310定時獲取所有隊列中的任一隊列當(dāng)前閑置存儲空間大小(如定時獲取發(fā)送隊列當(dāng)前閑置存儲空間大小),并將上述獲取到的隊列當(dāng)前閑置存儲空間大小與該隊列所對應(yīng)的第五閾值和第六閾值進(jìn)行比較,在比較的結(jié)果為上述獲取到的隊列當(dāng)前閑置存儲空間大小大于上述獲取到的第五閾值時,控制碼率切換裝置310確定出需要向高碼率切換;而在比較的結(jié)果為上述獲取到的隊列當(dāng)前閑置存儲空間大小小于第六閾值時,控制碼率切換裝置310確定出需要向低碼率切換。上述第五閾值通常遠(yuǎn)小于第六閾值。
作為示例,為避免出現(xiàn)由于網(wǎng)絡(luò)抖動等原因而造成的頻繁碼率切換的現(xiàn)象,控制碼率切換裝置310可以在判斷是否需要碼率切換的過程中,考慮控制碼率頻繁切換的限制條件,也就是說,控制碼率切換裝置310可以根據(jù)網(wǎng)絡(luò)質(zhì)量信息以及預(yù)先設(shè)置的碼率切換的時間限制條件確定出需要碼率切換。上述預(yù)先設(shè)置的碼率切換的時間限制條件可以具體為當(dāng)前時間距離前一次碼率切換時間超過預(yù)定時長。
作為示例,控制碼率切換裝置310根據(jù)網(wǎng)絡(luò)質(zhì)量信息和預(yù)先設(shè)置的碼率切換的時間限制條件確定出需要碼率切換的第一個具體例子為:在所有隊列各自的存儲空間所能夠存儲的多媒體數(shù)據(jù)幀的數(shù)量均相同的情況下,預(yù)先針對所有隊列設(shè)置兩個統(tǒng)一的閾值,即第一閾值和第二閾值,控制碼率切換裝置310從預(yù)先維護(hù)的信息中獲取隊列的總存儲空間大小、預(yù)定時長以及前一次碼率切換的時間,并定時獲取所有隊列中的任一隊列中當(dāng)前存儲的所有多媒體數(shù)據(jù)幀所占用的總存儲空間大小,然后,控制碼率切換裝置310根據(jù)上述獲取到的任一隊列中當(dāng)前存儲的所有多媒體數(shù)據(jù)幀所占用的總存儲空間大小和該隊列的總存儲空間大小計算隊列的數(shù)據(jù)充盈率,在判斷出該隊列的數(shù)據(jù)充盈率高于第一閾值且當(dāng)前時間與前一次碼率切換的時間之差超過預(yù)定時長時,控制碼率切換裝置310確定出需要向低碼率切換;而在判斷出該隊列的數(shù)據(jù)充盈率低于第二閾值且當(dāng)前時間與前一次碼率切換的時間之差超過預(yù)定時長時,控制碼率切換裝置310確定出需要向高碼率切換。
作為示例,控制碼率切換裝置310根據(jù)網(wǎng)絡(luò)質(zhì)量信息和預(yù)先設(shè)置的碼率切換的時間限制條件確定出需要碼率切換的第二個具體例子為:在所有隊列各自的存儲空間所能夠存儲的多媒體數(shù)據(jù)幀的數(shù)量不相同的情況下,預(yù)先針對每一個隊列分別設(shè)置兩個閾值,即每一個隊列均對應(yīng)各自的第一閾值和第二閾值,不同隊列各自對應(yīng)的第一閾值通常不相同,同樣的,不同隊列各自對應(yīng)的第二閾值通常也不相同;控制碼率切換裝置310從預(yù)先維護(hù)的信息中獲取各隊列的總存儲空間大小、各隊列各自對應(yīng)的第一閾值和第二閾值、預(yù)定時長以及前一次碼率切換的時間,控制碼率切換裝置310定時獲取所有隊列中的任一隊列中當(dāng)前存儲的所有多媒體數(shù)據(jù)幀所占用的總存儲空間大小(如定時獲取發(fā)送隊列當(dāng)前存儲的所有多媒體數(shù)據(jù)幀所占用的總存儲空間大小),并根據(jù)上述獲取到的隊列中當(dāng)前存儲的所有多媒體數(shù)據(jù)所占用的總存儲空間大小和該隊列的總存儲空間大小計算隊列的數(shù)據(jù)充盈率,在控制碼率切換裝置310判斷出該數(shù)據(jù)充盈率高于該隊列對應(yīng)的第一閾值且當(dāng)前時間與前一次碼率切換的時間之差超過預(yù)定時長時,確定出需要向低碼率切換;而在控制碼率切換裝置310判斷出該數(shù)據(jù)充盈率低于該隊列所對應(yīng)的第二閾值且當(dāng)前時間與前一次碼率切換的時間之差超過預(yù)定時長時,確定出需要向高碼率切換。上述第一閾值通常遠(yuǎn)大于第二閾值,如第一閾值為80%,而第二閾值為20%。
作為示例,控制碼率切換裝置310根據(jù)網(wǎng)絡(luò)質(zhì)量信息和預(yù)先設(shè)置的碼率切換的時間限制條件確定出需要碼率切換的第三個具體例子為:預(yù)先針對每一個隊列分別設(shè)置兩個閾值,即每一個隊列均對應(yīng)各自的第三閾值和第四閾值,且不同隊列所對應(yīng)的第三閾值通常不相同,同樣的,不同隊列所對應(yīng)的第四閾值通常也不相同;控制碼率切換裝置310從預(yù)先維護(hù)的信息中獲取各隊列分別對應(yīng)的第三閾值和第四閾值、預(yù)定時長以及前一次碼率切換的時間,控制碼率切換裝置310定時獲取所有隊列中的任一隊列中當(dāng)前存儲的所有多媒體數(shù)據(jù)幀所占用的總存儲空間大小(如定時獲取發(fā)送隊列當(dāng)前存儲的所有多媒體數(shù)據(jù)幀所占用的總存儲空間大小),并將上述獲取到的隊列中當(dāng)前存儲的所有多媒體數(shù)據(jù)幀所占用的總存儲空間大小與該隊列所對應(yīng)的第三閾值和第四閾值進(jìn)行比較,在比較的結(jié)果為上述獲取到的隊列中當(dāng)前存儲的所有多媒體數(shù)據(jù)幀所占用的總存儲空間大小大于該隊列所對應(yīng)的第三閾值且當(dāng)前時間與前一次碼率切換的時間之差超過預(yù)定時長時,控制碼率切換裝置310確定出需要向低碼率切換;而在比較的結(jié)果為上述獲取到的隊列中當(dāng)前存儲的所有多媒體數(shù)據(jù)幀所占用的總存儲空間大小小于該隊列所對應(yīng)的第四閾值且當(dāng)前時間與前一次碼率切換的時間之差超過預(yù)定時長時,控制碼率切換裝置310確定出需要向高碼率切換。上述第三閾值通常遠(yuǎn)大于第四閾值。
作為示例,控制碼率切換裝置310根據(jù)網(wǎng)絡(luò)質(zhì)量信息和預(yù)先設(shè)置的碼率切換的時間限制條件確定出需要碼率切換的第四個具體例子為:預(yù)先針對每一個隊列分別設(shè)置兩個閾值,即每一個隊列均對應(yīng)各自的第五閾值以及第六閾值,且不同隊列各自對應(yīng)的第五閾值通常不相同,同樣的,不同隊列各自對應(yīng)的第六閾值通常也不相同;控制碼率切換裝置310從預(yù)先維護(hù)的信息中獲取各隊列各自對應(yīng)的第五閾值和第六閾值、預(yù)定時長以及前一次碼率切換的時間,控制碼率切換裝置310定時獲取所有隊列中的任一隊列當(dāng)前閑置存儲空間大小(如定時獲取發(fā)送隊列當(dāng)前閑置存儲空間大小),并將上述獲取到的隊列當(dāng)前閑置存儲空間大小與該隊列所對應(yīng)的第五閾值和第六閾值進(jìn)行比較,在比較的結(jié)果為上述獲取到的隊列當(dāng)前閑置存儲空間大小大于上述獲取到的第五閾值且當(dāng)前時間與前一次碼率切換的時間之差超過預(yù)定時長時,控制碼率切換裝置310確定出需要向高碼率切換;而在比較的結(jié)果為上述獲取到的隊列當(dāng)前閑置存儲空間大小小于第六閾值且當(dāng)前時間與前一次碼率切換的時間之差超過預(yù)定時長時,控制碼率切換裝置310確定出需要向低碼率切換。上述第五閾值通常遠(yuǎn)小于第六閾值。
下發(fā)數(shù)據(jù)幀裝置320主要用于從發(fā)送隊列中讀取出多媒體數(shù)據(jù)幀并下發(fā),且其他隊列中的與已下發(fā)的多媒體數(shù)據(jù)幀具有同一媒體內(nèi)容的多媒體數(shù)據(jù)幀均被刪除。
作為示例,下發(fā)數(shù)據(jù)幀裝置320應(yīng)始終從發(fā)送隊列中讀取出多媒體數(shù)據(jù)幀并下發(fā),下發(fā)數(shù)據(jù)幀裝置320從發(fā)送隊列中讀取出并下發(fā)的多媒體數(shù)據(jù)幀從發(fā)送隊列中刪除;在控制碼率切換裝置310確定出需要進(jìn)行碼率切換的情況下,下發(fā)數(shù)據(jù)幀裝置320應(yīng)從切換后的新的發(fā)送隊列中讀取出多媒體數(shù)據(jù)幀并下發(fā)。
作為示例,在多媒體數(shù)據(jù)幀從發(fā)送隊列中被下發(fā)數(shù)據(jù)幀裝置320讀取出并下發(fā)時,下發(fā)數(shù)據(jù)幀裝置320還應(yīng)同步刪除其他隊列(即所有隊列中除了發(fā)送隊列之外的所有隊列)中相應(yīng)的多媒體數(shù)據(jù)幀,以保證位于所有隊列的隊首處的多媒體數(shù)據(jù)幀始終對應(yīng)同一媒體內(nèi)容。
作為示例,在控制碼率切換裝置310確定出需要進(jìn)行碼率切換的情況下,下發(fā)數(shù)據(jù)幀裝置320應(yīng)注意從切換后的新的發(fā)送隊列中讀取多媒體數(shù)據(jù)幀并下發(fā)的時機(jī),具體的,在控制碼率切換裝置310確定出需要進(jìn)行碼率切換的情況下,下發(fā)數(shù)據(jù)幀裝置320應(yīng)在需要從切換前的發(fā)送隊列中讀取出關(guān)鍵幀(如I幀)時,停止從切換前的發(fā)送隊列中讀取出多媒體數(shù)據(jù)幀并下發(fā),而是從切換后的發(fā)送隊列中讀取出多媒體數(shù)據(jù)幀并下發(fā);一個具體的例子,在控制碼率切換裝置310確定出需要進(jìn)行碼率切換時,如果當(dāng)前正在從切換前的發(fā)送隊列中讀取出非關(guān)鍵幀(如P幀或者B幀等)并下發(fā),則應(yīng)等待,直到下發(fā)數(shù)據(jù)幀裝置320從切換前的發(fā)送隊列中讀取完已下發(fā)的關(guān)鍵幀(如I幀)對應(yīng)的所有非關(guān)鍵幀,并在需要從切換前的發(fā)送隊列中讀取出下一個關(guān)鍵幀并下發(fā),且除了切換前的發(fā)送隊列之外的所有隊列中均刪除了相應(yīng)的非關(guān)鍵幀時,下發(fā)數(shù)據(jù)幀裝置320不再從切換前的發(fā)送隊列中讀取關(guān)鍵幀,而是開始從碼率切換后的新的發(fā)送隊列中讀取出多媒體數(shù)據(jù)幀并下發(fā),直到下一次碼率切換。
需要特別說明的是,在控制碼率切換裝置310確定出需要向低碼率切換時,如果切換前的發(fā)送隊列的碼率已經(jīng)是所有隊列的碼率中的最低碼率,則切換后的新的發(fā)送隊列仍然為切換前的發(fā)送隊列,而如果切換前的發(fā)送隊列的碼率并不是所有隊列的碼率中的最低碼率,則控制碼率切換裝置310應(yīng)從碼率低于切換前的發(fā)送隊列的碼率的所有隊列中選擇一個隊列作為發(fā)送隊列,如控制碼率切換裝置310從碼率低于切換前的發(fā)送隊列的碼率的所有隊列中選擇碼率最低的隊列作為發(fā)送隊列??刂拼a率切換裝置310在確定出需要向高碼率切換時,如果切換前的發(fā)送隊列的碼率已經(jīng)是所有隊列的碼率中的最高碼率,則切換后的新的發(fā)送隊列仍然為切換前的發(fā)送隊列,而如果切換前的發(fā)送隊列的碼率并不是所有隊列的碼率中的最高碼率,則控制碼率切換裝置310應(yīng)從碼率高于切換前的發(fā)送隊列的碼率的所有隊列中選擇一個隊列作為發(fā)送隊列,如控制碼率切換裝置310從碼率高于切換前的發(fā)送隊列的碼率的所有隊列中選擇碼率最高的隊列作為發(fā)送隊列。
實施例五、在視頻直播應(yīng)用場景中,流媒體服務(wù)器為用戶自適應(yīng)提供多碼率流媒體的實現(xiàn)方式。
在視頻直播應(yīng)用場景中,設(shè)定流媒體服務(wù)器自適應(yīng)的為網(wǎng)絡(luò)中的n(n>2)個用戶分別提供三種碼率的流媒體服務(wù)。流媒體服務(wù)器針對三種碼率設(shè)置了三個GOP緩存,且為每一個用戶分別設(shè)置了三個隊列,即第一GOP緩存、第二GOP緩存、第三GOP緩存、第一隊列、第二隊列以及第三隊列;其中第一GOP緩存和第一隊列對應(yīng)第一種碼率,第二GOP緩存和第二隊列對應(yīng)第二種碼率,第三GOP緩存和第三隊列對應(yīng)第三種碼率,且第一碼率高于第二碼率,而第二碼率高于第三碼率。三個GOP緩存的存儲空間存在差異,但是三個GOP緩存所能存儲的視頻幀的數(shù)量相同。三個隊列的存儲空間存在差異,但是三個隊列所能存儲的視頻幀的數(shù)量相同。
轉(zhuǎn)碼裝置330針對當(dāng)前實時產(chǎn)生的編碼處理后的具有GOP結(jié)構(gòu)的視頻幀(即具有GOP結(jié)構(gòu)的多媒體數(shù)據(jù)幀)進(jìn)行轉(zhuǎn)碼處理,從而針對編碼處理后的視頻幀產(chǎn)生基于第一碼率的視頻幀、基于第二碼率的視頻幀以及基于第三碼率的視頻幀。
第一存儲控制裝置340可以同步的將不同碼率的視頻幀放入相應(yīng)的GOP緩存中,即基于第一碼率的視頻幀被緩存于第一GOP緩存中,基于第二碼率的視頻幀被緩存于第二GOP緩存中,基于第三碼率的視頻幀被緩存于第三GOP緩存中。流媒體服務(wù)器可以控制三個GOP緩存中的視頻幀的數(shù)量相同,且三個GOP緩存中的視頻幀所對應(yīng)的媒體內(nèi)容完全相同。
針對網(wǎng)絡(luò)中的任意一個用戶而言,第二存儲控制裝置350可以同步的將第一GOP緩存中的視頻幀讀取出放入第一隊列中,將第二GOP緩存中的視頻幀讀取出并放入第二隊列中,并將第三GOP緩存中的視頻幀讀取出并放入第三隊列中。第二存儲控制裝置350可以控制同步放入三個隊列中的視頻幀所對應(yīng)的媒體內(nèi)容完全相同。
針對網(wǎng)絡(luò)中的任意一個用戶而言,在開始向該用戶提供本次直播的媒體流時,下發(fā)數(shù)據(jù)幀裝置320首先會將該用戶對應(yīng)的三個隊列中的其中一個隊列作為發(fā)送隊列,如根據(jù)缺省設(shè)置將相應(yīng)的隊列作為發(fā)送隊列;再如根據(jù)用戶選擇的碼率將該碼率對應(yīng)的隊列作為發(fā)送隊列;再如下發(fā)數(shù)據(jù)幀裝置320根據(jù)當(dāng)前網(wǎng)絡(luò)傳輸速率將相應(yīng)碼率的隊列作為發(fā)送隊列;下發(fā)數(shù)據(jù)幀裝置320從發(fā)送隊列(如第二個隊列)中讀取出視頻幀并向該用戶發(fā)送,且每下發(fā)一個視頻幀,該視頻幀即從發(fā)送隊列中刪除,下發(fā)數(shù)據(jù)幀裝置320還會將第一個隊列和第三個隊列中的與該視頻幀對應(yīng)的碼率不同的視頻幀也刪除。下發(fā)數(shù)據(jù)幀裝置320在持續(xù)的從發(fā)送隊列中讀取視頻幀并下發(fā)的過程中,控制碼率切換裝置310會監(jiān)測獲取網(wǎng)絡(luò)質(zhì)量裝置300獲取的發(fā)送隊列的數(shù)據(jù)充盈率(即發(fā)送隊列當(dāng)前存儲的視頻幀所占用的存儲空間與發(fā)送隊列的總存儲空間大小的比值),控制碼率切換裝置310在監(jiān)測到發(fā)送隊列的數(shù)據(jù)充盈率高于第一充盈率,且距離前一次碼率切換的時間達(dá)到預(yù)定時長時,確定出需要向低碼率切換,控制碼率切換裝置310將第三個隊列作為新的發(fā)送隊列,在下發(fā)數(shù)據(jù)幀裝置320應(yīng)該從第二個隊列中讀取I幀時,下發(fā)數(shù)據(jù)幀裝置320開始從新的發(fā)送隊列(即第三個隊列)中讀取視頻幀并下發(fā),同樣的,下發(fā)數(shù)據(jù)幀裝置320讀取出的視頻幀即從發(fā)送隊列中刪除,下發(fā)數(shù)據(jù)幀裝置320還會將第一個隊列和第二個隊列中的與從第三個隊列中讀取出的視頻幀對應(yīng)的碼率不同的視頻幀也刪除;控制碼率切換裝置310在監(jiān)測到發(fā)送隊列的數(shù)據(jù)充盈率高于第二充盈率,且距離前一次碼率切換的時間達(dá)到預(yù)定時長時,確定出需要向高碼率切換,下發(fā)數(shù)據(jù)幀裝置320將第二個隊列作為新的發(fā)送隊列,下發(fā)數(shù)據(jù)幀裝置320在應(yīng)該從第三個隊列中讀取I幀時,開始從新的發(fā)送隊列(即第二個隊列)中讀取視頻幀并下發(fā),同樣的,下發(fā)數(shù)據(jù)幀裝置320讀取出的視頻幀從發(fā)送隊列中刪除,下發(fā)數(shù)據(jù)幀裝置320還會將第一個隊列和第三個隊列中的與從第二個隊列中讀取出的視頻幀對應(yīng)的碼率不同的視頻幀也刪除。
實施例六、在視頻電話會議應(yīng)用場景中,流媒體服務(wù)器為用戶自適應(yīng)提供多碼率流媒體的實現(xiàn)方式。
在視頻電話會議應(yīng)用場景中,設(shè)定流媒體服務(wù)器能夠自適應(yīng)的為參加視頻電話會議的每一個與會者均提供三種碼率的流媒體服務(wù),流媒體服務(wù)器設(shè)置三個GOP緩存,即第一GOP緩存、第二GOP緩存以及第三GOP緩存,其中第一GOP緩存對應(yīng)第一種碼率,第二GOP緩存對應(yīng)第二種碼率,第三GOP緩存對應(yīng)第三種碼率,且第一碼率高于第二碼率,而第二碼率高于第三碼率。
在一個用戶申請加入視頻電話會議時,流媒體服務(wù)器為該用戶配置相應(yīng)的信息,如動態(tài)的為該用戶設(shè)置三個隊列,即第一隊列、第二隊列以及第三隊列;其中第一隊列對應(yīng)第一種碼率,第二隊列對應(yīng)第二種碼率,第三隊列對應(yīng)第三種碼率。本實施例中的三個GOP緩存的存儲空間存在差異,但是三個GOP緩存所能存儲的視頻幀的數(shù)量相同。三個隊列的存儲空間存在差異,但是三個隊列所能存儲的視頻幀的數(shù)量相同。
流媒體服務(wù)器在成功為該用戶配置了相應(yīng)的信息后,該用戶成為本次視頻電話會議中的與會者。轉(zhuǎn)碼裝置330針對當(dāng)前實時產(chǎn)生的編碼處理后的具有GOP結(jié)構(gòu)的視頻幀進(jìn)行轉(zhuǎn)碼處理,從而針對編碼處理后的視頻幀產(chǎn)生基于第一碼率的視頻幀、基于第二碼率的視頻幀以及基于第三碼率的視頻幀。
第一存儲控制裝置340可以同步的將不同碼率的視頻幀放入三個GOP緩存中,即基于第一碼率的視頻幀被緩存于第一GOP緩存中,基于第二碼率的視頻幀被緩存于第二GOP緩存中,基于第三碼率的視頻幀被緩存于第三GOP緩存中。第一存儲控制裝置340可以控制三個GOP緩存中的視頻幀的數(shù)量相同,且三個GOP緩存中的視頻幀所對應(yīng)的媒體內(nèi)容完全相同。
第二存儲控制裝置350可以同步的將該與會者的第一GOP緩存中的視頻幀讀取出放入第一隊列中,將第二GOP緩存中的視頻幀讀取出并放入第二隊列中,并將第三GOP緩存中的視頻幀讀取出并放入第三隊列中。第二存儲控制裝置350可以控制同步放入三個隊列中的視頻幀所對應(yīng)的媒體內(nèi)容完全相同。
在開始向該與會者提供視頻電話會議的媒體流時,下發(fā)數(shù)據(jù)幀裝置320首先會根據(jù)該與會者選擇的碼率將該碼率對應(yīng)的隊列作為發(fā)送隊列;下發(fā)數(shù)據(jù)幀裝置320從發(fā)送隊列(如第三個隊列)中讀取出視頻幀并向該與會者發(fā)送,且每下發(fā)一個視頻幀,該視頻幀即從發(fā)送隊列中刪除,下發(fā)數(shù)據(jù)幀裝置320還會將第一個隊列和第二個隊列中的與該視頻幀對應(yīng)的碼率不同的視頻幀也刪除。下發(fā)數(shù)據(jù)幀裝置320在持續(xù)的從發(fā)送隊列中讀取視頻幀并下發(fā)的過程中,控制碼率切換裝置310會監(jiān)測獲取網(wǎng)絡(luò)質(zhì)量裝置300獲取的發(fā)送隊列的數(shù)據(jù)充盈率,控制碼率切換裝置310在監(jiān)測到發(fā)送隊列的數(shù)據(jù)充盈率高于第一充盈率,且距離前一次碼率切換的時間達(dá)到預(yù)定時長時,確定出需要向低碼率切換,由于第三個隊列的碼率已經(jīng)是最低碼率,因此,控制碼率切換裝置310仍然將第三個隊列作為發(fā)送隊列,下發(fā)數(shù)據(jù)幀裝置320繼續(xù)從第三個隊列中讀取視頻幀并下發(fā);控制碼率切換裝置310在監(jiān)測到發(fā)送隊列的數(shù)據(jù)充盈率高于第二充盈率,且距離前一次碼率切換的時間達(dá)到預(yù)定時長時,確定出需要向高碼率切換,控制碼率切換裝置310將第二個隊列作為新的發(fā)送隊列,在下發(fā)數(shù)據(jù)幀裝置320應(yīng)該從第三個隊列中讀取I幀時,開始從新的發(fā)送隊列(即第二個隊列)中讀取視頻幀并下發(fā),同樣的,下發(fā)數(shù)據(jù)幀裝置320將讀取出的視頻幀從發(fā)送隊列中刪除,下發(fā)數(shù)據(jù)幀裝置320還會將第一個隊列和第三個隊列中的與從第二個隊列中讀取出的視頻幀對應(yīng)的碼率不同的視頻幀也刪除。
需要注意的是,本發(fā)明可以在軟件和/或者軟件與硬件的組合體中被實施,例如,本發(fā)明的各個裝置可采用專用集成電路(ASIC)或者任何其他類似硬件設(shè)備來實現(xiàn)。在一個實施例中,本發(fā)明的軟件程序可以通過處理器執(zhí)行以實現(xiàn)上文所述步驟或功能。同樣地,本發(fā)明的軟件程序(包括相關(guān)的數(shù)據(jù)結(jié)構(gòu))可以被存儲到計算機(jī)可讀設(shè)置介質(zhì)中,例如,RAM存儲器、磁或者光驅(qū)動器或軟磁盤及類似設(shè)備。另外,本發(fā)明的一些步驟或功能可采用硬件來實現(xiàn),例如,作為與處理器配合從而執(zhí)行各個步驟或功能的電路。
對于本領(lǐng)域技術(shù)人員而言,顯然,本發(fā)明不限于上述示范性實施例的細(xì)節(jié),而且在不背離本發(fā)明的精神或基本特征的情況下,能夠以其他的具體形式實現(xiàn)本發(fā)明。因此,無論從哪一方面來看,均應(yīng)該將實施例看作是示范性的,而且是非限制性的,本發(fā)明的范圍由所附權(quán)利要求而不是上述說明來限定,因此,旨在將落在權(quán)利要求的等同要件的含義和范圍內(nèi)的所有變化涵括在本發(fā)明內(nèi)。不應(yīng)該將權(quán)利要求中的任何附圖標(biāo)記視為限制所涉及的權(quán)利要求。此外,顯然“包括”一詞不排除其他單元或步驟,單數(shù)不排除復(fù)數(shù)。系統(tǒng)權(quán)利要求中陳述的多個單元或裝置也可以由一個單元或裝置通過軟件或者硬件來實現(xiàn)。第一以及第二等詞語用來表示名稱,而并不表示任何特定順序。
雖然前面特別示出并且描述了示例性實施例,但是本領(lǐng)域技術(shù)人員將會理解的是,在不背離權(quán)利要求書的精神和范圍的情況下,在其形式和細(xì)節(jié)方面可以有所變化。這里所尋求的保護(hù)在所附權(quán)利要求書中做了闡述。