标签:
live555项目的源代码包括四个基本的库,各种测试代码以及Media Server。
工作模块
四个基本的库分别是: UsageEnvironment TaskScheduler, groupsock, liveMedia和BasicUsageEnvironment。
官网英文的基本介绍截图如下:
虽是英文的,但是难度不大,能看懂大致意思。这里多说一句,程序员还是要接触并学习英文,毕竟好的技术都是国外引进的。简单说下我的理解
UsageEnvironment
该类库是对系统环境的抽象,包括UsageEnvironment 和TaskScheduler。UsageEnvironment 主要用于消息的输入输出和用户功能,TaskScheduler实现事件的异步处理,事件处理函数的注册等。它通过维护一个异步读取源实现如消息到达等事件的处理,通过使用DelayQueue实现其他注册函数的延时调度。另外,还有一个HashTable类定义了一个通用的hash表,其它代码要用 到这个表。我们在使用时可以自定义该类的抽象类的子类,就可以再特定的环境下运行如嵌入式或者GUI等。不需要进行太多的修改。
groupsock
该类是对网络接口的封装,用于收发数据包。groupsock主要是面向多播数据的收发,它也同时支持单播数据的接收。
liveMedia
该类是live555的核心模块,各种媒体的封装和数据的发送。其中基类为Medium,其他的类都派生自该类。如MediaSession,RTP会话类,一个 session又可以包含多个subsession。还有比较重要的两个派生类Source和Sink,Source抽象了需要发送的数据,Sink则抽象数据的发送者,数据的流动可以经过多个source和sink,两者又通过session联系在一起。我们在开发的过程中,可以通过继承这些类,实现自己需要的相关功能。
BasicUsageEnvironment
该类主要针对简单控制台的应用程序,利用select实现事件的获取和处理。
工作流程
live555首先会创建一个RTSP服务(具体的实现可以参看mediaServer里的服务)。在服务创建过程中,会先调用setUpOurSocket建立tcp的连接,并监听对应传入的port,用于等待client请求的rtsp协议的交互,然后会把连接处理句柄已经socket句柄都传入TaskScheduler当中,等待事件触发。
简单并查看网上的一些网友的总结,画了一个UML图分享一下:
live555中有几个比较重要的类,在二次开发使用live555过程中,需要继承其中比较重要的几个类,如mediaSubsession,FramedSource等。在下手之前,则需要先理清楚其类的继承关系,我依照官网中的类图,把几个比较重要的类分离出来来,画出UML如下:
大致几个重要的类图关系就是这样的一个流程。后面文章继续分享如何继承自己的子类来实现的文件读取和实时流的播放等功能。
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/max_min_go/article/details/48253701