- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
探讨开发H.323协议栈和VoIP应用系统遇到的问题
定义数据
抽象语法表示法(ASN.1)标准详尽说明了怎样表示语法或结构化数据分组,它用于在本地和远程端点间发送H.225和H.245消息。X.691规定了在ASN.1语法结构和网络接收的原始数据之间的编码和解码方法。H.225和H.245等ITU标准都为所有的协议消息规定了ASN.1语法结构。
RTP和RTCP也包括在H.323之中。RTP定义了一个消息头,附加到多媒体数据分组的前端,并通过用户数据报协议(UDP)发送。消息头包含了有关多媒体数据的信息,包括顺序号和时间戳。RTCP用这些数据来收集网络性能统计信息,例如分组间的抖动(测量分组到达时间的不规则性)和分组片段的丢失。
协议栈开发
开发H.323协议栈是一项艰巨的任务。困难产生于标准定义不详尽而且不一致。标准的模糊导致互操作问题,且所实现的协议栈移植性差。
Q.931和H.225定义了呼叫信令流程,但是定义不够充分。与H.245相比,Q.931和H.225定义的原语缺乏充分的文字说明。另外,产生混乱的原因是不完整的ASN.1标准,因而开发人员需要将X.691编码格式数据反向转换。RTP/RTCP、H.245和应用层间的关系也存在问题。
在H.323中,Q.931和H.225协议进行了融合,但是融合不够好。尤其是Q.931规范包含一些描述很充分的流程图,这些流程图显示相关消息、原语和超时之间的关系。而H.225将Q.931中的多个消息标记成"禁用",但却没有规定反映这些变化的新流程。这样,H.225缺乏足够的信息,因此,开发者得到的文档不完善。
与此相反,H.245是一个定义清晰的协议,具有大量的流程图。与Q.931和H.225不同,它规定了每个原语的参数。这是极其有用的,而且这表明了Q.931和H.225的缺陷。尽管Q.931是基于原语的,但是没有规定原语的字段。整个H.225标准只有一次提到原语而且没有提供包含参数的信息。为每个原语选择字段的工作留给了开发者,因此,Q.931的接口变成专有的和不可移植的接口。
影响H.323协议栈开发学习曲线的主要方面是ASN.1。尽管ASN.1详细说明了怎样描述语法,但是,将语法结构编码成字节流的方法有多个。X.691规定了打包编码原则(PER),是H.225和H.245使用的编码规则集。不幸的是,X.691的不足削弱了ASN.1的优点。ASN.1具有扩展给定语法的能力,而且能够以完全后向兼容的方式编码。但是,X.691只粗略地解释了怎样进行编码扩展。为了弥补X.691标准的不足,需要做大量的反向工程工作。通过购买现成的协议栈产品可以避免该任务。
RTP/RTCP和其它H.323相关协议的结合引入了更多难于捉摸的标准问题。为了设计一个模块化的H.323协议栈,需要在标准规定的范围内仔细定义各协议间通信的信息结构。H.323标准不能清晰地描述各协议的互通性。RTP/RTCP就是这种缺陷的一个范例。
实时协议问题
RTP/RTCP是设计者的大难题,因为很难从标准中推断出它与其它协议的关系。可能有两种选择:在应用层进行RTP/RTCP处理或者在下层协议中处理。
如果在应用层处理RTP/RTCP,应用程序必须知道RTP信道使用的端口号。因为使用原语进行协议栈通信,H.245原语必须能够将所有需要的端口信息传送给应用层。但是,这些原语没有描述远程主机端口号的参数。因此,需要以非标准方式修改这些原语,增补缺少的信息。
如果在下层处理RTP/RTCP,协议栈需要有关编解码器的信息以便调用合适的设备驱动程序。然而,该解决方案也不够合理,因为协议栈必须知道特定的设备信息,而这是不可移植的。
来源:电子工程专辑
上一篇:不同RAID级别的性能和安全性浅析
下一篇:24通道高精度A/D数据采集模块的研制