RTSP的创建过程大致如下:
m_pScheduler = new BasicTaskScheduler::createNew(100 * 1000);
m_pEnv = new BasicUsageEnvironment::createNew(*m_pScheduler);
m_pRtspServer = new RTSPServer::createNew(*m_pEnv, nPort, NULL);
以上三个类构造函数都是protected,通过接口createNew完成对象的创建;
其中RTSPServer和BasicUsageEnvironment两个类的析构函数同样也是protected,所以不能直接delete对象本身。
销毁对象的方式如下:
RTSPServer -> RTSPServer::close(*m_pEnv, m_pRtspServer->name());
BasicUsageEnvironment -> m_pEnv->reclaim();
BasicTaskScheduler -> delete m_pScheduler;
====================
三个类的简短描述
[BasicTaskScheduler]
继承关系:
TaskScheduler
^
|
|
BasicTaskScheduler0
^
|
|
BasicTaskScheduler
BasicTaskScheduler不是Medium继承来的,构造函数时protected,但是析构函数是public的。
创建:存在接口createNew
销毁:因为析构函数是public的,可以直接delete掉
----------------------------
[BasicUsageEnvironment]
继承关系:
UsageEnvironment
^
|
|
BasicUsageEnvironment0
^
|
|
BasicUsageEnvironment
BasicUsageEnvironment 不是Medium继承来的,构造和析构函数为protected,不能直接进行删除。
创建:存在一个接口createNew来创建
销毁:通过一个public函数reclaim来实现销毁,前提其自身内部没有管理的Medium对象。
----------------------------
[RTSPServer]
继承关系:
Medium
^
|
|
GenericMediaServer
^
|
|
RTSPServer
RTSPServer的构造和析构函数都是protected
创建:通过createNew接口进行创建
销毁:因为是protected的,所以delete函数不能进行删除。因为继承自Medium类,并且从Medium进行而来的所有类的析构函数都是virtual的。因此通过删除Medium类完成对象RTSPServer的析构。
在类Medium中有两个静态接口如下,完成指定environment下的指定mediumName的对象的释放。
static void close(UsageEnvironment& env, char const* mediumName);
static void close(Medium* medium);