live555基本介绍
Live555是一个实现了RTSP协议的开源流媒体框架,Live555包含RTSP服务器端的实现以及RTSP客户端的实现。Live555可以将若干种格式的视频文件或者音频文件转换成视频流或者音频流在网络中通过RTSP协议分发传播,这便是流媒体服务器最核心的功能。
Live555的官网:http://www.live555.com/,下载Live555的源代码:http://www.live555.com/liveMedia/public/
源码目录解析
下载源码后解压得到live目录,目录结构如下,:
主要使用其中的四个目录,分别对应Live555的四个库:
UsageEnvironment目录,静态库为libUsageEnvironment.a,基础功能封装,主要用于任务调度,日志输出、记录环境信息等
groupsock目录,静态库为libgroupsock.a,网络接口封装,主要用于数据网络传输
liveMedia目录,静态库为libliveMedia.a,Live555核心功能的实现,码流处理
BasicUsageEnvironment目录,静态库为libBasicUsageEnvironment.a,集成于UsageEnvironment,具体实现或功能重写
UsageEnvironment&&BasicUsageEnvironment模块
UsageEnvironment包括抽象类UsageEnvironment和抽象类TaskScheduler,这两个类用于事件调度,其中包括实现了对事件的异步读取、对事件句柄的设置及对错误信息的输出等。
BasicUsageEnvironment继承于UsageEnvironment, 并实现UsageEnvironment中的纯虚类UsageEnvironment & TaskScheduler & HashTable等。
BasicUsageEnvironment和UsageEnvironment中的类都是用于整个系统的基础功能类.主要是针对简单的控制台应用程序,利用select实现事件获取和处理。
TaskScheduler
则提供了任务调度功能.整个程序的运行发动机就是它,它调度任务,执行任务(任务就是一个函数).TaskScheduler由于在全局中只有一个,所以保存在了UsageEnvironment中.而所有的类又都保存了UsageEnvironment的指针,所以谁想把自己的任务加入调度中,那是很容易的.整个live555(服务端)只有一个线程.有人实现了多线程。
TaskScheduler调度三种任务:socket任务(handlerSet)和延迟任务(DelayQueue).Event。
DelayQueue:
译为"延迟队列",它是一个队列,每一项代表了一个要调度的任务(在它的fToken变量中保存).同时保存了这个任务离执行时间点的剩余时间.可以预见,它就是在TaskScheduler中用于管理调度任务的东西.注意,此队列中的任务只被执行一次!执行完后这一项即被无情抛弃!
HashTable
实现了哈稀表.这是一个通用的HashTable,在整个项目中都可以使用它,当然该HashTable也是一个抽象类。
HandlerSet:
Handler集合.它是一种专门用于执行socket操作的任务(函数),HandlerSet被TaskScheduler用来管理所有的socket任务(增删改查)
3.liveMedia模块
实现RTSP Server的类,还包含了针对不同流媒体类型(如TS流、PS流等)编码的类。在该库中,基类是Medium,层次关系非常清晰。在该库中,有几个很重要的类,如RTSPServer、ServerMediaSession、RTPSink、RTPInterface、FramedSource等。
该模块声明了一个抽象类Medium,其他所有类都派生自该类,下面简要介绍这些类:
RTSPClient:该类实现RTSP请求的发送和响应的解析,同时根据解析的结果创建对应的RTP会话。
MediaSession:用于表示一个RTP会话,一个MediaSession可能包含多个子会话(MediaSubSession),子会话可以是音频子会话、视频子会话等。
RTCPInstance:该类实现RTCP协议的通信。
Source和Sink:这两个概念类似DirectShow中的Filter。Source抽象了数据源,比如通过RTP读取数据。Sink是数据消费者的抽象,比如把接收到数据存储到文件,该文件就是一个Sink。数据的流动可能经过多个Source和Sink。MediaSink是各种类型的Sink的基类,MediaSource是各种类型Source的基类,各种类型的流媒体格式和编码的支持即是通过对这两个类的派生实现的。Source和Sink通过RTP子会话(MediaSubSession)联系在一起。
图:live: Medium Class Reference (live555.com)
4、groupsock 模块
顾名思义,用于数据包的接收和发送,其同时支持多播和单播。
groupsock库中包括了GroupEId、Groupsock、GroupsockHelper、NetAddress、NetInterface等类。
Groupsock类
它封装了socket操作。用于收发数据包。增加了多播放支持和一对多单播的功能.同一时候支持UDP和TCP协议传输,两种方式可供选择。它管理着一个本地socket和多个目的地址,仅仅需知道对方地址和port就可以发送数据。
构造函数有一个參数是struct in_addr const& groupAddr,在构造函数中首先会调用父类构造函数创建socket对象,然后推断这个地址。若是多播地址,则增加多播组。
Groupsock的两个成员变量destRecord* fDests和DirectedNetInterfaceSet fMembers都表示目的地址集和。用fDesk基本够用了,在addDestination()和removeDestination()函数中就是操作fDesk。增加或删除目的地址。
GroupsockHelper类主要用于读写Socket
live555基本介绍相关推荐
- C++流媒体开源库Live555详细介绍
目录 1.Live555简介 2.Live555源码目录说明 3.Live555中的关键概念与流程介绍 3.1.liveMedia的运转 3.2.RTSP介绍 3.3.RTSP连接的建立 3.4.DE ...
- Live555源码阅读笔记(一):源码介绍文档 及 源码目录结构
目录 一.Live555介绍 1.Live555项目介绍 2.官网及帮助文档介绍 二.源码目录结构 1.UsageEnvironment 2.BasicUsageEnvironment 3.group ...
- Ubuntu18.04 ARM平台 Live555 交叉编译 live555共享库
Live555 交叉编译live555共享库 文章目录 Live555 交叉编译live555共享库 介绍 源码获取 1. 修改配置文件的交叉编译器: 2. 生成Makefile文件: 3. 编译安装 ...
- live555学习之基本类介绍及计划任务深度探讨
liveMedia项目的源代码包括四个基本的库,各种测试代码以及Media Server.四个基本的库分别是: UsageEnvironment&TaskScheduler, groupsoc ...
- LIVE555 RTSP RTP/RTCP协议介绍
LIVE555 RTSP.RTP/RTCP协议介绍 一.概述 RTSP(Real-Time Stream Protocol )是一种基于文本的应用层协议,在语法及一些消息参数等方面,RTSP协议与H ...
- FFmpeg入门详解之92:Live555学习之(一)-------Live555的基本介绍
Live555学习之(一)-------Live555的基本介绍 前一阵子,因为项目需要,研究了一下Live555开源框架,研究的不是很深入,基本上把Live555当做API用了一下,但是毕竟也是本人 ...
- 【Live555】live555源码详解(九):ServerMediaSession、ServerMediaSubsession、live555MediaServer
[Live555]live555源码详解系列笔记 继承协作关系图 下面红色表示本博客将要介绍的三个类所在的位置: ServerMediaSession.ServerMediaSubsession.Dy ...
- 【Live555】live555源码详解(八):testRTSPClient
[Live555]live555源码详解系列笔记 继承协作关系图 下面红色表示本博客将要介绍的testRTSPClient实现的三个类所在的位置: ourRTSPClient.StreamClient ...
- 【Live555】live555源码详解(七):GenericMediaServer、RTSPServer、RTSPClient
[Live555]live555源码详解系列笔记 继承协作关系图 下面红色表示本博客将要介绍的三个类所在的位置: GenericMediaServer.RTSPServer.RTSPClient 14 ...
最新文章
- Bio+IT 爱好者社区,欢迎你!
- 解决在配置Oracle数据库连接错误问题
- 小米10的Android安全更新,MIUI 12首批更新名单被曝光,小米10系列优先上Android 11...
- 200901阶段一C++类和对象
- (6) Hibernate的集合映射
- Python 如何调用 Java
- iphone储存空间系统怎么清理_如何清理iPhone的缓存,释放更多存储空间,这些方法你知道吗...
- 中子中子测井发出打入地层_测井曲线解释
- 共享内存之——system V共享内存
- 设计学生证信息管理系统(C++实现,附源代码,详细解析)
- 无线AP与无线路由器都有些什么区别?(二)
- 机器人学基础——运动学研究的问题及DH建系
- Linux应用层24点小游戏,C++ Builder构建算二十四点小游戏
- su室外渲染参数设置_vray for sketchup渲染材质参数设置教程
- Cisco RV180W 路由器设置
- linux 命令:userdel 详解
- 2015年阿里巴巴校招笔试题
- 如何利用文字推动业绩 ——营销人员的软文营销
- Android 如何在关于手机界面添加个图片
- 内存溢出问题核查与定位