本文主要是介绍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
这篇关于live555学习笔记(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!