RTSP Server(LIVE555)源码分析(三)-DESCRIBE信令
主要分析RTSPServer::RTSPClientSession针对客户端DECCRIBE信令处理。
一、回调函数incomingRequestHandler分析
回顾一下rtsp客户端session创建过程,
步骤1.0,new RTSPClientSession--->incomingRequestHandler时序图如下:

1)步骤1.4,incomingRequestHandler1,主要通过readSocket接收rtsp客户端socket信令消息,以及
接收数据后调用handleRequestBytes(bytesRead)解析rtsp客户端具体信令字段等,源码实现如下:

2)步骤1.8,parseRTSPRequestString,如rtsp://xxx/NBA20230207B1_H,最后解析后
urlSuffix=NBA20230207B1_H。
3)步骤1.9,通过步骤1.4解析来自RTSP客户端不同的信令,如:OPTIONS、DESCRIBE、SETUP、
PLAY、PAUSE、TEARDOWN等。
     ① 如果是OPTIONS信令,则调用handleCmd_OPTIONS来处理,OPTIONS信令比较简单,当RTSP
         客户端请求时,RTSP服务端将固定字符串(存于allowedCommandNames该字段中)发送给RTSP
         客户端。源码字符串如下:
 
② 如果是DESCRIBE信令,则调用handleCmd_DESCRIBE来处理,后续会详细分析。
③ 如果是SETUP信令,则调用handleCmd_SETUP来处理,后续会详细分析。
     ④ 如果是PLAY、PAUSE、TEARDOWN、GET_PARAMETER、SET_PARAMETER信令,则调用
         handleCmd_withinSession来处理,后续会详细分析。
⑤ 如果是http://xxx/xxx这种,则调用parseHTTPRequestString来解析,http协议不做详细分析。
二、handleCmd_DESCRIBE 源码解析

1)步骤2.17,分析如下:
① 如果是视频使能,即pStreamInfo[idx].videoCfg.enable = true,则调用
sms->addSubsession(ourVideoRealServerMediaSubsession::createNew(env, 
&pStreamInfo[idx].videoCfg, reuseSource, pEventCb, pVidSrcBuf[idx],OURVIDEOBUFFERSIZE)),
OURVIDEOBUFFERSIZE=3x1024x1024,其中ourVideoRealServerMediaSubsession::createNew(...)
是公司进行了二次开发扩展,源码如下:

       从上图可以看到,其中调用回调函数fpEventCb(fStreamId,
RTSPServerEvent_RuestOpenVideoSession, NULL);主要通知主控来打开视频编码器。
② 如果是音频使能,即pStreamInfo[idx].audioCfg.enable = true,则调用
sms->addSubsession(ourAudioRealServerMediaSubsession::createNew(env, idx, 
&pStreamInfo[idx].audioCfg, reuseSource, pEventCb)),其中
ourAudioRealServerMediaSubsession::createNew(...)是公司进行了二次开发扩展,源码如下:

针对上述①②做下详细分析,时序图如下:

2)步骤2.24,生成SDP媒体会话信息给RTSP客户端,session->generateSDPDescription(),
SDP信息一般携带音视频协议、传输协议、payloadType、音视频传输通道track1、track2,传
输端口等。具体信息可查看SDP相关文档。

 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号