RTSP Server(LIVE555)源码分析(一)-重要关系类
live项目包括四个基本的库,程序入口类(在mediaServer中),各种测试代码(测试代码在testProgs里面)。
四个基本的库分别是: UsageEnvironment&TaskScheduler、Groupsock、liveMedia和BasicUsageEnvironment。其中
四个基本库相关类介绍如下:
一、UsageEnvironment
该类库是对系统环境的抽象,包括UsageEnvironment、TaskScheduler、UsageEnvironment主要提供了消息的输
入输出,错误信息的报告和记录的功能, 无论哪一个类要输出错误,就需要保存UsageEnvironment的指针、
TaskScheduler实现事件的异步处理,事件处理函数的注册等;
二、TaskScheduler

TaskScheduler库,该库很重要,是live555所有任务调度管理类,中间的所有任务调度都靠该类驱动。
三、GroupSock
该类是对网络接口的封装,主要是UDP/TCP等协议的类socket封装等。
四、LiveMedia
liveMedia是很重要的一个库,不仅包含了RTSP Server 的类,还包含了针对不同流媒体类型(如:ts流,ps流等)编码的类,
各种媒体数据的封装和数据的发送。其中基类为Medium,其他类都派生自该类,如MediaSession,RTP会话类,一个
session又可以包含多个subsession。还有比较重要的两个派生类Source和Sink,Source抽象了需要发送的数据,Sink则抽
象数据的发送者,数据的流动可以经过多个source和sink,两者又通过session联系在一起。
五、重要的关系类
① TaskScheduler关系类
TaskScheduler类定义在UsageEnvironment.hh中
BasicTaskScheduler0类定义在BasicTaskScheduler0.hh中
BasicTaskScheduler类定义在BasicUsageEnvironment.hh中

TaskScheduler关系类主要是创建服务端socket,通过select实现,一路RTSP服务,默认监听20个客户端。该类主要处理
socket读取管理客户端socket操作,BasicTaskScheduler0包含延时队列DelayQueue处理,用来处理socket客户端事件。
② UsageEnvironment关系类
UsageEnvironment类定义在UsageEnvironment.hh中
BasicUsageEnvironment0类定义在BasicUsageEnvironment0.hh中
BasicUsageEnvironment类定义在BasicUsageEnvironment.hh中

1)UsageEnvironment关系类与TaskScheduler强绑定关系,在默认构造初始化时传入引用TaskScheduler给UsageEnvironment
类,另外处理一些结果消息信息等。
2)供用户层通过UsageEnvironment类访问TaskScheduler。
③ AlarmHandler关系类
AlarmHandler类定义在BasicTaskScheduler0.cpp中
DelayQueueEntry类定义在DelayQueue.hh中
DelayQueue类定义在DelayQueue.hh中
AlarmHandler事件处理流程图:

AlarmHandler同样是处理RTSP客户端事件,一般通过调用TaskScheduler::rescheduleDelayedTask(int64_t microseconds,
TaskFunc* proc,void* clientData)实现,该接口是纯虚函数,最终调度子类BasicTaskScheduler0::scheduleDelayedTask添加
这个定时任务,然后在AlarmHandler构造中给TaskFunc* fProc赋值;
④ ServerMediaSession关系类

ServerMediaSession本身就是个双链表结构,可以增加subSession。如video/audio可以调用以下方法添加:
video:sms->addSubsession(ourVideoRealServerMediaSubsession::createNew(...)
audio:sms->addSubsession(ourAudioRealServerMediaSubsession::createNew(...)
⑤ ourVideoRealServerMediaSubsession关系类

ourVideoRealServerMediaSubsession 二次开发最外层视频subSession类。目前最新live555没有该类,是公司新增。
ourVideoRealServerMediaSubsession类在ourH26xVideoRealServerMediaSubsession.hh。
⑥ ourAudioRealServerMediaSubsession关系类

ourAudioRealServerMediaSubsession二次开发最外层音频subSession类
目前最新live555没有该类,公司新增
⑦ Groupsock关系类

Groupsock该类是对网络接口的封装,用于收发数据包。这个是放在单独的库Groupsock中。它封装了socket操作,增加了
多播放支持和一对多单播的功能.同时支持UDP和TCP协议传输,两种方式可供选择。它管理着一个本地socket和多个目的
地址,只需知道对方地址和端口即可发送数据。
⑧ ourVideoRealStreamSource关系类

ourVideoRealStreamSource类是公司新增类,主要是对某一路流进行管理,如传入上层rtspServer_EventCallback fpEventCb
回调,streamNum流号、请求I帧、获取下一帧buf(doGetNextFrame)、读取编码数据(doReadFromFile)等都在该类。
⑨ ourH26xVideoRTPSink 关系类

⑩ ourH26xFUAFragmenter

FrameSource有几个比较重要的参数,主要用于均匀发包策略,fMaxSize代表帧最大大小,fFrameSize代表帧大小,
fNumTruncatedBytes,fPresentationTime当前发送帧的时间,fDurationInMicroseconds代表发送1帧需要的微秒数。
RTSP Server(LIVE555)源码分析(一)-重要关系类的更多相关文章
- 21 BasicTaskScheduler基本任务调度器(一)——Live555源码阅读(一)任务调度相关类
21_BasicTaskScheduler基本任务调度器(一)——Live555源码阅读(一)任务调度相关类 BasicTaskScheduler基本任务调度器 BasicTaskScheduler基 ...
- 12 哈希表相关类——Live555源码阅读(一)基本组件类
12 哈希表相关类--Live555源码阅读(一)基本组件类 这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类. 本文由乌合之众 lym瞎编,欢迎转载 ...
- Go Revel - server.go 源码分析
之前介绍了 Go Revel - main函数分析 http://www.cnblogs.com/hangxin1940/p/3263775.html 最后会调用 `revel.Run(*port)` ...
- VOIP RTP RTSP 实现 Baresip 源码分析
RTP 使用 udp 进行数据传输,udp 是不能保证,数据包一定可以到达的,也不提供时序.同时还有 MTU 限制. RTCP 用来配合 RTP 提供,传输报告,会话建立和退出. 一大批参考规范 * ...
- 19 BasicTaskScheduler0 基本任务调度类基类(一)——Live555源码阅读(一)任务调度相关类
这是Live555源码阅读的第二部分,包括了任务调度相关的三个类.任务调度是Live555源码中很重要的部分. 本文由乌合之众 lym瞎编,欢迎转载 http://www.cnblogs.com/ol ...
- 16 BasicHashTable基本哈希表类(三)——Live555源码阅读(一)基本组件类
这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类. 本文由乌合之众 lym瞎编,欢迎转载 http://www.cnblogs.com/oloroso ...
- 14 BasicHashTable基本哈希表类(一)——Live555源码阅读(一)基本组件类
这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类. 本文由乌合之众 lym瞎编,欢迎转载 http://www.cnblogs.com/oloroso ...
- 20 BasicTaskScheduler0 基本任务调度类基类(二)——Live555源码阅读(一)任务调度相关类
这是Live555源码阅读的第二部分,包括了任务调度相关的三个类.任务调度是Live555源码中很重要的部分. 本文由乌合之众 lym瞎编,欢迎转载 http://www.cnblogs.com/ol ...
- 18 TaskScheduler任务调度器抽象基类——Live555源码阅读(一)任务调度相关类
这是Live555源码阅读的第二部分,包括了任务调度相关的三个类.任务调度是Live555源码中很重要的部分. 本文由乌合之众 lym瞎编,欢迎转载 http://www.cnblogs.com/ol ...
- 17 任务调度相关类综述——Live555源码阅读(一)任务调度相关类
这是Live555源码阅读的第二部分,包括了任务调度相关的三个类.任务调度是Live555源码中很重要的部分. 本文由乌合之众 lym瞎编,欢迎转载 http://www.cnblogs.com/ol ...
随机推荐
- C# DevExpress gridview 字符串尾部带数字如何排序
我们经常遇到这样的问题,字符串尾部带数字,如何正确排序; 首先设置GridView ,Columns 的相关列,设置属性中,SortMode为Custom 解决思路,把字符串尾缀数字,分离出来.先比较 ...
- 关于 用鼠标移动拖放 TabControl 标签 操作 实现 类
1.相关说明已有 2.本类有可以改进的地方,如更进,希望交流 3.对多行标签的支持没做特别解决,效果不太好 4.初学者使用,即可通过其构造函数直接加载需要赋予此拖放功能的 TabControl 即可实 ...
- django中使用autocomplete无效查错
检查autocomplete是否工作正常,将自己的结果集注释掉,使用前端预设好的结果集var countries=["Afghanistan","Albania" ...
- python读取i3dm数据
path = r'D:\data\1.i3dm'f = open(path, 'rb')f.seek(4)print('version:%d' % struct.unpack('I', f.read( ...
- Java开发词汇
Java基础常见英语词汇(70个) OO: object-oriented ,面向对象 OOP: object-oriented programming,面向对象编程 JDK:Java develop ...
- ubuntu 16.04 安装VNC远程桌面 安装wine+hfs
1.安装$sudo apt-get install xfce4 $sudo apt-get install vnc4server$sudo apt-get install xrdp 2.启动VNC s ...
- 后端006_登录之后返回Token
现在开始我们就可以写登录相关的东西了.首先登录相关的流程是这样的,前端输入用户和密码传给后端,后端判断用户名和密码是否正确,若正确,则生成JWT令牌,若不正确,则需要让前端重新输入,前端如果拿到了JW ...
- 谷歌翻译不能用解决办法(谷歌翻译关闭后,如何继续使用Chrome浏览器的翻译功能?)
1.查找 IP 虽然谷歌不再提供 translate.google.cn 网页版的服务了,但谷歌翻译的 API 服务还在. 只需要通过 hosts 重定向至国内服务器,即可恢复使用. 1.Ping ...
- UGUI按Tab键切换输入框
脚本挂在输入框的父物体上即可 [code]csharpcode: using System.Collections; using System.Collections.Generic; using U ...
- RPA的市场定义和企业选型
RPA(Robotic Process Automation)译为机器人流程自动化,又可以称为数字化劳动力,是一种智能化软件,通过模拟并增强人类与计算机的交互过程,实现工作流程中的自动化.RPA具有对 ...