一、功能描述
RTSP会话的建立有规定了一套流程,标准定义了5个步骤,分别是:OPTION、DESCRIBE、SETUP 、PLAY和TEARDOWN;其中SETUP 和PLAY是必须的步骤。Rtsp播放器必须与rtsp服务器完成上述流程,服务器才会开始媒体数据流的传输。
二、源码和实例分析
官方demo的testRTSPClient.cpp的main非常简单,只有几句代码,其中最关键的是openURL函数,BasicTaskScheduler和BasicUsageEnvironment已经分析过。openURL是与rtsp服务器建立会话的起点。
2.1 main函数
int main(int argc, char** argv) {
// Begin by setting up our usage environment:
TaskScheduler* scheduler = BasicTaskScheduler::createNew();
UsageEnvironment* env = BasicUsageEnvironment::createNew(*scheduler);
for (int i = 1; i <= argc-1; ++i) {
openURL(*env, argv[0], argv[i]);
}
env->taskScheduler().doEventLoop(&eventLoopWatchVariable);
return 0;
}
2.2 Describe命令
函数openURL也很简单,ourRTSPClient之前也分析过了;先创建改类实例,然后发起Describe的命令,等待服务器应答,应答回调函数continueAfterDESCRIBE。
void openURL(UsageEnvironment& env, char const* progName, char const* rtspURL) {
RTSPClient* rtspClient = ourRTSPClient::createNew(env, rtspURL,
RTSP_CLIENT_VERBOSITY_LEVEL, progName);
++rtspClientCount;
rtspClient->sendDescribeCommand(continueAfterDESCRIBE);
}
发送的命令实例:
服务器应答: