• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            牽著老婆滿街逛

            嚴(yán)以律己,寬以待人. 三思而后行.
            GMail/GTalk: yanglinbo#google.com;
            MSN/Email: tx7do#yahoo.com.cn;
            QQ: 3 0 3 3 9 6 9 2 0 .

            jrtplib 分包處理

            轉(zhuǎn)載自:http://blog.csdn.net/sxcong/article/details/3736354

            聽說jrtplib寫的不錯(cuò),終于找到時(shí)間下來看看。
            下載,直接用VC6編譯,很容易。
            然后打開VC,建立工程,測(cè)試examples下那幾個(gè)收發(fā)程序,的確用起來很簡(jiǎn)單。想想以前都是自己封裝UDP,現(xiàn)在的程序員真幸福。
            不過,在發(fā)送視頻數(shù)據(jù)時(shí)出了問題,跟蹤進(jìn)去看了一下,里面設(shè)置最大幀數(shù)據(jù)長(zhǎng)度為1400。于是自己設(shè)置最大為32X1024,跟進(jìn)去還不行。
            原來是內(nèi)部沒有分包處理,超過上限就不允許發(fā)了。
            隨便搜了一個(gè),有個(gè)叫SmartView的視頻會(huì)議源碼,是改寫jrtplib的RTPSession的SendPacket,在這里分包。很不錯(cuò)的想法。
            不過又一想,jrtplib,本身是做為lib提供的,雖然可以改寫其代碼,但肯定與作者初衷不符。
            于是找到利用這個(gè)庫(kù)的同作者寫的開源項(xiàng)目emiplib,夠復(fù)雜的,把ffmpeg也集進(jìn)來了。先不管,直接搜索關(guān)鍵字RTPSession和SendPacket,發(fā)現(xiàn)他發(fā)
            送的是自己封裝的一個(gè)類MIPRTPSendMessage,其父類是MIPMessage。看到這想都不用想,作者肯定是在發(fā)送之前先進(jìn)行了處理,形成了自己定義格式的Message再發(fā)送。
            收到后在形成MIPRTPRecvMessage。這應(yīng)該是是最正規(guī)的寫法。
            不過,想想這個(gè)庫(kù),雖然沒用過,但很多年前就聽人說過,肯定考慮過這些問題。沒有文件,就仔細(xì)看頭文件,終于發(fā)現(xiàn)了SendPacketEx這個(gè)函數(shù),一大堆英文說明,
            剛才沒仔細(xì)看:
                /** Sends the RTP packet with payload /c data which has length /c len.
                 *  The packet will contain a header extension with identifier /c hdrextID and containing data 
                 *  /c hdrextdata. The length of this data is given by /c numhdrextwords and is specified in a 
                 *  number of 32-bit words. The used payload type, marker and timestamp increment will be those that
                 *  have been set using the /c SetDefault member functions.
                 */
                 這回看清楚了吧,對(duì),就是那個(gè)hdrextdata,是分包的數(shù)據(jù),是長(zhǎng)度,hdrextID是其ID。這樣,發(fā)送數(shù)據(jù)的時(shí)候,先分好包,再調(diào)用SendPacketEx就行了。
                 
                 發(fā)送沒問題了,再說接收。也不看類結(jié)構(gòu)了,參考亞歷山大方法,直接搜索recvfrom。在
                 RTPUDPv4Transmitter::PollSocket這里找到了,然后緊接就是RTPRawPacket *pack;pack = RTPNew(....
                 很好,收到后先封裝成了RTPRawPacket。但是,最終和用戶打交道的是RTPPacket,于是看它的頭文件,一眼就看到:
                     /** If a header extension is present, this function returns the extension identifier. */
                uint16_t GetExtensionID() const                                                        { return extid; }

                /** Returns the length of the header extension data. */
                uint8_t *GetExtensionData() const                                                    { return extension; }
                
                /** Returns the length of the header extension data. */
                size_t GetExtensionLength() const                                                    { return extensionlength; }
                
                對(duì)頭,這就是我們需要的。
                但是,這三個(gè)值是怎么出現(xiàn)的呢?回頭再看從RTPRawPacket-->RTPPacket.
                 處理的過程看起來比較復(fù)雜,就先找外面的回調(diào),應(yīng)該在ProcessPolledData里面。
                 然后,看到了ProcessRawPacket(...),參數(shù)都不用看,從函數(shù)名就知道這是我們想要了解的東西了。其實(shí)不知道這個(gè)也沒關(guān)系,我們只需要調(diào)用上面那三個(gè)函數(shù)
                 就可以在外面重新組包了。
                 
                 兩瓶酒的時(shí)間分析結(jié)束。不過只是聽說這個(gè)庫(kù)寫的不錯(cuò),隨手記下來看看,實(shí)在沒興趣動(dòng)手用代碼來實(shí)現(xiàn)了。有哪位兄弟能寫出代碼附上就好了。

            posted on 2013-09-03 14:36 楊粼波 閱讀(2501) 評(píng)論(0)  編輯 收藏 引用


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            久久综合香蕉国产蜜臀AV| 亚洲欧美伊人久久综合一区二区 | 久久人人爽人人人人片av| 久久天天日天天操综合伊人av| 亚洲国产精品人久久| 久久天天躁狠狠躁夜夜2020| 亚洲狠狠婷婷综合久久久久| 国产成人综合久久综合| 亚洲国产精品无码久久九九| 日本人妻丰满熟妇久久久久久| 色综合色天天久久婷婷基地| 亚洲天堂久久久| 国产精品女同久久久久电影院| 久久婷婷人人澡人人| 久久综合给久久狠狠97色| 国产成人无码精品久久久免费| 久久精品一区二区三区AV| 99久久亚洲综合精品成人| 亚洲中文久久精品无码ww16| 国产高潮国产高潮久久久91 | 久久精品中文字幕有码| 久久精品亚洲中文字幕无码麻豆 | 成人精品一区二区久久| 久久久久亚洲av成人网人人软件| 亚洲成色999久久网站| 欧美丰满熟妇BBB久久久| 久久久一本精品99久久精品88| 国内精品久久久久影院网站| 久久青青草原国产精品免费 | 久久99精品国产| 亚洲精品国精品久久99热一| 久久www免费人成看片| 久久综合九色综合久99| 精品熟女少妇aⅴ免费久久| 老司机国内精品久久久久| 69久久精品无码一区二区| 久久精品国产亚洲av日韩| 欧洲人妻丰满av无码久久不卡| 亚洲AV无码一区东京热久久| 久久久久久精品免费免费自慰| 久久精品卫校国产小美女|