好爽又高潮了毛片免费下载,国产97在线 | 亚洲,亚洲一区二区三区AV无码,特级AAAAAAAAA毛片免费视频

移動(dòng)端

流媒體服務(wù)器之視頻緩沖區(qū)設(shè)計(jì)

2011年10月27日 11:49杭州銳虎科技有限公司點(diǎn)擊量:298

流媒體服務(wù)器之視頻緩沖區(qū)設(shè)計(jì)

一、為什么要設(shè)計(jì)這樣的緩沖區(qū)
a)         為什么要設(shè)計(jì)緩沖區(qū)
流媒體服務(wù)器從前端獲取視頻流,為了達(dá)到分發(fā)的效果,則必須對(duì)每個(gè)要分發(fā)的視頻通道建立一個(gè)緩沖區(qū)。這樣每個(gè)分發(fā)的線程都可以從緩沖區(qū)里讀取數(shù)據(jù),分發(fā)到各個(gè)客戶端。
客戶端在播放時(shí),為了避免數(shù)據(jù)流上來(lái)時(shí)的快慢或者過(guò)大等情況而引起跳幀等現(xiàn)象,則也需要對(duì)每個(gè)播放通道建立一個(gè)緩沖區(qū)。
可以看出,設(shè)計(jì)一個(gè)合理的緩沖區(qū)是有必要的。
b)        一般緩沖區(qū)的不足
傳統(tǒng)的緩沖區(qū)是對(duì)每個(gè)通道建立一個(gè)有N個(gè)BUF的數(shù)組,每個(gè)BUF的大小都是固定的,一個(gè)BUF用于存儲(chǔ)一幀的數(shù)據(jù)。假設(shè)N為100,BUF大小為20K。這樣,每個(gè)通道的都需要占用2000K的內(nèi)存。然而,不可能每幀數(shù)據(jù)都是20K,所以,在緩沖區(qū)中,視頻數(shù)據(jù)不是連續(xù)存放的,這樣存在著很大的內(nèi)存浪費(fèi)。而且,如果前端是高清設(shè)備,并且是變碼流的情況下,則有時(shí)候20K根本不足以保存一幀的數(shù)據(jù)。所以,這時(shí)候,只能擴(kuò)大BUF的大小。這樣做了之后,對(duì)于正常的視頻流,則是更大的浪費(fèi)了內(nèi)存占用。
c)        新版緩沖區(qū)的特點(diǎn)
新版緩沖區(qū)修改了傳統(tǒng)緩沖區(qū)的不足之處。新版緩沖區(qū)為每個(gè)通道事先申請(qǐng)一塊500K的內(nèi)存(大小可變動(dòng),即每個(gè)通道只占用了500K的內(nèi)存),每幀數(shù)據(jù)上來(lái),則連續(xù)存放在申請(qǐng)來(lái)的內(nèi)存中。這樣,即可以充分的利用內(nèi)存,也可以適應(yīng)變碼流的情況。
二、設(shè)計(jì)思想
a)    緩沖區(qū)結(jié)構(gòu)
對(duì)于每個(gè)緩沖區(qū),預(yù)先申請(qǐng)一個(gè)500K的內(nèi)存,然后為其建立一個(gè)動(dòng)態(tài)數(shù)組。數(shù)組是由結(jié)構(gòu)體(見下面內(nèi)容)組成。每個(gè)結(jié)構(gòu)體記錄:填充BUF的時(shí)間,BUF在內(nèi)存中的地址,BUF的大小。
       b)    流程圖
三、核心代碼
a)    BUF結(jié)構(gòu)體
typedef struct tagSENDBUF
{ long                buffertime;            //記錄數(shù)據(jù)的時(shí)間
    LPBYTE            sendbuf;                        //記錄數(shù)據(jù)的起始地址
    unsigned long          buflength;                     //記錄數(shù)據(jù)的長(zhǎng)度
}SENDBUF,*pSendBuf;
b)        通道單元的成員變量
LPBYTE             m_DataBufCache;                //緩沖區(qū)指針
CArray<SENDBUF,SENDBUF&> m_data_buffer;     //動(dòng)態(tài)數(shù)組
LPBYTE                       m_NowBufCache;                //內(nèi)存地址,當(dāng)前寫到哪了
int                                m_Valid_pos;         //有效位置。超過(guò)這個(gè)位置為無(wú)效數(shù)據(jù);
int                                m_BufCount;         //數(shù)組的個(gè)數(shù)
int                       m_read_pos;          //記錄數(shù)組中,該從第幾個(gè)開始寫
c)        填充緩沖區(qū)代碼
MULTIBUFSIZE是個(gè)常量,指申請(qǐng)內(nèi)存的大小。
if ((m_NowBufCache-m_DataBufCache)+dwBufSize>MULTIBUFSIZE)
              {
                     //////////////////////////////////////
//把m_read_pos置為0
                     //////////////////////////////////////
              }
              //如果m_BufCount<m_read_pos+1,則需要?jiǎng)討B(tài)建一個(gè)SENDBUF
              //,記錄要記錄的信息,并加入到數(shù)組中
              if (m_BufCount<m_read_pos+1)
              {
                     SENDBUF _sendbuf;
                     //////////////////////////////////////
//記錄要記錄的信息/
                     //////////////////////////////////////
                     m_data_buffer.Add(_sendbuf);
                     m_BufCount=m_read_pos+1;
              }
              else  
              {
                     /////////////////////////////////////////////
                     //取出m_data_buffer[m_read_pos],
//然后修改其中的內(nèi)容
                     /////////////////////////////////////////////
              }                  
        m_read_pos++;   //把數(shù)組寫位置指向下一個(gè)位置
四、具體應(yīng)用
使用緩沖區(qū):
m_Binding_Channel是指綁定的一個(gè)數(shù)據(jù)流通道。
m_write_pos是指讀通道數(shù)組里的第幾個(gè)SENDBUF。
 
//如果超過(guò)有效位置,則從第0個(gè)開始讀
if (m_write_pos>m_Binding_Channel->m_Valid_pos)
{
m_write_pos=0;
}
      
//檢驗(yàn)m_Binding_Channel->m_data_buffer[m_write_pos]里數(shù)據(jù)的合法性
//比如時(shí)間,BUG大小等是否符合要求
    
然后就可以使用m_Binding_Channel->m_data_buffer[m_write_pos]里面記錄的信息了。
 
  銳虎科技   研發(fā)部
        銳虎科技,專注安防監(jiān)控平臺(tái)軟件設(shè)計(jì)
 
 
版權(quán)與免責(zé)聲明: 凡本網(wǎng)注明“來(lái)源:智慧城市網(wǎng)”的所有作品,均為浙江興旺寶明通網(wǎng)絡(luò)有限公司-智慧城市網(wǎng)合法擁有版權(quán)或有權(quán)使用的作品,未經(jīng)本網(wǎng)授權(quán)不得轉(zhuǎn)載、摘編或利用其它方式使用上述作品。已經(jīng)本網(wǎng)授權(quán)使用作品的,應(yīng)在授權(quán)范圍內(nèi)使用,并注明“來(lái)源:智慧城市網(wǎng)www.cmr6829.com”。違反上述聲明者,本網(wǎng)將追究其相關(guān)法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明自其它來(lái)源(非智慧城市網(wǎng)www.cmr6829.com)的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或和對(duì)其真實(shí)性負(fù)責(zé),不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品第一來(lái)源,并自負(fù)版權(quán)等法律責(zé)任。

編輯精選

更多

本站精選

更多

專題推薦

更多

名企推薦

更多

浙公網(wǎng)安備 33010602000006號(hào)