[live555]live555笔记-RTSP流媒体服务
基础基本搞明白了,那么RTSP,RTP等这些协议又是如何利用这些基础机制运作的呢?首先来看RTSP.RTSP首先需建立TCP侦听socket。可见于此函数:
基础基本搞明白了,那么RTSP,RTP等这些协议又是如何利用这些基础机制运作的呢?
首先来看RTSP.
RTSP首先需建立TCP侦听socket。可见于此函数:
- DynamicRTSPServer* DynamicRTSPServer::createNew(UsageEnvironment& env, Port ourPort,
- UserAuthenticationDatabase* authDatabase,
- unsigned reclamationTestSeconds) {
- int ourSocket = setUpOurSocket(env, ourPort); //建立TCP socket
- if (ourSocket == -1)
- return NULL;
- return new DynamicRTSPServer(env, ourSocket, ourPort, authDatabase,
- reclamationTestSeconds);
- }
要帧听客户端的连接,就需要利用任务调度机制了,所以需添加一个socket handler。可见于此函数:
- RTSPServer::RTSPServer(UsageEnvironment& env,
- int ourSocket,
- Port ourPort,
- UserAuthenticationDatabase* authDatabase,
- unsigned reclamationTestSeconds) :
- Medium(env),
- fRTSPServerSocket(ourSocket),
- fRTSPServerPort(ourPort),
- fHTTPServerSocket(-1),
- fHTTPServerPort(0),
- fClientSessionsForHTTPTunneling(NULL),
- fAuthDB(authDatabase),
- fReclamationTestSeconds(reclamationTestSeconds),
- fServerMediaSessions(HashTable::create(STRING_HASH_KEYS))
- {
- #ifdef USE_SIGNALS
- // Ignore the SIGPIPE signal, so that clients on the same host that are killed
- // don't also kill us:
- signal(SIGPIPE, SIG_IGN);
- #endif
- // Arrange to handle connections from others:
- env.taskScheduler().turnOnBackgroundReadHandling(
- fRTSPServerSocket,
- (TaskScheduler::BackgroundHandlerProc*) &incomingConnectionHandlerRTSP,
- this);
- }
当收到客户的连接时需保存下代表客户端的新socket,以后用这个socket与这个客户通讯。每个客户将来会对应一个rtp会话,而且各客户的 RTSP请求只控制自己的rtp会话,那么最好建立一个会话类,代表各客户的rtsp会话。于是类 RTSPServer::RTSPClientSession产生,它保存的代表客户的socket。下为RTSPClientSession的创建过程
热门文章推荐
- [live555]live555直播rtsp流
- [live555]Live555学习资料及下载
- [live555]rtsp直播基于live555的实现
- [rtsp]海康Hikvision Tools(SADP搜索摄像头工具)下载
- [Live555]live555中处理mpeg4
- [NVR]海康网络摄像机录像时间怎么自定义设置
- [RTSP]RTSP常用方法实例
- [udp]为什么视频数据一般都用UDP协议进行传输
请稍候...