Darwin RTSP点播流程代码分析1

1.      初始化

在dss中runserver.cpp的startserver是整个服务的初始化函数

关于RTSP点播这块的主要初始化内容如下:

1)  sServer->Initialize(inPrefsSource,inMessagesSource, inPortOverride,createListeners);

//RunServer.cpp

sServer的类型是QTSServer,在初始化函数中调用了CreateListeners函数,目的是创建两个监听对象

l  RTSPListenerSocket

l  HTTPListenerSocket

这两个类都继承于TCPListenerSocket类

 

2)  Socket::StartThread();//启动EventThread线程

3)在其他初始化工作完成后,在runserver.cpp中的startserver开始启动任务  sServer->StartTasks();

主要的工作是注册请求事件:fListeners[x]->RequestEvent(EV_RE);

其实就是把sUniqueID与自己类的指针this管理,然后注册到EventThread线程中fRefTable引用表中,然后把文件描述符(socket)加入到select函数监视的集合中

PS:这块设计到dss的网络架构模型,后续会出专门一篇文章进行描述,目前大家知道这个目的就可以了

 

 

2.      点播请求

当客户端发出请求时,EventContext.cpp中void EventThread::Entry()函数中select_waitevent函数会检测到有对象可读,然后然后从fRefTable中解析出来关联的对象类,执行对应的ProcessEvent

说明:大家都知道dss的网络模型是select,select_waitevent是检测是否有可读的对象

fRefTable这个是OSRefTable引用表的类,关于这块代码请参考我另一篇blog

http://blog.csdn.net/wq5866280/article/details/50435974

这里fRefTable中解析出来的对象,其实就是1.3节中说明fListeners[x],这里请求的是RTSP,所以对象是RTSPListenerSocket,这里主要是处理RTSPListenerSocket的ProcessEvent

 

3.      RTSPListenerSocket的ProcessEvent

由于RTSPListenerSocket是TCPListenerSocket的派生类,ProcessEvent的执行是在TCPListenerSocket类中

函数的主要作用:accept客户端

每接收一个客户端,就是创建一个TCPSocket* theSocket = NULL;

theTask = this->GetSessionTask(&theSocket);

//创建一个 RTSPSession* theTask = NEW RTSPSession

然后设置客户端theSocket与task关联,然后注册事件

theSocket->Set(osSocket,&addr);

theSocket->InitNonBlocking(osSocket);

theSocket->SetTask(theTask);

theSocket->RequestEvent(EV_RE);

和1.3节一样

把客户端的socket加入到select监视集合中,如果有数据需要读取,这执行TCPSocket的ProcessEvent函数,其实就是基类EventContext中的ProcessEvent,也就是给把task加入到线程池中某一个线程的 OSQueue_Blocking   fTaskQueue队列中,等待执行task类中的run函数,这里运行的就是RTSPSession中的run函数。

 

后面一个章节主要说明RTSPSession的run函数。

以上内容是个人研究,如有错处,欢迎加本人的QQ 272706196一起讨论学习,或者加入我们的EasyDarwin的群288214068496258327

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值