WebRTC C#视频流在编解码器更改之前无法启动

时间:2017-08-01 07:04:14

标签: c# uwp webrtc

我正在使用视频UWP应用程序,我在GitHub上发现Chatterbox这似乎是一个很好的解决方案。

现在我想出了一个问题:有时视频流无法启动,我需要切换所选的视频编解码器。

默认情况下有两个工作视频编解码器,VP8和H264,这两个都运行良好但是当我重新安装UWP时,我遇到了这个问题,视频不会启动,直到编解码器被切换。这个问题似乎不依赖于哪个是默认编解码器,有时它显示H264为默认值,有时默认为VP8。

我正在试图解决这个调试应用程序并尝试发现错误的位置及其生成方式,但直到现在我还没有找到它。

是否有人为了解决这个烦人的问题而遇到类似的问题或有一些建议要给我?

1 个答案:

答案 0 :(得分:0)

最后我已经解决了这个问题,在这里我将尝试解释我采用的程序,它不是很优雅,但它有效。

重现错误:

为了重现此错误,您只需在未访问设置页面的情况下启动视频通话;如果此页面已导航关闭应用程序并再次启动,则打开视频通话而不导航到设置。

错误解释:

该错误是由应用程序启动时设置加载引起的,某些配置具有默认值,例如具有signalingServerAdress和SignalingServerPort;其他配置是dinamically和异步加载(例如视频和音频编解码器),因为它们依赖于硬件功能。 当异步启动UWP时,配置未正确加载且Context对象未完全填充。 当sdp商品被发送到远程对等体时,这个不完整的对象会导致视频流无法启动。

错误解决方案(不是很优雅):

我已经解决了强制应用程序显示设置页面的错误,因此加载了所有配置,用户必须保存它才能导航到联系人页面。

我修改了 ContactsView.xaml.cs 添加布尔_isFirstNavigation = true,然后我调用了ShowSettings命令来显示设置页面。

这里我修改了整个方法:

private void ContactsView_DataContextChanged(FrameworkElement sender, 
DataContextChangedEventArgs args)
        {
            var viewModel = DataContext as ContactsViewModel;
            if (viewModel == null) return;
            viewModel.RingtoneElement = RingtoneElement;



            //adding the following if block solved the bug
            if (_isFirstNavigation)
            {
                viewModel.ShowSettings.Execute(null);
                _isFirstNavigation = false;
            }
        }