IAX2协议文档(RFC 5456)中文翻译
简介
在工作中接触到了IAX2协议,找遍了网上只找到了一些中文的论文。没有协议文档的具体翻译,最后只能自己看英文文档:《RFC 5456》。后因需要整理IAX2文档,就开始整理一个简短的文档,但发现还有所不足,后就开始着手进行翻译,也是为之后需要中文文档的人提供一些帮助,完整的文档地址:IAX2协议文档(RFC 5456)中文翻译。建议英文水平好的看原英文文档。
正文
下面为大家简单介绍一下IAX2协议:
IAX 是 Inter-Asterisk eXchange 的缩写,也就是 Asterisk 内部交换协议。IAX最初用在Asterisk上。
IAX优点:
- 只用一个UDP端口:4569,来传输通信数据,包括控制信令和媒体数据等。
- 媒体数据并不需要额外的RTP流,所以可以轻易穿越NAT。
- 媒体数据会用一个迷你帧来发送,迷你帧帧头只有4字节,不携带控制或信令数据,有效载荷比较大。迷你帧是不可靠传输,但由于语音通话通常是实时发送的,因此丢失的帧太旧而无法重新集成到音频流中,以至于无法重新传输,所以几乎没有影响,而且每65.536秒需要重置时间标志。
- 用二进制编码。
IAX缺点:
- 因为只用一个端口,所以容易被攻击。
- 编解码器定义由内部定义的32位掩码控制,因此编解码器必须在协议中定义,同时编解码器的最大数量受到限制。
- 实施问题(如果资源较少没有非常完善的库算的话)。
- 用二进制编码。
协议里每个字段的具体含义及详细介绍请参见:
这里给大家推荐几个iax Java库:
- njiax
实现的比较简陋,但是层次相对清晰,需要增加信令、完善交互流程等,线程创建数量较多,需要用线程池替代。 - djiax
实现相对完善,也需要增加信令、完善交互流程编码等,线程复用,但是限制了电话的并发数,应该用线程池替代。 - njiax-a
本人fork了njiax库,在此基础上增加部分信令、完善交互流程、增加G711和G729等编码方式、增加DTFMFrame处理、添加了简单的注册拨打示例等,详细信息见github。
可以转载,但请标明出处