是否可以配置 Asterisk 以便它在远程方实际接听之前从接收器发送带有音频的 RTP 数据包?
这似乎是我的设置需要通过的 VoIP 合规性测试所必需的。他们使用模拟器来测试这一点,当我呼叫另一方时,他们拿起听筒而不发送 OK。我可以听到另一边的声音,但他们听不到我的声音。我研究过directmediasetup
、,progressinband
但prematuremedia
这些都不能满足我的需要。使用 Asterisk 可以做到吗?
环境:
Asterisk 注册到 SIP 中继,硬件 SIP 电话注册到 Asterisk。出站呼叫通过 SIP 中继。Asterisk 版本:1.8.11。
答案1
Asterisk 可以实现早期媒体,但仅限于特定情况,并且需要所有相关设备和服务的配合/支持。某些电话和/或服务提供商不支持早期媒体。对早期语音和早期 DTMF 的支持可能有所不同。
您有一部注册到 Asterisk 的 SIP 电话,它可以拨打外部号码。Asterisk 随后通过单独的 SIP 中继拨打该号码。这是两个独立的呼叫支路。Asterisk 可以向呼叫者播放早期媒体(例如自定义铃声或等待音乐),并且 Asterisk 可以通过 SIP 中继从外部方接收早期媒体。但是,当远程方应答时,标准 Dial() 语句会自动执行 Answer() 并将呼叫支路桥接在一起。
看来您希望避免这种通常需要的行为,并在不使用 Answer() 的情况下桥接呼叫支路。Dial() 应用程序允许您使用“d”或“D”选项推迟通常自动执行的 Answer()。我不知道有任何 Dial() 选项允许您在不执行 Answer() 的情况下桥接呼叫线路。
请参阅 Asterisk wiki 以了解更多信息Asterisk 早期媒体的讨论和示例。
答案2
使用星号无法做到这一点。
Asterisk 不会过早打开反向媒体路径,因为这样做会导致某些设备停止工作。它只会在一个方向上过早打开媒体。
您可能可以通过重写代码来改变这一点(两个端点都必须支持这一点),但默认源树不支持这一点。
答案3
为什么不把 Asterisk 完全从媒体路径中移除呢?*
directmedia=yes
directrtpsetup=yes
prematuremedia=no ;this does the exact opposite of what everyone assumes it does
progressinband=no
Asterisk 会将邀请发送到对方,并在 SDP 中指定您的手机 IP 地址。当对方给出 183 会话进度时,Asterisk 会将其发送回您的手机,并在 SDP 中指定对方的 IP 地址。
只要您的手机支持,您就可以拥有双向早期媒体,而星号甚至没有机会妨碍和搞乱它。
* 好吧,Asterisk 仍然会在通话结束时暂时重新邀请自己回来,但除此之外,它会完全退出
答案4
有两种方法。一种是使用 183 Early media。另一种是使用 Answer() 应用程序。
在这两种情况下,媒体都将来自 Asterisk 端。
;183——会话进度方法。 扩展=> _X.,1,进度() 扩展=> _X.n,播放(tt-monkeys) ;200——答案 扩展=> _X.,1,答案() 扩展=> _X.,n,播放(tt-monkeys)