|
|
RealSystem SDK(四) 作者/来源:Real.com |
3.6 使用IRMAValues 创建索引列表 象IRMABuffer, IRMAValues 接口广泛用在RealSystem系统中。IRMAValues 接口允许RealSystem组件创建名称、数值通用列表。IRMAValues 数值类型如下: unsigned long 指向任意数据缓冲区的指针 指向以null结尾的C字符串缓冲区的指针 RealSystem组件创建IRMAValues 对象过程如下: 通过 IRMACommonClassFactory 创建IRMAValues接口 调用IRMAValues::SetPropertyULONG32、IRMAValues::SetPropertyBuffer、或 IRMAValues::SetPropertyCString 方法添加名称/数值。 传递对象指针给其他组件。 用 IUnknown::Release释放接口。
事例如下所示: IRMAValues* pHeaderObj = NULL; m_pClassFactory- CreateInstance(CLSID_IRMAValues, (void**)&pHeaderObj); if (pHeaderObj != NULL) { IRMAPluginpHeaderObj-SetPropertyULONG32(\"StreamCount\", 1); IRMAPluginpHeaderObj-SetPropertyBuffer(\"OpaqueData\", pHeaderDataReadFromFile);
收到指向IRMAValues 接口的指针后,RealSystem组件可使用IRMAValues::GetProperty 根据名称检索数值,此处 为ULONG32、缓冲区、或 Cstring。组件可通过IRMAValues::GetFirstProperty与IRMAValues::GetNextProperty遍历列表。 3.7 使用IRMAPacket创建流数据包 RealSystem组件使用IRMAPacket接口创建数据包。例如,文件格式插件需要此接口为服务器准备流数据包;而客户端播放插件使用系统后通道向文件格式插件发送信息包 。RealSystem组件创建包过程如下: 通过IRMACommonClassFactory创建IRMAPacket 接口。 调用 IRMAPacket::Set 向包传递一个指向IRMABuffer 接口的指针,并定义包属性,如发送时间、自适应智能流管理规则。包属性有助于RealSystem有效传输。 传递指向其他组件的包指针。 以 IUnknown::Release释放包接口。 事例如下所示: IRMAPacket* pPacketObj = NULL; m_pClassFactory- CreateInstance(CLSID_IRMAPacket, (void**)&pPacketObj); if (pPacketObj != NULL) { IRMAPluginUINT32 deliveryTime = m_NextPacketDeliveryTime; IRMAPluginUINT16 streamNoIRMAPlugin = MY_STREAM_NO; IRMAPluginUINT8 ASMFlags = RMA_ASM_SWITCH_ON; IRMAPluginUINT16 ASMRuleNo = 0; IRMAPluginpPacketObj-Set(pPacketDataReadFromFile, deliveryTime, streamNo, ASMFlags, ASMRuleNo); 收到指向包接口指针后,RealSystem组件用IRMAPacket::Get检索包数据。其他方法允许组件检索特定包属性。组件也可调用IRMAPacket::IsLost 决定包是否丢失。 |
|