live555必须先建立RTSP服务端,用于监听客户端的请求。live555是如何建立RTSP服务端的?
1 首先要创建一个DynamicRTSPServer,实际上就是创建一个Server Socket,用于监听客户端的请求。同时在服务端socket注册客户端连接事件处理函数,当客户端请求连接RTSP服务时,事件处理函数对客户端连接进行处理。下面是源代码:
// Create the RTSP server. Try first with the default port number (554),
// and then with the alternative port number (8554):
RTSPServer* rtspServer;
portNumBits rtspServerPortNum = 554;
//创建一个DynamicRTSPServer,创建服务端Socket,
//通过跟踪代码,DynamicRTSPServer中调用了, socket sock = socket(AF_INET, type, 0); 其中type为SOCK_DGRAM,显然是基于TCP的
rtspServer = DynamicRTSPServer::createNew(*env, rtspServerPortNum, authDB);
if (rtspServer == NULL) {
rtspServerPortNum = 8554;
rtspServer = DynamicRTSPServer::createNew(*env, rtspServerPortNum, authDB);
}
if (rtspServer == NULL) {
*env << "Failed to create RTSP server: " << env->getResultMsg() << "\n";
exit(1);
}
……
//对请求连接的客户端事件进行处理
env->taskScheduler().doEventLoop(); // does not return
return 0; // only to prevent compiler warning
2 下面是在RTSPServer的构造函数中注册客户端连接处理函数:
//注册客户端连接处理函数incomingConnectionHandlerRTSP
env.taskScheduler().turnOnBackgroundReadHandling(fRTSPServerSocket,(TaskScheduler::BackgroundHandlerProc*)&incomingConnectionHandlerRTSP, this);
3 在evn->taskScheduler().doEventLoop()中,服务端会监听客户端的连接请求,并对客户端的读事件、