UWP 后台 VoIP 通话

Posted

技术标签:

【中文标题】UWP 后台 VoIP 通话【英文标题】:UWP Background VoIP Call 【发布时间】:2018-06-12 09:20:20 【问题描述】:

我们正在为 UWP 桌面开发 RTP VoIP 应用。我们正在使用第三方库进行音频/视频通信。 只要应用程序处于前台或未最小化,音频连接就可以正常工作,但只要通过最小化音频连接将应用程序发送到后台就会暂停。当再次在前台时,连接恢复。

有两种不同的情况发生:

    失败:uwp 桌面应用用户发起呼叫,然后最小化应用。音频被切断。 成功:uwp 桌面应用收到一个调用(首先由 PushNotificationChannel 通知事件触发)。在这种情况下,通话过程中,当应用最小化时,音频连接保持活动状态...这有点无法解释...

这里的目的是让后台通话音频(对于案例 1。)在应用程序窗口最小化时也能正常工作。

备注: 基于两个呼叫案例之间的差异(案例 1 没有推送通知),我们假设推送通知可能正在获取某种我们不知道的延迟。有趣的是,这部分有效。如果在案例 2 之后在同一应用会话期间尝试案例 1. 也将起作用。

PS:我们已经获得了以下应用生命周期事件的延迟:

        this.Suspending += this.OnSuspending;
        this.EnteredBackground += this.AppEnteredBackground;
        this.LeavingBackground += this.AppLeavingBackground;

        private void AppEnteredBackground(object sender, EnteredBackgroundEventArgs e)
        
            var deferral = e.GetDeferral();
          

并且在manifest中也有后台媒体能力:

<uap3:Capability Name="backgroundMediaPlayback" />

欢迎所有和任何想法:)

【问题讨论】:

【参考方案1】:

我们找到了使用 VoipPohneCall UWP 功能的解决方案。

当通话建立时,我们请求一个新的拨出电话:

_voipCall = VoipCallCoordinator.GetDefault().RequestNewOutgoingCall(...);
_voipCall.NotifyCallActive();

当通话结束时:

_voipCall.NotifyCallEnded();

涵盖了我们所需的两个用例。

【讨论】:

以上是关于UWP 后台 VoIP 通话的主要内容,如果未能解决你的问题,请参考以下文章

applicationWillTerminate 上的 Swift 后台任务

如何在android手机上合并两个gsm和voip通话

选择哪些应用程序在 Windows 中将 VOIP 通话中的所有其他声音静音

在voip通话期间以编程方式启用扬声器

VoIP——开启免费通话新时代的先锋

我可以使用 agora_rtc 在 Flutter 中实现一对一的语音通话(VOIP)吗?