Featured image of post rtpengine 按键转换

rtpengine 按键转换

背景

在上一章中,我们介绍了dtmf按键功能,可以看到rtpengine能够把收到的rfc2833inbound类型的dtmf透传到uas

在实际项目中, 我们可能还需要对dtmf做按键类型转换, 在rtpengine的官方文档transcoding中,我们找到这样一段话:

Rtpengine supports transcoding between RFC 2833/4733 DTMF event packets (telephone-event payloads) and in-band DTMF audio tones. When enabled, rtpengine translates DTMF event packets to in-band DTMF audio by generating DTMF tones and injecting them into the audio stream, and translates in-band DTMF tones by running the audio stream through a DSP, and generating DTMF event packets when a DTMF tone is detected.

所以可以得知rfc2833/4733inbound类型可以互相转换。

本次测试的rtpengine版本:

Version: 13.1.0.0+0~mr13.1.0.0 git-heads/mr13.0.1.2-3ac08574

rfc2833 转inbound

opensips调用rtpengine_manager里,参数设置如下:

always-transcode codec-mask-all codec-transcode-telephone-event codec-strip-telephone-event

通过抓包得到的结果如下: sip

opensips转发给uasRTP按键内容为: inbound

所以可以确定rfc2833inbound成功。

另外uac发送的inviteSDP信息为: sip

opensips转发给uasinvitesdp信息: sip

可能有点问题的是: 这个转发的invite居然把media相关的信息都去掉了。

inbound 转rfc2833

目前没有成功,我用了always-transcode detect-DTMF codec-transcode-telephone-event codec-strip=telephone-eventalways-transcode inject-DTMF codec-transcode-telephone-event codec-strip=telephone-event,都没转成功。

rtpengine的group发的帖子,一直自动删除. 后面如果有成功的,会在这里补充。

INFO 转 rfc2833

按键INFOsip信令如下: sip

可以看到按键的INFOsip头里的content-typeapplication/dtmf-relay, BODY里的Signal即为按键内容。

opensips的配置中,设置如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
 if(is_method("INFO") && ($cT == "application/dtmf-relay")){
        $var(info-body) = $rb;
        $var(signal) = $(var(info-body){s.substr,0,8});
        if ($var(signal) != "") {
                $var(signalNumber) = $(var(signal){s.substr,7,1});
                xlog("L_DBG","[$cfg_line][$ci]---info--:$rm|$rs|$tu|---receive dtmf:$rb,signal:$var(signal),number:$var(signalNumber)\n");
                rtpengine_play_dtmf($var(signalNumber));
                sl_send_reply(200, "OK");
                exit;
        }
 }

能接收的按键为:(0-9)(*,#,A,B,C,D)

另外还要在转发的invite,生成SDP信息时,rtpengine_manager的参数添加如下:

always-transcode inject-DTMF codec-mask-all

实际抓包的sip信令如下: sip

确实可以看到INFO转成了rfc2833类型的按键。

uac发送的inviteSDP信息为: sdp

opensips转发给uasinvitesdp信息: sdp

INFO 转 inbound

暂未成功。

总结

  1. rtpengine的按键转换功能, 目前验证成功是rfc2833inboundINFOrfc2833inboundrfc2833INFOinbound暂未成功。
  2. rfc2833或者inbound应该不能转成INFO类型。
本博客已稳定运行
发表了42篇文章 · 总计72.26k字
本站总访问量 次 · 您是本站第 位访问者
粤ICP备2025368587号-1| 使用 Hugo 构建
主题 StackJimmy 设计