- 功能描述
RTSP中的一个步骤,describe命令可以让rtsp播控器从服务器获取媒体资源的信息;根据应答的SDP描述建立session和对应的音视频的subsession;
抓包获取describe命令应答如下:
每行都有携带不同的信息。其中最重要的是m开头的两行内容,描述了音视频媒体传输使用的协议等信息m=video 0 RTP/AVP 96 和 m=audio 0 RTP/AVP 14。
二、代码分析
命令describe的应答回调函数continueAfterDESCRIBE,主要的操作建立session和subsession,然后遍历subsession,初始化和发送setup命令。取主要的代码分析。
void continueAfterDESCRIBE(RTSPClient* rtspClient, int resultCode, char* resultString) {
…
// 根据应答的sdp建立session 和subsession
// MediaSession* newSession = new MediaSession(env);
// newSession->initializeWithSDP(sdpDescription)
scs.session = MediaSession::createNew(env, sdpDescription);
…
setupNextSubsession(rtspClient);
…
}
解析sdp内容,建立MediaSession
Boolean MediaSession::initializeWithSDP(char const* sdpDescription) {
// 解析每行内容,碰到m开头的进行特殊处理
while (1) {
// 获取一行字符串
if (!parseSDPLine(sdpLine, nextSDPLine)) return False;
//##### We should really check for the correct SDP version (v=0)
// m开头的退出
if (sdpLine[0] == 'm') break;
sdpLine