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)源码分析(一)-重要关系类的更多相关文章

  1. 21 BasicTaskScheduler基本任务调度器(一)——Live555源码阅读(一)任务调度相关类

    21_BasicTaskScheduler基本任务调度器(一)——Live555源码阅读(一)任务调度相关类 BasicTaskScheduler基本任务调度器 BasicTaskScheduler基 ...

  2. 12 哈希表相关类——Live555源码阅读(一)基本组件类

    12 哈希表相关类--Live555源码阅读(一)基本组件类 这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类. 本文由乌合之众 lym瞎编,欢迎转载 ...

  3. Go Revel - server.go 源码分析

    之前介绍了 Go Revel - main函数分析 http://www.cnblogs.com/hangxin1940/p/3263775.html 最后会调用 `revel.Run(*port)` ...

  4. VOIP RTP RTSP 实现 Baresip 源码分析

    RTP 使用 udp 进行数据传输,udp 是不能保证,数据包一定可以到达的,也不提供时序.同时还有 MTU 限制. RTCP 用来配合 RTP 提供,传输报告,会话建立和退出. 一大批参考规范 * ...

  5. 19 BasicTaskScheduler0 基本任务调度类基类(一)——Live555源码阅读(一)任务调度相关类

    这是Live555源码阅读的第二部分,包括了任务调度相关的三个类.任务调度是Live555源码中很重要的部分. 本文由乌合之众 lym瞎编,欢迎转载 http://www.cnblogs.com/ol ...

  6. 16 BasicHashTable基本哈希表类(三)——Live555源码阅读(一)基本组件类

    这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类. 本文由乌合之众 lym瞎编,欢迎转载 http://www.cnblogs.com/oloroso ...

  7. 14 BasicHashTable基本哈希表类(一)——Live555源码阅读(一)基本组件类

    这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类. 本文由乌合之众 lym瞎编,欢迎转载 http://www.cnblogs.com/oloroso ...

  8. 20 BasicTaskScheduler0 基本任务调度类基类(二)——Live555源码阅读(一)任务调度相关类

    这是Live555源码阅读的第二部分,包括了任务调度相关的三个类.任务调度是Live555源码中很重要的部分. 本文由乌合之众 lym瞎编,欢迎转载 http://www.cnblogs.com/ol ...

  9. 18 TaskScheduler任务调度器抽象基类——Live555源码阅读(一)任务调度相关类

    这是Live555源码阅读的第二部分,包括了任务调度相关的三个类.任务调度是Live555源码中很重要的部分. 本文由乌合之众 lym瞎编,欢迎转载 http://www.cnblogs.com/ol ...

  10. 17 任务调度相关类综述——Live555源码阅读(一)任务调度相关类

    这是Live555源码阅读的第二部分,包括了任务调度相关的三个类.任务调度是Live555源码中很重要的部分. 本文由乌合之众 lym瞎编,欢迎转载 http://www.cnblogs.com/ol ...

随机推荐

  1. 艾思(aisi)软件主营业务介绍

    1. 移动应用开发 按客户端分类: APP定制开发 小程序定制开发 H5, Web定制开发 微信公众号开发 iOS开发 安卓开发 按行业分类(不限于): 电商, 单商户, 多商户商城 教育APP 聊天 ...

  2. Shell脚本实现模拟并发及并发数控制

    #!/bin/bash #by inmoonlight@163.com #下面的代码控制并发数.其实是利用令牌原理实现 #一个线程要运行,首先要拿到令牌在该代码中即read一行数据,读取不到就会暂停, ...

  3. ARM-linux的Windows交叉编译环境搭建

    交叉编译Arm Linux平台的QT5库 1.准备交叉编译环境 环境说明:Windows10 64位 此过程需要: (1)Qt库开源代码,我使用的是5.13.0版本: (2)Perl语言环境5.12版 ...

  4. Python之常用数据类型详解

    tuple 元组 1 # 定义 2 temp = (2, ) # 规范定义,单个元素的元组 3 tem = 2, # 可行,但不规范定义 4 tep = () # 空元组 5 6 tp = (1, ' ...

  5. LeedCode 85. 最大矩形(/)

    原题解 题目 约束 题解 解法一 class Solution { public: int maximalRectangle(vector<vector<char>>& ...

  6. 微信公众号授权登录,整合spring security

    公司的业务需求,对接了微信公众号授权,通过微信公众号的接口拿到用户信息进行业务系统的登录,话不多说上代码,我的实现方式是整合了spingSecurity 首先是接口 @PostMapping(&quo ...

  7. 最大公约数与最小公倍数_c/c++

    gcd:greatest common divisor,最大公约数   欧几里得算法,也就是辗转相除法.公式:gcd(a, b) = gcd(b, a % b)   推论:gcd(b, a) == g ...

  8. beast加密

    Beast:  https://github.com/liexusong/php-beast?tdsourcetag=s_pctim_aiomsgbeast-安裝到/root------------- ...

  9. autossh 使用

    Table of Contents 1. centos7下配置为服务 2. 命令式使用 2.1. 映射远程主机防火墙之后的端口到本机 2.2. 映射本机端口到远程主机 centos7下配置为服务 编辑 ...

  10. Inno 设置文件或注册表ACL(访问控制权限)

    欢迎访问我的个人博客:xie-kang.com 在[Files]区段或者[Registry]区段中可以设置Permissions属性,从而达到指定操作ACL(访问控制权限),使用方法如下: <用 ...