RTSP Server(LIVE555)源码分析(五)-PLAY信令
主要分析RTSPServer::RTSPClientSession针对客户端PLAY事件处理
一、 PLAY信令,handleCmd_withinSession源码解析
1)步骤1.03,当RTSP客户端发送PLAY信令时,可能携带"Range:"字段,npt=0.000,代表从0s开始到结束,
npt=10-15,即从10s开始到15s结束,详细可以看RTSP协议相关文档,网络信令如下:
2)步骤1.08~1.09,关于streamState->startPlaying(...),需要区分视频/音频来分析;
① 如果是视频,streamState->startPlaying(...),源码代码如下:
A、中间不做详细分析,fUDPSink正常情况不会被创建,在SETUP信令步骤1.06中
getStreamParameters中异常情况时才被创建,具体可看源码实现。所以最后肯定走
fRTPSink->startPlaying(...),时序图如下:
B、分析下步骤⑥中,关于fOurFragmenter = new ourH26xFUAFragmenter(...),源码如下:
另外需要注意fSource本来指向ourVideoRealStreamSource类,创建ourH26xFUAFragmenter
类后,就将fSource指向了ourH26xFUAFragmenter;
C、ourH26xFUAFragmenter类是公司二次开发重写后的,framerSource->setVidBuffer(...)创建
编码数据队列,源码如下:
D、针对视频,步骤⑭,doGetNextFrame进行分析,该接口是虚函数,会调度到
ourH26xFUAFragmenter类中,源码如下:
E、接着分析fInputSource->getNextFrame(...),时序图如下:
② 如果是音频,streamState->startPlaying(...),和视频类似,暂不做详细分析;