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

行業(yè)產(chǎn)品

  • 行業(yè)產(chǎn)品

杭州銳虎科技有限公司


當(dāng)前位置:杭州銳虎科技有限公司>技術(shù)文章>流媒體服務(wù)器之視頻緩沖區(qū)設(shè)計(jì)
技術(shù)文章

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

閱讀:306發(fā)布時(shí)間:2011-10-27

流媒體服務(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)體(見(jiàn)下面內(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è)開(kāi)始寫
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è)開(kāi)始讀
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ì)
 
 

智慧城市網(wǎng) 設(shè)計(jì)制作,未經(jīng)允許翻錄必究 .? ? ? Copyright(C)?2021 http://www.cmr6829.com,All rights reserved.

以上信息由企業(yè)自行提供,信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性由相關(guān)企業(yè)負(fù)責(zé),智慧城市網(wǎng)對(duì)此不承擔(dān)任何保證責(zé)任。 溫馨提示:為規(guī)避購(gòu)買風(fēng)險(xiǎn),建議您在購(gòu)買產(chǎn)品前務(wù)必確認(rèn)供應(yīng)商資質(zhì)及產(chǎn)品質(zhì)量。

會(huì)員登錄

×

請(qǐng)輸入賬號(hào)

請(qǐng)輸入密碼

=

請(qǐng)輸驗(yàn)證碼

收藏該商鋪

請(qǐng) 登錄 后再收藏

提示

您的留言已提交成功!我們將在第一時(shí)間回復(fù)您~