【发布时间】:2016-11-15 05:16:54
【问题描述】:
这很奇怪。看起来获取简单视频流并在 XAML 表单上查看的代码确实应该非常简单。
可以这么说,我有以下,很简单,查看:
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Border BorderBrush="White" BorderThickness="1" Width="400" Height="400" Padding="2">
<CaptureElement x:Name="captureElement" Loaded="captureElement_Loaded" Stretch="Uniform"/>
</Border>
<StackPanel HorizontalAlignment="Left" VerticalAlignment="Bottom" Orientation="Horizontal">
<Button Content="preview start" Tapped="StartPrevTapped" x:Name="prevStart"/>
<Button Content="preview stop" Tapped=StopPrevTapped" x:Name="prevStop" IsEnabled="False"/>
</StackPanel>
</Grid>
这里有 3 种方法:
MediaCapture mediaCaptureManager = new MediaCapture();
private async void captureElement_Loaded(object sender, RoutedEventArgs e)
{
var cameraDevices = await DeviceInformation.FindAllAsync(DeviceClass.VideoCapture);
var camera = cameraDevices.First();
await mediaCaptureManager.InitializeAsync(new MediaCaptureInitializationSettings { VideoDeviceId = camera.Id });
}
private async void StartPrevTapped(object sender, TappedRoutedEventArgs e)
{
captureElement.Source = mediaCaptureManager;
await mediaCaptureManager.StartPreviewAsync();
prevStart.IsEnabled = false;
prevStop.IsEnabled = true;
}
private async void StopPrevTapped(object sender, TappedRoutedEventArgs e)
{
await mediaCaptureManager.StopPreviewAsync();
prevStart.IsEnabled = true;
prevStop.IsEnabled = false;
}
代码不会抛出任何异常,但CaptureElement 不会显示任何内容。有什么问题?
一些补充说明:
- 我正在一台实际上没有网络摄像头的在线开发机器上编写代码。因此,我安装了ManyCam 的免费版本。 TestMyCam 显示它工作得很好。
- 由于与上述相同的原因,没有录音设备。
- 我尝试使用this MSDN sample project 提供的代码。它也无法显示任何预览。事实上,该项目在没有任何修改的情况下甚至无法启动预览,因为它假设将连接一个麦克风。
编辑:
奇怪的事情正在发生。问题似乎是由我提供的开发机器上的奇怪配置引起的,而不是代码本身。
await mediaCaptureManager.InitializeAsync,以前不会导致错误,现在抛出异常并显示消息The RPC server is unavailable。没有提供进一步的信息。这个消息很疯狂,因为它与媒体根本无关!我终于设法拿到了一台安装了网络摄像头和 VS 的笔记本电脑,它运行良好。不知道如何解决这个问题 - 我无法在这台笔记本电脑上继续开发,我只能将它用于这次测试。
【问题讨论】:
标签: c# xaml winrt-xaml webcam