高速G,729ab声码器设计及其在媒体网关中的应用
逆向处理从来自数字网络的编码数据。
由于数字网络属于分组通信,必须有合适的多媒体实时流网络传输协议以保证语音的连贯性。在声码器的HPI接口控制程序中,设计了一个提供给上层处理器的 RTP(Real-TIme Transport Protocol,实时传输协议)接口,用于完成编码和解码数据包的输出和输入及相应的RTP成帧、解帧功能,具体功能设计如下:
RTP打包和发送:RTP包由具有固定格式的包头和数据部分组成。将编码后的语音数据,按照RTP打包参数的要求组织RTP头和RTP净荷。 RTP包头中的关键字段为SN(Sequence Number,序列号)和TS(Time Stamp,时间戳)。SN用于对RTP包进行排序。每发送一个RTP数据包,SN加1。TS用于标识RTP数据包中第一个字节采样时的时刻,以语音样本为单位递增;对于语音包和静音压缩包,TS增值一致。另外,RTP包头中的PT(Payload Type,负载类型)字段用于指示RTP净荷的数据编码格式。在RFC3550中规定了标准音频载荷类型:G.729编码对应的PT为18。
由于RTP包头中没有长度字段,故对RTP包进行了外部扩展:将打好的RTP包作为净荷,附加上RTP包数据长度、通道号,组成“以太网数据包”。针对C6203的32位寻址的HPI总线接口,设计以太网数据包格式如图2所示。
RTP包发送:即写“以太网数据包”至“以太网数据发送缓存区”。首先根据该缓存区的读写指针判断剩余空间;如写空间不够,则放弃此次写操作,该数据包同时被丢弃。如写空间足够,则将数据包写入发送缓存区,并更新写指针。上层处理器根据该缓存区的读写指针判断该缓存区内是否有新数据,并进行读操作,以及更新读指针。
RTP包接收、排序和缓存:分组通信需要考虑语音的防抖动处理。本文通过设置静态抖动缓冲区实现去抖动。首先根据“以太网数据接收缓存区”的读写指针判断是否有新的数据包到来,如果有,则将该数据包根据RTP的SN和TS排列在相应通道的RTP缓存队列中。重复上述过程直至将“以太网数据接收缓存区”中所有的数据包读完,然后更新该缓存区的DSP读指针。对于每个通道的RTP缓存队列,当缓存语音数据到达预先定义的阈值K时,给出标志允许该通道开始进行语音数据解码。如果数据分组有抖动延迟,则解码语音可继续保持K时间单位不被打断。
4 结语
在纯汇编并行优化的基础上设计了高效的G.729ab声码器;利用TMS320C6203的在片外设McBSP实现了连接PSTN的标准E1接口;设计了用于分组数据收发的RTP协议接口,利用TMS320C6203的HPI接口方式与上层处理器连接,使声码器可灵活应用于媒体网关。
- 基于Android的VoIP系统的设计与实现(03-28)
- 基于多DSP系统互连方案分析(04-17)
- DSP技术热点应用的五大竞争法宝(04-18)
- 专用DSP成为提高VoIP语音质量的最佳选择(12-21)
- uPD720200在嵌入式媒体网关中的技术应用(09-12)
- 带DSP功能的超低功率音频编解码器帮助解决音频方案挑战(05-04)