您的位置:首页 > 编程语言 > PHP开发

live555 RTSP服务器建立及消息处理流程

2017-04-20 14:18 549 查看
DynamicRTSPServer::creatnew():

   1.调用继承自RTPSever::setUpOurSocket:

       1.调用 GroupsockHelper 的 setupStreamSocket创建一个socket连接,并绑定,

       2.设置socket的发送缓存大小,

       3.调用listen开始监听端口,设置同时最大能处理连接数LISTEN_BACKLOG_SIZE=20,如果达到这个上限则client端将收到ECONNERREFUSED的错误

       4.测试绑定端口是否为0,为0的话重新绑定断口,并返回系统自己选择的新的端口。

       5.返回建立的socket文件描述符

   2.调用自己和RTPSever的构造函数:

   RTPSever构造函数:

       1.用一个UsageEnvironment对象的引用构造其父类Medium

       2.设置最大等待回收连接时间 reclamationTestSeconds,超过这个时间从客户端没有RTSP命令或者RTSP的RR包则收回其RTSPClientSession

       3.建立一个HashTable[实际上是一个BasicHashTable],fServerMediaSessions指向这个表。

       4.调用参数UsageEnvironment对象env的成员,一个TaskScheduler指针所指对象[实际就是一个BasicTaskScheduler对象]的成员函数

           turnOnBackgroundReadHandling():

               1.调用一个HandlerSet::assignHandler()创建一个Handler,把socketNum[此处为服务器监听的socket描述符]和处理函数RTSPServer::incomingConnectionHandler(),还有指向RTSPSever的指针绑定在一起。

                   incomingConnectionHandler作用:

                       1.调用accept返回服务器与客户端连接的socket描述符

                       2.设置客户端描述符为非阻塞

                       3.增加客户端socket描述符的发送缓存为50*1024

                       4.为此客户端随机分配一个sessionId

                       5.用客户端socket描述符clientSocket,sessionId,和客户端地址clientAddr调用creatNewClientSession创建一个clientSession。

RTSPClientSession::RTSPClientSession()构造函数:

    1.重置请求缓存

   2.调用envir().taskScheduler().turnOnBackgroundReadHandling(),这次socketnumber为客户端socket描述符这次的处理函数是RTSPServer::RTSPClientSession::incomingRequestHandler()

       RTSPServer::RTSPClientSession::incomingRequestHandler():

           调用handleAlternativeRequestByte1(uint8_t requestByte):

               1.fRequestBuffer[fRequestBytesAlreadySeen] =requestByte;把请求字符放入请求缓存fRequestBuffer

               

               2.调用handleRequestBytes(1) 处理请求缓存

                   handleRequestBytes(int newBytesRead):

                       1.调用noteLiveness()查看请求是否到期,如果服务器的reclamationTestSeconds> 0,调用taskScheduler对象的rescheduleDelayedTask

函数: 参数为( fLivenessCheckTask, fOurServer.fReclamationTestSeconds*1000000,(TaskFunc*)livenessTimeoutTask,  this )

其中livenessTimeoutTask()函数作用是删除new出来的clientSession.

                           1.调用unscheduleDelayedTask(TaskToken&prevTask):

                               从DelayQueue中删除prevTask项, prevTask置空.

                           2.调用scheduleDelayedTask(int64_t microseconds, TaskFunc* proc, void*clientData):

                               1.创建一个DelayInterval对象timeToDelay,用microseconds初始化。

                             
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  live555 rtp h264