【发布时间】:2017-06-26 18:47:36
【问题描述】:
我正在更新现有的 iOS VOIP 应用程序以将 CallKit 与 PJSIP 2.6 和 PJSUA2 一起使用。
经过一番努力,CallKit 实现似乎按预期工作。来电可以被接受或拒绝,如果被接受,将通过应用内的活动呼叫视图控制器进行连接和控制。
但是,音频在 pjsip 端似乎没有正确连接。没有音频从远程呼叫者传入或传出。麦克风音频似乎被路由回 iPhone 扬声器。
SIP 音频端口应该在回调函数 onCallMediaState 中连接:
虚空 onCallMediaState(OnCallMediaStateParam &prm) {
CallInfo ci = getInfo();
AudioMedia* audio_media = 0;
for (unsigned i = 0; i < ci.media.size(); i++) {
if (ci.media[i].type==PJMEDIA_TYPE_AUDIO && ( ci.media[i].status == PJSUA_CALL_MEDIA_ACTIVE ||
ci.media[i].status ==PJSUA_CALL_MEDIA_REMOTE_HOLD)) {
try {
audio_media = static_cast<AudioMedia*>(getMedia(i));
if(audio_media != 0)
{
Endpoint::instance().audDevManager().getCaptureDevMedia().startTransmit(*audio_media);
audio_media->startTransmit(Endpoint::instance().audDevManager().getPlaybackDevMedia());
}
} catch (std::exception ex) {
continue;
}
}
}
}
如 Ticket#1941 中所述: https://trac.pjsip.org/repos/ticket/1941:
-
我使用以下方式设置音频设备:
ep->audDevManager().setNullDev();
在 Endpoint 类 (ep->libInit(epConfig);) 初始化之后,然后:
- 我尝试在 CXProvider 的 didActivate 函数中使用 pjsua_set_snd_dev() 设置设备,如下所示:
-(void) setSipSoundDevices {
pj_status_t status;
int captDev, playDev;
pjsua_get_snd_dev(&captDev, &playDev);
Endpoint::instance().audDevManager().setPlaybackDev(playDev);
Endpoint::instance().audDevManager().setCaptureDev(captDev);
}
pjsua_get_snd_dev(&captDev, &playDev) 返回 -99, -99 且音频未连接。
我的问题是这样的。如何在使用 PJSIP 2.6 和 CallKit 的来电中正确连接远程音频源或端口?
2.5.5 在这方面会更好吗?
感谢任何见解。
【问题讨论】:
-
您找到解决此问题的方法了吗?我现在也遇到了同样的问题。接听来电后,两端无音频。
-
我在为来电和去电连接音频方面取得了更好的成功。没有简单的答案,但我做了一些帮助的事情。 1) 我构建并重建了 PJSIP 2.6 库。 PJSUA 根本不应该处理 AudioSession(ala PJSIP 和 CallKit 文档)。然而,这在 CallKit 示例代码中引入了与音频相关的崩溃和故障。 2)我安装了“pjsip”吊舱,并用一些与音频相关的库(想到了 webrtc)替换了我自己构建的库。 3) 在音频开始连接之前,我重新排列了很多 CallKit 代码。
-
我仍然面临 1) 应用程序启动后第一次来电音频未连接,而去电连接正常的问题。 2) 在没有“呼叫失败”屏幕的情况下未断开拨出电话,以及 3) 在“保持并接受”后中断运营商呼叫后音频未重新连接。
-
如何在用户单击呼叫套件屏幕上的接听按钮时启动音频。你能解释一下吗?在我的情况下,callkit 正在作为另一个应用程序工作.. 在参加通话时,我的应用程序已进入后台。然后用户点击回答按钮,音频无法正常工作,因为我的应用程序已进入后台。
-
在我的情况下,拨出电话工作正常,bcoz 我使用单独的视图控制器。我刚刚在 info.plist 文件中添加了麦克风权限。对于保持和取消保持,pjsip 中有方法。请验证并更正。
标签: ios iphone pjsip avaudiosession callkit