文章目录
实现了对标准流媒体传输协议如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