天天看点

live555学习笔记(二)

live555学习笔记之源码结构分析

live项目包括了四个基本库、程序入口类(mediaServer)和一些测试代码(testProgs)。

四个基本库:

1、UsageEnvironment

环境类,用于错误信息的输出

包括三个抽象类UsageEnvironment、TaskScheduler、HashTable

UsageEnvironment、TaskScheduler用于事件调度,其中包括实现了对事件的异步读取、对事件句柄的设置及对错误信息的输出等;

HashTable

LIVE555内部实现了一个简单哈希表类BasicHashTable。在LIVE555中,有很多地方需要用到该哈希表类。如:媒体文件名与MediaSession的映射,SessionID与ClientSession的映射,UserName和Password的映射等。

2、BasicUsageEnvironment

主要是对UsageEnvironment中对应类的实现

包含具体环境类和具体TaskScheduler类。UsageEnvironment用于对错误信息的处理,BasicUsageEnvironment类用于以控制台方式输出错误信息。因此想要以其他方式输出错误信息的类,可以从UsageEnvironment派生。BasicTaskSchedule类继承自TaskScheduler抽象类,用以定义具体的调度策略。任何基于LIVE555的应用程序均需要定义自己的BasicEnvironment和TaskScheduler库。如果创建窗口应用程序,在重定义TaskScheduler时,需要与图形环境自己的事件处理框架集成。BasicTaskSheduler使用select模型实现事件的获取和处理。如果想使用更高效的IOCP模型,可以定义自己的BasicTaskScheduler类。BasicTaskScheduler内部有一个循环,循环读取队列中的消息并处理。整个基于BasicTaskScheduler的程序只有一个线程驱动。

3、groupsock

对各种socket操作的封装,用于收发数据。主要面向组播,但也可以进行单播的收发数据,仅支持UDP,不支持TCP

顾名思义,用于数据包的接收和发送,其同时支持多播和单播。

groupsock库中包括了GroupEId、Groupsock、GroupsockHelper、NetAddress、NetInterface等类

其中Groupsock类有两个构造函数,一个是“for a source-independent multicast group”,另一个是“for a source-specific multicast group”;而GroupsockHelper类主要用于读写Socket。

4、liveMedia

其不仅包含了实现RTSP Server的类,还包含了针对不同流媒体类型(如TS流、PS流等)编码的类。在该库中,基类是Medium,层次关系非常清晰。

在该库中,有几个很重要的类,如RTSPServer、ServerMediaSession、RTPSink、RTPInterface、FramedSource等。

SDP

    SDP是Session Description Protocol的缩写。是一个用来描述多媒体会话的应用层协议,它是基于文本的,用于会话建立过程中的媒体类型和编码方案的协商等。客户端会通过DESCRIBE命令请求查询指定文件的媒体信息。有不明白的可以看下上一篇介绍RTSP、RTP、RTCP的文章。

附:

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

http://hi.baidu.com/studyarea/item/68b7ab3ff02bb8be134b1433

复制去Google翻译 翻译结果 FramedSource

继续阅读