live555流媒体服务器初始化
- RTSPServer* rtspServer;
- portNumBits rtspServerPortNum = 554;
- //创建rtsp服务器,设置端口号和传入环境
- rtspServer = DynamicRTSPServer::createNew(*env, rtspServerPortNum, authDB);
- DynamicRTSPServer* DynamicRTSPServer::createNew(UsageEnvironment& env, Port ourPort,UserAuthenticationDatabase* authDatabase, unsigned reclamationTestSeconds)
- {
- //创建服务端socket
- int ourSocket = setUpOurSocket(env, ourPort);
- //
- if (ourSocket == -1) return NULL;
- //
- return new DynamicRTSPServer(env, ourSocket, ourPort, authDatabase,
- reclamationTestSeconds);
- }
-
- DynamicRTSPServer::DynamicRTSPServer(UsageEnvironment& env, int ourSocket,
- Port ourPort,
- UserAuthenticationDatabase* authDatabase, unsigned reclamationTestSeconds)
- : RTSPServerSupportingHTTPStreaming(env, ourSocket, ourPort, authDatabase,
- reclamationTestSeconds);
-
- RTSPServerSupportingHTTPStreaming
- ::RTSPServerSupportingHTTPStreaming(UsageEnvironment& env, int ourSocket, Port
- rtspPort,
- UserAuthenticationDatabase* authDatabase, unsigned reclamationTestSeconds)
- : RTSPServer(env, ourSocket, rtspPort, authDatabase, reclamationTestSeconds) {
- }
-
RTSPServer::RTSPServer(UsageEnvironment& env,int ourSocket, Port ourPort,
- UserAuthenticationDatabase* authDatabase,
- unsigned reclamationSeconds)
- : GenericMediaServer(env, ourSocket, ourPort, reclamationSeconds),
- fHTTPServerSocket(-1), fHTTPServerPort(0),
- fClientConnectionsForHTTPTunneling(NULL), // will get created if needed
- fTCPStreamingDatabase(HashTable::create(ONE_WORD_HASH_KEYS)),
- fPendingRegisterRequests(HashTable::create(ONE_WORD_HASH_KEYS)),
- fRegisterRequestCounter(0),
- fAuthDB(authDatabase), fAllowStreamingRTPOverTCP(True) {
- }
- GenericMediaServer
- ::GenericMediaServer(UsageEnvironment& env, int ourSocket, Port ourPort,
- : Medium(env),
-
- fServerSocket(ourSocket),fServerPort(ourPort),fReclamationSeconds(reclamationSeconds),
- fServerMediaSessions(HashTable::create(STRING_HASH_KEYS)),
- fClientConnections(HashTable::create(ONE_WORD_HASH_KEYS)),
- fClientSessions(HashTable::create(STRING_HASH_KEYS))
- {
- ignoreSigPipeOnSocket(fServerSocket); // so that clients on the same host that are
-
- env.taskScheduler().turnOnBackgroundReadHandling(fServerSocket,
- incomingConnectionHandler, this);
- }
- void BasicTaskScheduler
::setBackgroundHandling(int socketNum, int conditionSet, BackgroundHandlerProc* handlerProc, void* clientData) {
if (socketNum < 0) return;
#if !defined(__WIN32__) && !defined(_WIN32) && defined(FD_SETSIZE)
if (socketNum >= (int)(FD_SETSIZE)) return;
#endif
FD_CLR((unsigned)socketNum, &fReadSet);
FD_CLR((unsigned)socketNum, &fWriteSet);
FD_CLR((unsigned)socketNum, &fExceptionSet);
if (conditionSet == 0) {
fHandlers->clearHandler(socketNum);
if (socketNum+1 == fMaxNumSockets) {
--fMaxNumSockets;
}
} else {
- //将server端接受连接的socket加入fHandlers链表,并绑定处理函数incomingConnectionHandler
fHandlers->assignHandler(socketNum, conditionSet, handlerProc, clientData);
if (socketNum+1 > fMaxNumSockets) {
fMaxNumSockets = socketNum+1;
}
if (conditionSet&SOCKET_READABLE) FD_SET((unsigned)socketNum, &fReadSet);
if (conditionSet&SOCKET_WRITABLE) FD_SET((unsigned)socketNum, &fWriteSet);
if (conditionSet&SOCKET_EXCEPTION) FD_SET((unsigned)socketNum, &fExceptionSet);
}
}
- void GenericMediaServer::incomingConnectionHandler(void* instance, int /*mask*/) {
- GenericMediaServer* server = (GenericMediaServer*)instance;
- //处理连接请求的
- server->incomingConnectionHandler();
- DynamicRTSPServer::DynamicRTSPServer(UsageEnvironment& env, int ourSocket,