RTSP Server(LIVE555)源码分析(三)-DESCRIBE信令
阅读原文时间:2023年07月08日阅读:2

主要分析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相关文档。