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初始化。
                               2.创建一个AlarmHandler对象,用proc, clientData, timeToDelay初始化
                               3.调用fDelayQueue.addEntry(),把这个AlarmHandler对象加入到延迟队列中
                               4.返回AlarmHandler对象的token[long类型]的指针
                         2.如果请求的的长度超过请求缓存可读长度fRequestBufferBytesLeft,结束这个连接。

3.找到请求消息的结尾:<CR><LF><CR><LF>。

4.如果找到消息结尾,调用RTSPServer::RTSPClientSession::handleRequestBytes()[值得关注此函数]把请求字符串转换成命令各部分包括:cmdName[方法],urlPreSuffix[url地址],urlSuffix[要读取的文件名],sceq[消息的Cseq],否则函数返回需要继续从连接中读取请求。分别存入对应的数组。

5.如果转换成功,调用handleCmd_xxx()处理对应的cmdName: xxx[此处实现了:OPTIONS,DESCRIBE,SETUP,TEARDOWN,PLAY,PAUSE,GET_PARAMETER,SET_PARAMETER]
               其中PLAY,PAUSE,GET_PARAMETER,SET_PARAMETER调用handleCmd_withinSession(cmdName,urlPreSuffix, urlSuffix,cseq,(char const*)fRequestBuffer);

6.清空 RequestBuffer

live555 RTSP服务器建立及消息处理流程相关推荐

  1. hi3516a——armlinux下搭建live555 RTSP Server

    前言 上一篇文章中,在ubuntu下搭建了RTSP Server,见传送门.本文将把live555源码包交叉编译后再hi3516a开发板上运行live555 RTSP Server. 源码包下载 见上 ...

  2. live555的安装 RTSP点播消息流程实例(客户端:VLC, RTSP服务器:LIVE555 Media Server)

    live555是一个开源的软件,主要用来生成rtsp,rtp和sip服务器和客户端的软件.前几天需要看一下vlc中的rtsp的功能,在vlc中 rtp和rtsp的功能都是使用live555中的函数来生 ...

  3. live555从RTSP服务器读取数据到使用接收到的数据流程分析

    本文在linux环境下编译live555工程,并用cgdb调试工具对live555工程中的testProgs目录下的openRTSP的执行过程进行了跟踪分析,直到将从socket端读取视频数据并保存为 ...

  4. RTSP服务器实例live555源代码分析

    1. RTSP连接的建立过程      RTSPServer类用于构建一个RTSP服务器,该类同时在其内部定义了一个RTSPClientSession类,用于处理单独的客户会话.      首先创建R ...

  5. live555 学习笔记-建立RTSP连接的过程(RTSP服务器端)

    live555 学习笔记-建立RTSP连接的过程(RTSP服务器端) 监听 创建rtsp server,rtspserver的构造函数中,创建监听socket,添加到调度管理器BasicTaskSch ...

  6. live555学习笔记【3】---RTSP服务器(一)

    Live555库是一个使用开放标准协议如RTP/RTCP.RTSP.SIP等实现多媒体流式传输的开源C 库集.这些函数库可以在Unix.Windows.QNX等操作系统下编译使用,基于此建立RTSP/ ...

  7. live555点播服务器流程深入分析(一)

    从上篇live555点播服务器流程简单分析我们对启动流媒体服务器可以有一个大致的概念,接下来我们深入分析一下,整个rtsp的交互过程. 从上篇我们可以有一个大概的知识点: 一个server, 这个se ...

  8. 庖丁解牛-----Live555源码彻底解密(根据MediaServer讲解Rtsp的建立过程)

    live555MediaServer.cpp服务端源码讲解(testRelay.cpp,http://blog.csdn.net/smilestone_322/article/details/1892 ...

  9. 探索C++与Live555实现RTSP服务器的艺术

    探索C++与Live555实现RTSP服务器的艺术 一.引言(Introduction) 1.1 RTSP服务器的重要性(Importance of RTSP Server) 1.2 C++与Live ...

  10. windows平台 VS2017 live555 rtsp推流服务器编译

    live555 rtsp拉流方式 下载live555源码:http://www.live555.com/ 1.采用VLC播放,需要协议格式 :rtsp://IP/<filename> 例如 ...

最新文章

  1. 有空间感的图片环形滚动代码
  2. leetcode 最长公共前缀
  3. vs2010的基础设置
  4. JZOJ 5478. 【NOIP2017提高组正式赛】列队
  5. 打造Ubuntu下的SLAMP
  6. SyntaxError: Missing parentheses in call to 'print'
  7. Fiddler- 数据Mock(转)
  8. 关于VXLAN实验中CE设备的BUG问题
  9. 7000个源码批量下载---复制来的
  10. (IoT物联网)天线的设计步骤 - 完整收藏版
  11. 【ELAMN预测】基于遗传算法优化ELMAN神经网络实现电力符合数据回归预测附matlab代码
  12. 白话计算机入门书籍--《穿越计算机的迷雾》有感
  13. 杂志订阅系统c语言,杂志订阅管理系统
  14. 网站优化都有哪些方法 网站优化技巧?
  15. 【论文分享】小样本图片分类方法:AwGCN:Few-Shot Learning With Attention-Weighted Graph Convolutional Networks
  16. 阿里国际站装修尺寸是多少1920像素模板阿里巴巴全屏代码装修教程优化美化店铺工具
  17. Python 数据可视化基础教程
  18. 使用帕累托最优选择解释涌现现象
  19. Python量化分析(1)——Tushare的使用介绍
  20. 队列(先进先出的数据结构)

热门文章

  1. 关于有默认值的字段在用EF做插入操作时的思考(续)
  2. 木其工作室(专业程序代写服务)[转]Linux设备驱动程序学习-中断处理
  3. js获取内网ip_WebRTC安全问题:私有IP与mDNS
  4. HBase的两种协处理器
  5. pycharm 激活
  6. css实现垂直居中6种方法
  7. OSChina 周六乱弹 —— 程序猿到底有多少个不解风情的瞬间?
  8. Lucene为不同字段指定不同分词器(转)
  9. C语言中强制转换问题
  10. Windows下安装elastic search