其他分享
首页 > 其他分享> > CRT-用于UWP的WebRTC,新的RTCPeerConnection()未完成执行

CRT-用于UWP的WebRTC,新的RTCPeerConnection()未完成执行

作者:互联网

我正在尝试创建一个使用WebRTC的通用Windows平台应用程序,但是我的代码从未执行过第一个新的RTCPeerConnection.

我一直在研究UWP的开源项目WebRTC(blog post,带有git repos的链接),并设法构建和运行ChatterBox VoIP客户端示例.由于我是UWP编程和WebRTC(以及.NET,C#和Windows编程的新手)的新手,因此我在上述存储库中查看的示例过于复杂,以至于我无法理解.

首先,我想将WebRTC.org简约codelab exercise重新创建为用C#编写的UWP应用程序.原始的HTML / javascript创建了一个包含两个视频流的网页,一个是本地视频流,另一个是通过WebRTC发送的.但是,我的UWP代码甚至还没有创建第一个RTCPeerConnection.

我正在使用Visual Studio 2015并已为UWP安装了Nuget WebRTC软件包.

我的代码,第一个版本

public sealed partial class MainPage : Page
{
    RTCPeerConnection _pc1;
    public MainPage()
    {
        this.InitializeComponent();
    }
    // Code that is executed when ‘Call’ button is clicked
    private async void uxCall_Click(object sender, RoutedEventArgs e)
    {
        /* GetDefaultList() returns List<RTCIceServer>, with Stun/Turn-servers borrowed from the ChatterBox-example */
        var config = new RTCConfiguration() { IceServers = GetDefaultList() };
        pc1 = new RTCPeerConnection(config);
        Debug.WriteLine(“Never reaches this point”);
    }
}

调试和打印输出显示,从未到达创建新RTCPeerConnection之后的语句.我以为可能无法在主线程上创建新的RTCPeerConnection,所以我更新了代码以在另一个线程上运行该代码.

我的代码,第二版

public sealed partial class MainPage : Page
{
    RTCPeerConnection _pc1;
    public MainPage()
    {
         this.InitializeComponent();
    }
    // Code that is executed when ‘Call’ button is clicked
    private async void uxCall_Click(object sender, RoutedEventArgs e)
    {
         var config = new RTCConfiguration() { IceServers = GetDefaultList() };
         _pc1 = await CreatePeerConnection(config);
         Debug.WriteLine(“Never reaches this point”);
    }

    private async Task<RTCPeerConnection> CreatePeerConnection(RTCConfiguration config)
    {
         RTCPeerConnection pc;
         Debug.WriteLine("Creating peer connection.");
         pc = await Task.Run(() => {
               // A thread for the anonymous inner function has been created here
               var newpc = new RTCPeerConnection(config);
               Debug.WriteLine("Never reaches this point");
               return newpc;
         });
         return pc;
     }
}

调试打印输出显示,在创建新的RTCPeerConnection之后,代码未到达该行.调试显示,为匿名内部函数创建的线程永远不会被破坏.我曾尝试在代码实验室练习中使用空的RTCConfiguration,但没有区别.

我对WebRTC,UWP和UWP中的异步/线程编程的经验不足,这使我很难确定错误的位置.任何帮助将不胜感激.

解决方法:

我终于找到问题了,解决方法是半途而废:

有一个静态方法Initialize(CoreDispatcher dispatcher),该方法使用分派器和辅助线程(在UWP WebRTC包装器中链接到definition)初始化WebRTC.创建新的RTCPeerConnection之前的以下语句解决了该问题.

 WebRTC.Initialize(this.Dispatcher);

根据ChatterBox示例,在Windows 10中,可以将null而不是调度程序作为参数(code example).

标签:windows-10-universal,uwp,webrtc,windows-10,c
来源: https://codeday.me/bug/20191111/2020290.html