中国视频在线(www.chinavideoonline.com)致力于收集各种流媒体相关的技术资料,以及流媒体常识和应用方案,力求为广大朋友了解学习和使用流媒体技术提供帮助
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 决定包是否丢失。
象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 决定包是否丢失。
(C) 2004-2006 中国视频在线 技术支持:梦想家网络工作室
