首页 > 新闻 > 专家观点 >

利用基于原语的H.323协议栈开发VoIP系统

2013-11-18 17:11:21   作者:   来源:EET电子工程专辑   评论:0  点击:


    逻辑信道信令过程协商建立实时协议/实时控制协议(RTP/RTCP)信道,用于收发多媒体数据。

    定义数据

    抽象语法表示法(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,协议栈需要有关编解码器的信息以便调用合适的设备驱动程序。然而,该解决方案也不够合理,因为协议栈必须知道特定的设备信息,而这是不可移植的。

    创建VoIP应用系统

    为了更好地理解如何利用H.323协议栈实现VoIP应用系统,让我们看几个例子,它们展示了下层协议和应用层之间的交互关系。

    要利用基于原语的H.323协议栈实现的基本的VoIP应用系统,必须实现一组由H.323标准定义的流程。这些流程由可重入状态机组成,基于输入或输出原语的消息由状态机执行。另一个替代方案是面向任务的,为每一个流程启动一个新线程。无论哪种方案,用原语表示的输入或输出消息都是异步发生的。应用系统程序必须把状态值保持在这些流程中,而且某些流程可能会有多个运行实例。

    每个原语包括多个参数,这些参数必须在应用层定义。在Q.931中,参数相当简单且易于理解。然而,当学习H.245协议时,阅读复杂的ASN.1表结构是很困难的。有关能力集(capability set)流程的原语尤其复杂,ASN.1结构可能嵌套5到6层深。对于不熟悉ASN.1的人来说,这可不是简单工作。

    本地流程时序

    另一个核心开发问题是时序,即为了建立或拆除对远程主机的呼叫,本地流程所执行的时序。当考虑其它H.323实现或应用的互操作性时,研究时序问题尤其必要,这类系统的实例有Microsoft的NetMeeting和NetSpeak的WebPhone。尽管H.323规范揭示了流程之间的依赖关系,必须通过实验测试和反向工程来揭示发起呼叫并建立通信需要的时序。

分享到: 收藏

专题