• <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 .

            Live555類結(jié)構(gòu)

            轉(zhuǎn)載自:http://blog.sina.com.cn/s/blog_77c6324101018vur.html

            Medium

            live555幾乎所有的處理單元都繼承自Medium類;該類抽象了基本的接口,包括環(huán)境,task和媒體名和媒體查找函數(shù)(lookupByName)以及一些輔助函數(shù)。也包括返回當(dāng)前的環(huán)境類UsageEnvironment,以及環(huán)境指向下一個(gè)TaskToken的指針nextTask等。

            ServerMediaSession  

            對(duì)象的創(chuàng)建函數(shù)在文件DynamicRTSPServer.cpp中。DynamicRTSPServer的繼承關(guān)系是

            DynamicRTSPServer::RTSPServerSupportingHTTPStreaming::RTSPServer::Medium

            DynamicRTSPServerRTSPServer繼承過來,僅僅添加了構(gòu)造器和查找函數(shù),沒有添加其他成員。構(gòu)造器是創(chuàng)建socket然后傳給 RTSPServer,查找是如果沒有已經(jīng)打開的流服務(wù),那么根據(jù)參數(shù)創(chuàng)建流服務(wù)。RTSPServer的屬性有socket,端口號(hào),Session點(diǎn)號(hào),認(rèn)證機(jī)制和ServerMediaSession表。  

            當(dāng)接收到帶有URI的請(qǐng)求后,會(huì)首先創(chuàng)建SMS,調(diào)用 ServerMediaSession的構(gòu)造函數(shù),除了創(chuàng)建時(shí)間戳,拷貝文件名外都是使用的缺省值,并且將初始化子會(huì)話鏈表。當(dāng)處理describe命令時(shí),ServerMediaSession通過調(diào)用generateSDPDescription函數(shù)生成。  NEW_SMS()中創(chuàng)建ServerMediaSession對(duì)象,然后創(chuàng)建相應(yīng)的ServerMediaSubsession并將這個(gè)子會(huì)話對(duì)象添加到添加到會(huì)話對(duì)象中。  

            如子回話是MPEG4,創(chuàng)建MPEG4VideoFileServerMediaSubsession對(duì)象,對(duì)象的繼承關(guān)系:  

            MPEG4VideoFileServerMediaSubsession::FileServerMediaSubsessio ::OnDemandServerMediaSubsession::ServerMediaSubsession ::Medium  

            ServerMediaSession::Medium   

            相關(guān)類介紹:

            ServerMediaSession:添加了子會(huì)話鏈表,SDP描述以及一些媒體相關(guān)處理函數(shù)。  

            ServerMediaSubsession:定義了指向ServerMediaSession的父指針,指向下個(gè)一個(gè)對(duì)象的指針。該媒體的SDP信息,該媒體的讀取定位函數(shù)等。 ServerMediaSubsession類和具體的流播放相關(guān),是個(gè)純虛類。其中startStreamgetStreamParameter是純虛函數(shù)。 

            OnDemandServerMediaSubsession:添加了流source處理和RTPSink處理函數(shù)以及經(jīng)典命名屬性等。封裝seek,pause等處理,把這些接口中clientSessionid號(hào)到這里轉(zhuǎn)換成了FramedSource  該類的成員函數(shù)大部分和ServerMediaSubsession相似,在流媒體完成定位等處理。createNewStreamSourcecreateNewRTPSink是兩個(gè)純虛函數(shù),在子類中必須實(shí)現(xiàn)。類中getStreamParameters方法會(huì)創(chuàng)建streamState。這個(gè)方法在處理RTPSetup命令時(shí)被調(diào)用。  

            FileServerMediaSubsession:增加了文件名和文件大小屬性。

            MPEG4VideoFileServerMediaSubsession:添加了RTPSink屬性,并且實(shí)現(xiàn)了OnDemandServerMediaSubsession中定義的兩個(gè)純虛函數(shù),即創(chuàng)建了sourcesink對(duì)象。這個(gè)sourceMPEG4VideoStreamFramer。該類中還定義了StreamState的內(nèi)部類  

            StreamState:包含了指向OnDemandServerMediaSubsession的引用,RTPSink指針,BasicUDPSink指針,RTCPInstance指針FramedSource指針,fRTPgsfRTCPgs(groupsock).

            StreamState類可以用OnDemandServerMediaSubsessionfLastStreamToken屬性指向。  

            streamState的屬性:  

            OnDemandServerMediaSubsession& fMaster     Boolean fAreCurrentlyPlaying;  

            unsigned fReferenceCount;                                Port fServerRTPPort, fServerRTCPPort; 

            RTPSink* fRTPSink                                                 BasicUDPSink* fUDPSink

            float fStreamDuration;                        unsigned fTotalBW; RTCPInstance* fRTCPInstance;

            FramedSource* fMediaSource                 Groupsock* fRTPgsGroupsock* fRTCPgs;  

             

            Sink  

            Sink類提供了總的媒體播放接口。sink有兩種,一個(gè)是BasicUDPSink,一個(gè)是RTPSink,如果協(xié)商時(shí)沒有RTP信息,那么創(chuàng)建BasicUDPSinkSource Sink通過函數(shù)createNewRTPSinkcreateNewStreamSource。這兩個(gè)函數(shù)在類 OnDemandServerMeidaSubsession中定義為純虛函數(shù),如果媒體類型是mpeg4videofileserver,那么對(duì)應(yīng)的函數(shù)定義在類MPEG4VideoFileServerMediaSubsession中。  

             

             MPEG4ESVideoRTPSink::VideoRTPSink::MultiFramedRTPSink::RTPSink::MediaSink::Medium 

            MediaSink定義中有一個(gè)媒體源指針,主要處理函數(shù)有startplaying(),stopplaying() afterPlayingFunc函數(shù)指針。

            RTPSink類定義了RTP相關(guān)的處理和屬性。包含Socket組對(duì)象,時(shí)間處理系列,統(tǒng)計(jì)計(jì)數(shù)處理等相關(guān)屬性。  

            MultiFramedRTPSinkRTPSink的子類,處理buffer中的多個(gè)RTP包。類中添加了輔助SDP處理和VOPIsPresent屬性和一個(gè)判斷性處理函數(shù)。

            MultiFramedRTPSink類完成多幀組包處理主要函數(shù)有buildAndSendPacketpackFrame

            sendNext afterGettingFrame,這幾個(gè)函數(shù)之間有相互調(diào)用。內(nèi)部有OutPacketBuffer屬性,在創(chuàng)建時(shí)設(shè)定為(1000(希望)1448(最大))大小,其他是統(tǒng)計(jì)或者標(biāo)識(shí)屬性。這個(gè)發(fā)送數(shù)據(jù)包是通過 fRTPInterface.sendPacket(fOutBuf->packet(), fOutBuf->curPacketSize());實(shí)現(xiàn)。這個(gè)fRTPInterface是父類RTPSink的屬性。  

            VideoRTPSink僅僅添加了sdpMediaType處理函數(shù), 返回SDP類型是“video”

            MPEG4ESVideoRTPSink中的處理函數(shù)doSpecialFrameHandling:首先檢測(cè)開頭的四個(gè)字節(jié)看是否是 VOP_START_CODE,該函數(shù)處理RTP的起始/中止標(biāo)識(shí)和添加時(shí)間戳。其他處理包括是否允許分片,是否是起始包判斷以及輔助SDP處理。

            Source  

            createNewStreamSource調(diào)用的是MPEG4VideoFileServerMediaSubsession中的定義。在類 OnDemandServerMediaSubsession中的createNewStreamSource定義是一個(gè)純虛函數(shù)。  

            創(chuàng)建的source是:  

            MPEG4VideoStreamFramer:MPEGVideoStreamFramer:FramedFilter:FramedSource:MediaSource:Medium  

            MediaSourceMedium類的基礎(chǔ)上添加了更多媒體類型判斷,比如是H264mpeg還是jpeg。此外還有一個(gè)MIME類型。  

            FramedSource類處理成幀類型的媒體,比如 mpeg,mjpeg,h264,amr等音頻類型的媒體。函數(shù)分幀處理媒體流,主要處理是getNextFrameafterGetting以及關(guān)閉等媒體處理,此外定義了doGetNextFrame純虛函數(shù),這個(gè)函數(shù)由getNextFrame調(diào)用,處理具體的媒體流。該類還定義了兩個(gè)函數(shù)指針,afterGettingFunc* fAfterGettingFunconCloseFunc* fOnCloseFunc;處理。  該類的屬性包括數(shù)據(jù)拷貝的指針,幀的大小,展示時(shí)間,和播放間隔是否當(dāng)前等待播放標(biāo)志。

            FramedFilterFramedSource的子類,這是個(gè)中間類,主要在類中添加了指向輸入源的指針 FramedSource* fInputSource;  

            MPEGVideoStreamFramer:是FramedFilter的子類,因?yàn)?/span>mpeg是時(shí)間相關(guān)的媒體流,所以在父類的基礎(chǔ)上添加了時(shí)間處理函數(shù),此外還有 continueReadProcessing函數(shù)。主要的屬性有:幀率,結(jié)束標(biāo)志,圖片計(jì)數(shù),展示時(shí)間,GOP時(shí)間相關(guān)內(nèi)容,圖片時(shí)間相關(guān)屬性。此外還有一個(gè)重要的類屬性: MPEGVideoStreamParser用來分析媒體流。  

            MPEG4VideoStreamFramer在父類的基礎(chǔ)上添加了config信息,類如profile等級(jí)信息。在該類的定義文件中還實(shí)現(xiàn)了MPEG4文件分析類,繼承自MPEGVideoStreamParser。處理mepg4相關(guān)信息。  

            ByteStreamFileSource::FramedFileSource::FramedSource  

            source里面有一個(gè)非常重要的StreamParser(流分析)對(duì)象,用來分析,讀取流數(shù)據(jù)。其中afterGettingBytes和不同媒體流處理相關(guān),內(nèi)部有一個(gè)函數(shù)fClientContinueFunc為不同媒體注冊(cè)的函數(shù)。而getNextFrame會(huì)調(diào)用afterGettingBytes  

            MPEG4ESVideoRTPSource:MultiFramedRTPSource:RTPSource:FramedSource:MediaSource:Medium

            RTPSource:添加RTP相關(guān)處理,主要屬性有RTPInterface,時(shí)間標(biāo)簽,處理數(shù)據(jù)幀拆分packetMarkerbit時(shí)間戳頻率和統(tǒng)計(jì)信息。RTP統(tǒng)計(jì)信息:收到的總包數(shù),從reset以后收到的總包數(shù),收到的字節(jié)數(shù),初始化序列標(biāo)識(shí),前面一個(gè)RTP包的時(shí)間戳,接受到的發(fā)送者報(bào)告的NTP時(shí)間,接受到的發(fā)送者報(bào)告時(shí)間。RTPSource僅僅處理RTP協(xié)議相關(guān)的問題。MultiFramedRTPsource中的 networkHandler中會(huì)調(diào)用到這些處理。  

            playing  

            在服務(wù)端的操作中是圍繞著StreamState展開的,OnDemandServerMediaSubsession類中的StartStream通過調(diào)用StreamStatestartplaying開始進(jìn)行,并且初始化rtpSeqNumrtpTimestamp (= rtpSink()->presetNextTimestamp()) 兩個(gè)變量。MediaSink定義了startPlaying,這里通過調(diào)用BasicUDPSink類中的continuePlaying最終調(diào)用到了 buildAndSendPacket,函數(shù)buildAndSendPacket根據(jù)傳入的參數(shù)是否第一幀分別進(jìn)行處理。如果是第一幀,那么取當(dāng)前時(shí)間標(biāo)簽,作為發(fā)送時(shí)間,

            在函數(shù)packFrame中,首先調(diào)用afterGettingFrame1,然后調(diào)用 

            fSource->getNextFrame(fOutBuf->curPtr(), fOutBuf->totalBytesAvailable(),afterGettingFrame, this, ourHandleClosure, this);處理。

            在播放過程中,通過nextTask() envir().taskScheduler().scheduleDelayedTask

            (uSecondsToGo,(TaskFunc*)sendNext, this);每次都會(huì)計(jì)算一個(gè)下次發(fā)送時(shí)間和包添加到調(diào)度中進(jìn)行。  

            讀取媒體數(shù)據(jù)在MPEG4VideoStreamParser類定義中處理。成員函數(shù)parse分析出讀取數(shù)據(jù)的大小。然后讀取一幀數(shù)據(jù),交給打包代碼處理。 

            posted on 2013-09-10 04:10 楊粼波 閱讀(2037) 評(píng)論(0)  編輯 收藏 引用


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


            久久久久亚洲AV无码专区体验| 亚洲午夜久久久精品影院| 久久久精品日本一区二区三区| 久久97久久97精品免视看秋霞| 久久久精品午夜免费不卡| 久久精品国产只有精品66| 欧美亚洲国产精品久久高清| 久久久久久极精品久久久| 久久久久久久久久久精品尤物| 天天爽天天爽天天片a久久网| 国产精品亚洲美女久久久| 久久综合日本熟妇| 久久精品国产网红主播| 国产日韩久久久精品影院首页| 免费一级做a爰片久久毛片潮| 久久久噜噜噜www成人网| 久久久久亚洲AV无码专区桃色| 国产美女亚洲精品久久久综合| 97超级碰碰碰碰久久久久| 久久香蕉国产线看观看精品yw | 国产精品久久久久久影院| 久久久青草青青国产亚洲免观| 久久99国产精品一区二区| 亚洲精品高清一二区久久| 国产精品成人精品久久久| 99久久免费国产精精品| 综合网日日天干夜夜久久| 亚洲欧美日韩精品久久亚洲区 | 亚洲AV无码久久精品蜜桃| 久久午夜无码鲁丝片午夜精品| 99久久国产亚洲高清观看2024| 久久国产亚洲精品无码| 中文无码久久精品| 狠狠色丁香久久婷婷综合| 无码国内精品久久综合88| 亚洲欧美一区二区三区久久| 亚洲va久久久噜噜噜久久男同| 久久精品视屏| 久久综合日本熟妇| 女同久久| 午夜不卡久久精品无码免费|