实现了对标准流媒体传输协议如RTP/RTCPRTSPSIP等的支持

生成的库文件: UsageEnviroment.lib BaseUsageEnviroment.lib groupsock.lib liveMedia.lib

live555与VS2005编译环境配置: http://thompsonng.blogspot.com/2010/04/compile-live555-using-vs2005-part-2.html

UsageEnviroment + TaskScheduler + BaseUsageEnviroment + groupsock + liveMedia

RTSP连接的建立过程

  • 首先创建RTSP服务器(具体实现类是DynamicRTSPServer),在创建过程中,先建立Socket(ourSocket)在TCP的554端口进行监听,
    然后把连接处理函数句柄(RTSPServer::incomingConnectionHandler)和socket句柄传给任务调度器(taskScheduler).
  • 任务调度器把socket句柄放入套接字集合(fReadSet)中,同时将socket句柄和incomingConnectionHandler句柄关联起来.
  • 接着,主程序开始进入任务调度器的主循环(doEventLoop),在主循环中调用系统函数select阻塞,等待网络连接开始处理客户的请求
  • 当客户端发出RTSP请求后,服务器主循环中的select调用返回,根据socket句柄找到对应的 incomingRequestHandler,开始消息处理. 先进行消息的解析,如果 发现请求是DESCRIBE则进入 handleCmd_DESCRIBE 函数;
  • incomingRequestHandler 中创建了 RTSPClientServer(处理客户端的会话);

UsageEnviroment/TaskScheduler

这两个类用于事件调度,实现: 错误信息的输出,异步读取事件的句柄设置

还有一个HashTable类,定义了一个hash表,好多地方要用到这个表,这几个类都是抽象类

BaseUsageEnviroment 是对 UsageEnviroment 的实现,BaseUsageEnviroment主要是针对简单的控制台应用程序.

// BaseUsageEnviroment 依赖
#include groupsock/include
#include UsageEnviroment/include
// BaseTaskScheduler 是对 TaskScheduler 的实现.
// 依赖
// UsageEnviroment.hh 中要用到 NetCommon.h(groupsock模块中) 中定义的一些数据类型,如: int64_t
#include groupsock/include

groupsock

实现了对网络接口的封装,用于收发数据包. 主要是面向多播数据的收发,当然也支持单播数据!

提供了读写socket等函数,屏蔽了不同OS之间的区别,这是在 GroupsockHelper.cpp中实现的.

// 依赖:
// groupeid.hh 中要使用 Boolean.hh(UsageEnviroment模块中) 中定义的 Boolean 类型
// NetAddress.hh 中的 AddressPortLookupTable 类要用到
//   HashTable.hh(UsageEnviroment) 中定义的 HashTable
// 很多消息报告需要使用 UsageEnvironment
#include UsageEnviroment/include

liveMedia

liveMedia 类的基类是 Medium,这个类针对不同的流媒体类型和编码! 各种测试代码在 testprogram 目录下,比如: openRTSP,都是 liveMedia 的应用! 这个类很复杂,一般做开发都是基于这个类.

// 依赖
#include groupsock/include
#include UsageEnviroment/include