一、功能描述
RTSPClient类主要实现rtsp协议的命令发送接口和接收应答解析回调接口;上层APP通过命令发送接口发送DESCRIBE、SETUP等命令,同时设置回调函数用于RTSPClient类接收应答解析成功后通知上层APP;RTSPClient类不实现整个流程控制,这个流程控制由上层APP用户实现。
二、代码分析
2.1 Medium类分析
Medium类实现了通用的实例保存队列和查找的功能;每个视频流的session的环境变量类UsageEnvironment的env.liveMediaPriv保存Medium基类指针的队列,所有继承该类的实例都可以保存,并且根据设置的名称查找;目前定义支持的类由如下:
class Medium {
public:
static Boolean lookupByName(UsageEnvironment& env, …);
// 目前继承该类保存队列的对象有如下这些
// 默认这些接口都返回false
// RTSPClient类实现isRTSPClient为返回true;那么基类指针就可以判断是RTSPClient类
virtual Boolean isSource() const;
virtual Boolean isSink() const;
virtual Boolean isRTCPInstance() const;
virtual Boolean isRTSPClient() const;
virtual Boolean isRTSPServer() const;
virtual Boolean isMediaSession() const;
virtual Boolean isServerMediaSession() const;
}
2.2 RTSPClient类分析
RTSPClient类对外定义了所有的命令发送接口、responseHandler回调函数类型;内部实现了发送命令组帧、接收解析、发送命令队列缓存(保存命令和回调函数)和 解析完成根据命令查找到缓存调用回调函数通知。主要成员定义说明如下:
class RTSPClient: public Medium {
public:
…
// 回调函数类型
typedef void (responseHandler)(R