文章目录
实现了对标准流媒体传输协议如RTP/RTCP、RTSP、SIP等的支持
生成的库文件: 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
