EasyDarwin字典类QTSSDictionary相关分析

最近在分析EasyDarwin中RTSPSession的建立及初始化,当每一个推流请求接收时,EasyDarwin就会新建一个RTSPSession,在RTSPSession中有RTSPRequest* fRequest和RTPSession* fRTPSession两个属性

fRequest对应当前的RTSP请求,fRTPSession对应RTP会话用于创建RTPStream

二者的初始化如博文https://blog.csdn.net/blobliu/article/details/82592689中提到都是在RTSPSession的Run()方法中进行

同时在Run()方法状态机执行中发现fRequest和fRTPSession在进行一定的操作后都调用SetValue方法来保存操作变量的值,以类似于Key-Value的形式

转到定义发现SetValue方法是fRequest和fRTPSession继承于QTSSDictionary

QTSSDictionary作为数据字典提供保存变量,获取变量,修改,删除变量。类似于SetValue的方法还有SetValuePtr,setVal,获取变量的方法有GetValue,GetValuePtr,GetValueAsString

所有派生与QTSSDictionary的类实例化对象,都是一个QTSS_Object,具有若干属性,每个属性有一个或多个值,QTSS_AttributeID标识每一个属性

通过SetVal可以为属性添加单个值,而SetValue为属性添加过个值,每一个属性有属性名,ID号,数据类型,读写权限,回调函数,属性定义类为QTSSAttrInfoDict

在QTSSDictionaryMap中,存放有QTSSAttrInfoDict** fAttrArray,使用这个属性数组维护每一个属性,同时QTSSAttrInfoDict继承于QTSSDictionary,所以他们是属性的属性。

QTSSDictionary中有两个指向QTSSDictionaryMap的指针,来维护QTSSDictionary中的每一个属性的属性名,ID,数据类型,读写权限,回调函数。

QTSSDictionary中存放真正的属性,每一个属性可以有一个或者多个值,QTSSDictionaryMap中存放的fAttrArray[QTSS_AttributeID]维护的是属性的属性,即描述属性的特征,包含属性的‘属性名,ID号,数据类型,读写权限,回调函数’。


QTSSDictionaryMap构造函数的第一个参数代表保留参数个数,代表已经有的属性个数,而带有QTSSDictionaryMap::kInstanceAttrsAllowed标识的字典表示可以增加实例属性,这些属性都是存在对象的私有map中  fInstanceMap = new QTSSDictionaryMap( 0, theFlags );

    sDictionaryMaps[kFileDictIndex]         = new QTSSDictionaryMap(qtssFlObjNumParams);
    sDictionaryMaps[kModuleDictIndex]       = new QTSSDictionaryMap(qtssModNumParams);

sDictionaryMaps[kModulePrefsDictIndex]  = new QTSSDictionaryMap(0, QTSSDictionaryMap::kInstanceAttrsAllowed | QTSSDictionaryMap::kCompleteFunctionsAllowed);

QTSSDictionaryMap内部有一个静态数组:



static QTSSDictionaryMap*       sDictionaryMaps[kNumDictionaries + kNumDynamicDictionaryTypes];
其中的每一个元素在QTSSDictionary::Initialize中进行分配内存:
 sDictionaryMaps[kAttrInfoDictIndex]     = new QTSSDictionaryMap(qtssAttrInfoNumParams);
而每一个元素QTSSDictionaryMap的赋值是在QTSSDictionary::Initialize中进行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值