UWP后台VoIP呼叫

UWP后台VoIP呼叫,uwp,voip,lifecycle,background-task,Uwp,Voip,Lifecycle,Background Task,我们正在为UWP桌面开发RTP VoIP应用程序。我们正在使用第三方库进行音频/视频通信。 只要应用程序处于前台或未最小化,音频连接就可以正常工作,但只要通过最小化音频连接将应用程序发送到后台,音频连接就会暂停。再次在前台时,连接将恢复 出现两种不同的情况: 失败:uwp桌面应用程序用户发起呼叫,然后最小化应用程序。音频被切断了 成功:uwp桌面应用程序接收呼叫(首先由PushNotificationChannel通知事件触发)。在这种情况下,在通话过程中,当应用程序最小化时,音频连接保持活动状

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

出现两种不同的情况:

  • 失败:uwp桌面应用程序用户发起呼叫,然后最小化应用程序。音频被切断了
  • 成功:uwp桌面应用程序接收呼叫(首先由PushNotificationChannel通知事件触发)。在这种情况下,在通话过程中,当应用程序最小化时,音频连接保持活动状态。。。这有点难以解释 目的是在最小化应用程序窗口的同时,让后台通话音频(对于案例1.)也能正常工作

    备注: 基于两种呼叫情况之间的差异(情况1没有推送通知),我们假设推送通知可能会获得某种类型的延迟,而我们并不知道。有趣的是,这部分是有效的。案例1。如果在案例2之后进行试验,也会起作用。在同一个应用程序会话中

    PS:我们已获得以下应用程序生命周期事件的延期:

            this.Suspending += this.OnSuspending;
            this.EnteredBackground += this.AppEnteredBackground;
            this.LeavingBackground += this.AppLeavingBackground;
    
            private void AppEnteredBackground(object sender, EnteredBackgroundEventArgs e)
            {
                var deferral = e.GetDeferral();
            }  
    
    并在清单中具有后台媒体功能:

    <uap3:Capability Name="backgroundMediaPlayback" />
    
    
    

    欢迎提出所有想法:)

    我们通过使用VoipPohneCall UWP功能找到了解决方案

    建立呼叫后,我们请求新的传出呼叫:

    _voipCall = VoipCallCoordinator.GetDefault().RequestNewOutgoingCall(...);
    _voipCall.NotifyCallActive();
    
    当通话结束时:

    _voipCall.NotifyCallEnded();
    
    涵盖我们所需的两个用例