live555 --RTSP SET_UP PLAY 执行流程分析
2011-07-26 15:17
141 查看
1 handleCmd_SETUP() 在客户端连接成功后,调用RTSPServer::incomingConnectionHandler,在其中创建RTSPClientSession * _pClientSession 进而在其后调用RTSPClientSession ::handleCmd_SETUP()方法 在此方法中执行subsession->getStreamParameters() (注:在DynamicRTSPServer::lookupServerMediaSession会执行 ServerMediaSession*createNewSMS函数从而创建session以及subsession 所以这里的subsession是 H264VideoBufferServerMediaSubsession、ADTSAudioBufferServerMediaSubsession、MP3AudioFileServerMediaSubsession类型 ) 重点分析getStreamParameters函数: 以H264VideoBufferServerMediaSubsession为例 所以这里实际是H264VideoBufferServerMediaSubsession对象 指针调用getStreamParameters函数。 Step1: 生成数据源对象指针 FramedSource* mediaSource = createNewStreamSource(clientSessionId, streamBitrate) 创建source 指针对象。 这里实际是执行H264VideoBufferServerMediaSubsession ::createNewStreamSource根据代码可知 这里函数返 回值实际是H264BufferStreamFramer *类型。 Step2:生成sink指针 rtpSink = createNewRTPSink(rtpGroupsock, rtpPayloadType,mediaSource); 这里实际执行 H264VideoBufferServerMediaSubsession ::createNewRTPSink这里函数实际返回值是 H264VideoRTPSink * 。 Step3: streamToken = fLastStreamToken = new StreamState(*this, serverRTPPort, serverRTCPPort,rtpSink, udpSink,streamBitrate, mediaSource,rtpGroupsock, rtcpGroupsock); 2 handleCmd_PLAY 在函数中调用 Step1: fStreamStates[i].subsession->startStream 即执行OnDemandServerMediaSubsession::startStream 在startStream中执行 Step2: StreamState::startPlaying() 接着执行fRTPSink->startPlaying()(即MediaSink::startPlaying) Step3: H264VideoRTPSink::continuePlaying()函数 如果是首次执行还会生成H264FUAFragmenter* 指针对象,然后执行MultiFramedRTPSink::continuePlaying() Step4: MultiFramedRTPSink buildAndSendPacket(Boolean isFirstPacket) step5: MultiFramedRTPSink:: packFrame() Step6: fSource->getNextFrame 即MediaSource :: getNextFrame Step7: H264BufferStreamFramer::doGetNextFrame() step8: MultiFramedRTPSink::sendPacketIfNecessary(), 这里才真正发送RTP数据包
相关文章推荐
- live555 --RTSP SET_UP PLAY 执行流程分析 .
- live555库的rtsp服务器源码分析总结,流程详解RTSPServer
- live555 接收rtsp视频流流程分析
- 流媒体Live555(五)——openRTSP流程分析
- live555库的rtsp服务器源码分析总结,流程详解RTSPServer
- live555库的rtsp服务器源码分析总结,流程详解RTSPServer
- 查看源码分析activity执行setContentView的流程
- live555库的rtsp服务器源码分析总结,流程详解RTSPServer
- live555客户端程序openrtsp程序流程详细分析
- live555 接收rtsp视频流流程分析
- 流媒体Live555(五)——openRTSP流程分析
- RTSP点播消息流程实例(客户端:VLC, RTSP服务器:LIVE555 Media Server)
- 从源码分析TabLayout的setupWithViewPager方法的原理
- angularjs源码分析之:angularjs执行流程
- servlet代码分析-整个执行流程
- Nginx源码分析—HTTP框架执行流程
- make menuconfig 执行流程分析
- Play之Scala-Web项目运行流程-简单分析(2)
- Fabric源码分析之invoke执行流程及block生成分析
- Nginx源码分析—HTTP框架执行流程