- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
探讨开发H.323协议栈和VoIP应用系统遇到的问题
如果采用替代方案,H.323协议栈不使用原语,协议栈需要包括一个已经实现了上述流程和状态机的中间层,并提供一个简化的应用编程接口(API)。对于前面的例子,协议栈要发一个呼出,只需要调用下面这一个函数即可:
在使用API实现的系统中,makeCall()函数接受远程端点的主机名字(hostname)和IP地址,并执行所有呼叫远程终端的步骤。该方案需要一个流程构造前述的原语,实现处理所有输入输出原语的状态机。使用基于API的协议栈不需要理解原语接口,可以节省数月的开发时间。
给原语参数赋值
前文的例子描述了流程的实现。下面的例子展示怎样给原语赋值,以能力信息互换流程的"TRANSFER.request"原语为例。
"TRANSFER.request"原语有四个字段,用ASN.1格式填充。这四个字段是PROTOID、MUXCAP、CAPTABLE 和 CAPDESCRIPTORS。在此,我们集中讨论CAPTABLE参数,它是特定终端支持的所有编解码器的列表。在此例中,填充的CAPTABLE参数表示以下终端能力:单一G.711 A律64k编解码器,能够接收的分组长达180ms音频数据。下面的伪码是初始化一个ASN.1结构元素的基本步骤。
CAPTABLE参数实际上是CapabilityTableEntry的数组。填充该参数的第一步是为该数组分配内存空间。每个被支持的编解码器都需要一个CapabilityTableEntry。在本例中,数组只有一个元素,因为只支持G.711编解码器。每个CapabilityTableEntry有两个元素:TableEntryNumber字段和可选的能力信息结构。
CAPTABLE[0].Capability.TableEntryNumber = 1 (1)
在行1的语句中,CapabilityTableEntryNumber任意设置,但是在同一消息中取值要不同。该参数由CAPDESCRIPTORS参数使用,以描述编解码器之间的依赖关系。CAPDESCRIPTORS结构要复杂得多,不在本文讨论范围内。
能力信息结构描述了至少12种基本能力/业务中的一种。该结构是可选的,但是不选用的情况不多。在特定的应用方式下,ReceiveAudioCapability被选用。像ReceiveAudioCapability的AudioCapability结构包含14多种不同的编解码器中的一种。用户必须选用其中一种编解码器。一旦选用了某特定的编解码器,相关字段必须定义。在g711Alaw64k情况下,只需要一个字段。第二行语句表示编解码器驱动器能够处理的分组大小至多180ms。
CAPTABLE[0].capability.receiveAudioCapability.g711Alaw64k = 180 (2)
来源:电子工程专辑
上一篇:不同RAID级别的性能和安全性浅析
下一篇:24通道高精度A/D数据采集模块的研制