MediaCapture 预览不起作用
MediaCapture preview doesn't work
这很奇怪。看起来获取简单视频流并在 XAML 表单上查看它的代码确实应该非常简单。
话不多说,我有以下,很简单,View:
<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 的笔记本电脑,而且运行良好。不知道如何解决未来的问题 - 我无法在这台笔记本电脑上继续开发,我只能将它用于此测试。
原来问题完全出在所提供的开发机器上。在我的本地机器上测试代码时,它工作得很好。
想想看,这不是这台开发机第一次出问题了;由于某种原因,VS 中可用的 "tablet simulator" 也无法启动...
这很奇怪。看起来获取简单视频流并在 XAML 表单上查看它的代码确实应该非常简单。
话不多说,我有以下,很简单,View:
<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 的笔记本电脑,而且运行良好。不知道如何解决未来的问题 - 我无法在这台笔记本电脑上继续开发,我只能将它用于此测试。
原来问题完全出在所提供的开发机器上。在我的本地机器上测试代码时,它工作得很好。
想想看,这不是这台开发机第一次出问题了;由于某种原因,VS 中可用的 "tablet simulator" 也无法启动...