亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種直播流的快速緩沖方法

文檔序號(hào):7852080閱讀:1072來源:國(guó)知局
專利名稱:一種直播流的快速緩沖方法
技術(shù)領(lǐng)域
本發(fā)明涉及網(wǎng)絡(luò)多媒體技術(shù)領(lǐng)域,尤其涉及一種用于移動(dòng)通信網(wǎng)絡(luò)的直播流快速緩沖的方法。
背景技術(shù)
在現(xiàn)場(chǎng)直播類的流服務(wù)中,傳統(tǒng)PC應(yīng)用上可以使用PC的大緩存完美處理平滑播放的問題。然而手機(jī)上由于內(nèi)存相對(duì)較小,需要服務(wù)端更多的參與平滑播放的處理,所以在服務(wù)端需要緩沖一大部分直播數(shù)據(jù)以保證隨時(shí)連接的手機(jī)都有數(shù)據(jù)可以播放,對(duì)每個(gè)連接都需要不同的緩沖讀取位置和連續(xù)播放的處理,每次讀取位置的查找性能將成為服務(wù)主要 性能開銷。傳統(tǒng)的音視頻流服務(wù)中,對(duì)于成幀的直播類服務(wù),在服務(wù)端設(shè)計(jì)一個(gè)音視頻流的緩沖池,通常的緩沖隊(duì)列設(shè)計(jì)是以stl (標(biāo)準(zhǔn)模板庫(kù))實(shí)現(xiàn)中的list (隊(duì)列)為基礎(chǔ),結(jié)合一些數(shù)據(jù)元素構(gòu)成數(shù)據(jù)基礎(chǔ)節(jié)點(diǎn),然后采用“去頭存尾”的方式對(duì)緩沖隊(duì)列進(jìn)行數(shù)據(jù)循環(huán)更新。當(dāng)需要存取數(shù)據(jù)時(shí),根據(jù)數(shù)據(jù)基礎(chǔ)節(jié)點(diǎn)的時(shí)間戳或者序列號(hào)為關(guān)鍵值對(duì)list進(jìn)行查找,由于隊(duì)列循環(huán)更新,查找時(shí)除了在完全匹配情況下,其他情況不能使用Stl中的一些既有算法,只能采用循環(huán)遍歷的方法進(jìn)行,時(shí)間復(fù)雜度為o(n),當(dāng)緩沖隊(duì)列較長(zhǎng),同時(shí)需要服務(wù)大并發(fā)量用戶時(shí),致使性能開銷很大。
公開日為2011年07月27日、公開號(hào)為CN102137124A的專利文獻(xiàn)公開了這樣的技術(shù)方案,一種P2P流媒體直播方法和系統(tǒng),該方法包括監(jiān)測(cè)直播流媒體的數(shù)據(jù)緩沖區(qū)的狀態(tài);當(dāng)數(shù)據(jù)緩沖區(qū)的數(shù)據(jù)未填滿數(shù)據(jù)安全區(qū)域時(shí),客戶節(jié)點(diǎn)優(yōu)先向補(bǔ)償服務(wù)器請(qǐng)求對(duì)應(yīng)的直播流媒體數(shù)據(jù);當(dāng)數(shù)據(jù)緩沖區(qū)的數(shù)據(jù)填滿數(shù)據(jù)安全區(qū)域時(shí),客戶節(jié)點(diǎn)根據(jù)上層節(jié)點(diǎn)的評(píng)分向上層節(jié)點(diǎn)請(qǐng)求直播流媒體數(shù)據(jù)。該技術(shù)方案需要增加補(bǔ)償服務(wù)器等設(shè)備,以及檢測(cè)緩沖區(qū)、對(duì)上層節(jié)點(diǎn)進(jìn)行評(píng)分分級(jí)等操作,使得系統(tǒng)結(jié)構(gòu)復(fù)雜、過程繁瑣,性能開銷大。

發(fā)明內(nèi)容
本發(fā)明提供一種直播流的快速緩沖方法,它使得每個(gè)連接的緩沖位置查找復(fù)雜度為0(1),在實(shí)現(xiàn)了快速緩沖的同時(shí),有效地減少了服務(wù)的性能開銷。本發(fā)明針對(duì)現(xiàn)有技術(shù)問題主要是通過下述技術(shù)方案得以解決的,一種直播流的快速緩沖方法,包括
A.在移動(dòng)流媒體系統(tǒng)中設(shè)置直播流緩沖池,對(duì)流媒體數(shù)據(jù)進(jìn)行緩沖,以供移動(dòng)終端平滑播放直播流;
B.采用數(shù)組的方式構(gòu)建循環(huán)緩沖隊(duì)列,以連續(xù)的數(shù)據(jù)標(biāo)識(shí)序列號(hào)(Seq)作為基點(diǎn)來定位數(shù)據(jù)存放位置;
C.按存放位置對(duì)流媒體數(shù)據(jù)進(jìn)行緩沖存取操作。在移動(dòng)流媒體系統(tǒng)中,比如在手機(jī)移動(dòng)電視系統(tǒng)中,設(shè)置較大容量的緩沖池。在緩沖隊(duì)列的查找方法上,查找時(shí)間為常量的算法是最快的。因此,本技術(shù)方案采用數(shù)組下標(biāo)訪問的方式,使查找時(shí)間為常量,查找時(shí)間不會(huì)隨數(shù)組的大小而變化,因而效率最高,時(shí)間復(fù)雜度為常數(shù)階0(1)。操作中,以數(shù)組為數(shù)據(jù)基礎(chǔ)單元集合的存儲(chǔ)形式,在數(shù)據(jù)的保存上不使用STL (標(biāo)準(zhǔn)模板庫(kù))中的pushback (從隊(duì)尾處存入)等通用方式,而是采用了非連續(xù)的存入方式。取數(shù)據(jù)時(shí),根據(jù)數(shù)據(jù)標(biāo)識(shí)序列號(hào)對(duì)數(shù)組長(zhǎng)度的取模操作,確定數(shù)據(jù)基礎(chǔ)單元在數(shù)組中的存放位置。這種緩沖隊(duì)列設(shè)計(jì),可以允許每 個(gè)連接用戶在查找某個(gè)數(shù)據(jù)基礎(chǔ)單元時(shí),在完全命中情況下時(shí)間復(fù)雜度為0(1),在不完全命中情況下為0(l+n/3)。有效地加快了查找速度,減少了 CPU的工作量。作為優(yōu)選,數(shù)組是指針數(shù)組,數(shù)組長(zhǎng)度根據(jù)所需的緩沖隊(duì)列大小確定。數(shù)組的長(zhǎng)度根據(jù)緩沖隊(duì)列實(shí)際需求來確定。作為優(yōu)選,緩沖隊(duì)列大小根據(jù)設(shè)定時(shí)長(zhǎng)以及視頻幀率確定。比如可以根據(jù)15分鐘時(shí)長(zhǎng)以及視頻幀率計(jì)算緩沖隊(duì)列大小。作為優(yōu)選,數(shù)組的基礎(chǔ)單元包括數(shù)據(jù)標(biāo)識(shí)序列號(hào)(Seq)、時(shí)間戳(PtS)和一個(gè)指向?qū)嶋H流媒體數(shù)據(jù)的指針。本發(fā)明帶來的有益效果是,采用非循環(huán)的隊(duì)列形式構(gòu)建循環(huán)隊(duì)列,利用定點(diǎn)存取的方式進(jìn)行緩沖存取處理,即采用數(shù)組的方式構(gòu)建循環(huán)緩沖隊(duì)列,利用連續(xù)seq為基點(diǎn)快速定位數(shù)據(jù)存放位置,使循環(huán)緩沖隊(duì)列的連續(xù)查找時(shí)間復(fù)雜度降為0(1)。在實(shí)現(xiàn)了快速緩沖的同時(shí),有效地減少了服務(wù)的性能開銷。

發(fā)明內(nèi)容
下面通過實(shí)施例,并結(jié)合附圖,對(duì)本發(fā)明的技術(shù)方案作進(jìn)一步具體說明。實(shí)施例I :如圖I所示,本發(fā)明是一種直播流的快速緩沖方法,基本流程包括 步驟101,在服務(wù)器上設(shè)置緩沖池,對(duì)流媒體數(shù)據(jù)進(jìn)行緩沖,以供移動(dòng)終端平滑播放直
播流;
步驟102,根據(jù)設(shè)定時(shí)長(zhǎng)以及視頻幀率確定緩沖隊(duì)列大??;
步驟103,存數(shù)據(jù),流媒體數(shù)據(jù)的基礎(chǔ)單元根據(jù)序列號(hào)Seq值存入數(shù)組中對(duì)應(yīng)的位置;步驟104,取數(shù)據(jù),根據(jù)數(shù)據(jù)標(biāo)識(shí)序列號(hào)Seq對(duì)數(shù)組長(zhǎng)度的取模操作,確定流媒體數(shù)據(jù)的基礎(chǔ)單元在數(shù)組中的存放位置;
按上述存、取位置對(duì)流媒體數(shù)據(jù)進(jìn)行緩沖存取處理。圖2所示為數(shù)據(jù)結(jié)構(gòu)圖,緩沖隊(duì)列主要由三部分構(gòu)成
a. 一個(gè)指針數(shù)組,其數(shù)組長(zhǎng)度根據(jù)所需的緩沖隊(duì)列大小(實(shí)際需求)而定,本實(shí)施例中是根據(jù)15分鐘時(shí)長(zhǎng)以及視頻幀率計(jì)算得到。b.流媒體數(shù)據(jù)的基礎(chǔ)單元結(jié)構(gòu)體,該結(jié)構(gòu)體包括有seq序列號(hào)、pts時(shí)間戳和一個(gè)指向?qū)嶋H流媒體數(shù)據(jù)的指針。c.流媒體數(shù)據(jù)的物理內(nèi)存存放結(jié)構(gòu),此結(jié)構(gòu)的實(shí)現(xiàn)可以多種多樣,本實(shí)施例使用連續(xù)的內(nèi)存塊存儲(chǔ),由流媒體數(shù)據(jù)的基礎(chǔ)單元結(jié)構(gòu)體b來區(qū)分不同的數(shù)據(jù)幀。實(shí)施例2,采用類C語(yǔ)言實(shí)現(xiàn)緩沖的數(shù)據(jù)保存、數(shù)據(jù)查找的方法
I、數(shù)據(jù)保存方法
void Push (BStruct氺 package){
/*ppAarray為圖一中表示的A數(shù)組*/ if (ppAarray 為空)
{
/*創(chuàng)建ppAarray數(shù)組*/ ppAarray = new BStruct*[maxLen];
}
/*獲取BStruct結(jié)構(gòu)內(nèi)的seq序列號(hào)元素*/
DWORD seq = package_>seq(); /*這步是關(guān)鍵,流媒體數(shù)據(jù)基礎(chǔ)單元根據(jù)自身的數(shù)據(jù)標(biāo)識(shí)序列號(hào)Seq存入數(shù)組中相應(yīng)位置的單元內(nèi),序列號(hào)超出數(shù)組最大長(zhǎng)度的,對(duì)最大長(zhǎng)度取余*/ppAarray [seq 對(duì) manLen 取余]=package;
/*更新當(dāng)前隊(duì)列的隊(duì)尾*/
TailIdx = seq % maxLen;
/*隊(duì)列頭部被尾部咬到了,頭得往前挪一下*/ if (seq > maxLen && HeadIdx == Tailldx){
HeadIdx = (Tailldx + I) % maxLen;
}
}
數(shù)據(jù)保存方法中的關(guān)鍵是流媒體數(shù)據(jù)的基礎(chǔ)單元要根據(jù)數(shù)據(jù)標(biāo)識(shí)序列號(hào)Seq值保存入數(shù)組中對(duì)應(yīng)的位置,數(shù)組本身不需要進(jìn)行內(nèi)部數(shù)據(jù)移位等操作,這相對(duì)于動(dòng)態(tài)數(shù)組或LIST的pushback來說,性能上體現(xiàn)也較佳。 2、數(shù)據(jù)查找方法
void Find (int seq, int pts, DataType& refVec)
{
/*DataType為BStruct指針的動(dòng)態(tài)數(shù)組類型*/ if (maxLen <=0){
/*判斷緩沖隊(duì)列是否有數(shù)據(jù),沒有則直接返回失敗*/return;
}
int dwptsprv = pts;
/*根據(jù)seq參數(shù)計(jì)算查找數(shù)據(jù)在數(shù)組中存放的位置*/ int dwindex = seq % maxLen;
BStruct* pPack = NULL;
/*如果序列號(hào)為0,表示從隊(duì)列頭開始*/ if (0 == dwseqprv){
dwindex = HeadIdx % maxLen;
}
/*從數(shù)組中直接獲取流媒體數(shù)據(jù)基礎(chǔ)單元*/pPack = ppAarray[dwindex]; if (pPack) {
/*判斷首次匹配的數(shù)據(jù)是否完全匹配*/
DWORD packpts = pPack_>GetPts(); if (packpts >= dwptsprv){
refVec. push_back(pPack);
}
}else {/*如果首次匹配位置上數(shù)組中并沒有存入數(shù)據(jù),則比較隊(duì)列尾部數(shù)據(jù)是
否有效*/
pPack = ppAarray[Tailldx]; if (seq >= pPack_>GetSeq()){
/*如果尾部數(shù)據(jù)時(shí)間戳還小于要求值,說明數(shù)據(jù)緩沖未準(zhǔn)備好,直
接退出查找*/
return;
}
}
/*首次匹配不命中情況下,在首次匹配的位置后進(jìn)行遍歷查找*/ for (;;) {
/*從dwindex位置開始到TaiIIdx之間遍歷匹配查找,這個(gè)操作只會(huì)在首次查找時(shí)出現(xiàn),后續(xù)的查找由于seq的連續(xù)存取前提條件,都會(huì)進(jìn)入完全匹配的邏輯*/
}
}
有了數(shù)據(jù)保存時(shí)按Seq存入的基礎(chǔ),數(shù)據(jù)的取出就變得非常簡(jiǎn)單,根據(jù)Seq對(duì)數(shù)組長(zhǎng)度的取模操作,就可以確定流媒體數(shù)據(jù)基礎(chǔ)單元在數(shù)組中的存放位置。由于緩沖隊(duì)列是循環(huán)更新的緣故,首次查找時(shí),有可能不會(huì)完全匹配,需要從隊(duì)列的頭部開始往下遍歷,這種情況下最長(zhǎng)的查找距離是隊(duì)列的長(zhǎng)度n,當(dāng)?shù)诙尾檎視r(shí),由于seq是連續(xù)的,查找長(zhǎng)度將會(huì)變?yōu)镮。所以本發(fā)明具有以下特征采用非循環(huán)的隊(duì)列形式構(gòu)建循環(huán)隊(duì)列,利用定點(diǎn)存取的方式進(jìn)行緩沖存取處理,即采用數(shù)組的方式構(gòu)建循環(huán)緩沖隊(duì)列,利用連續(xù)seq為基點(diǎn)快速定位數(shù)據(jù)存放位置,使循環(huán)緩沖隊(duì)列的連續(xù)查找時(shí)間復(fù)雜度降為0(1)。在實(shí)現(xiàn)了快速緩沖的同時(shí),有效地減少了服務(wù)的性能開銷。


圖I所示為本發(fā)明的一種基本流程 圖2所示為本發(fā)明的一種數(shù)據(jù)結(jié)構(gòu)圖。
權(quán)利要求
1.一種直播流的快速緩沖方法,其特征在于包括 A.在移動(dòng)流媒體系統(tǒng)中設(shè)置直播流緩沖池,對(duì)流媒體數(shù)據(jù)進(jìn)行緩沖,以供移動(dòng)終端平滑播放直播流; B.采用數(shù)組的方式構(gòu)建循環(huán)緩沖隊(duì)列,以連續(xù)的數(shù)據(jù)標(biāo)識(shí)序列號(hào)作為基點(diǎn)來定位流媒體數(shù)據(jù)存放位置; C.按所述存放位置對(duì)流媒體數(shù)據(jù)進(jìn)行緩沖存取操作。
2.根據(jù)權(quán)利要求I所述一種直播流的快速緩沖方法,其特征在于所述數(shù)組是指針數(shù)組,數(shù)組長(zhǎng)度根據(jù)所需的緩沖隊(duì)列大小確定。
3.根據(jù)權(quán)利要求2所述一種直播流的快速緩沖方法,其特征在于所述緩沖隊(duì)列大小根據(jù)設(shè)定時(shí)長(zhǎng)以及視頻幀率確定。
4.根據(jù)權(quán)利要求I或2所述一種直播流的快速緩沖方法,其特征在于所述數(shù)組的基礎(chǔ)單元包括數(shù)據(jù)標(biāo)識(shí)序列號(hào)、時(shí)間戳和一個(gè)指向?qū)嶋H流媒體數(shù)據(jù)的指針。
全文摘要
本發(fā)明公開了一種直播流的快速緩沖方法,它采用非循環(huán)的隊(duì)列形式構(gòu)建循環(huán)隊(duì)列,利用定點(diǎn)存取的方式進(jìn)行緩沖存取處理,即采用數(shù)組的方式構(gòu)建循環(huán)緩沖隊(duì)列,利用連續(xù)seq為基點(diǎn)快速定位數(shù)據(jù)存放位置,使循環(huán)緩沖隊(duì)列的連續(xù)查找時(shí)間復(fù)雜度降為O(1)。在實(shí)現(xiàn)了快速緩沖的同時(shí),有效地減少了服務(wù)的性能開銷。步驟包括在移動(dòng)流媒體系統(tǒng)中設(shè)置直播流緩沖池,對(duì)流媒體數(shù)據(jù)進(jìn)行緩沖,以供移動(dòng)終端平滑播放直播流;采用數(shù)組的方式構(gòu)建循環(huán)緩沖隊(duì)列,以連續(xù)的數(shù)據(jù)標(biāo)識(shí)序列號(hào)(Seq)作為基點(diǎn)來定位數(shù)據(jù)存放位置。
文檔編號(hào)H04N21/433GK102752193SQ20121016697
公開日2012年10月24日 申請(qǐng)日期2012年5月23日 優(yōu)先權(quán)日2012年5月23日
發(fā)明者羊君 申請(qǐng)人:杭州斯凱網(wǎng)絡(luò)科技有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1