我想在页面内显示相机的流。像那样:
该应用程序主要在 Windows 10 上运行。我已将 Fall Creators Update (16299) 设置为 Windows 的最低版本。
我找到了 CameraView (来自 Xamarin Community Toolkit - 1.2.0),但它不起作用......说明:
我使用状态(来自工具包):
- “正在加载”以显示 ActivityIndicator,
- “无”显示相机流和其他控件,
- “成功”显示拍摄的图像,
- “错误”显示错误。
我使用由 Visual Studio 模板生成的基本 MVVM 模式。我的页面在 XAML 中附加到 ViewModel:
<ContentPage ...>
<ContentPage.BindingContext>
<vm:FooViewModel />
</ContentPage.BindingContext>
<ContentPage.Content>
<Grid ...>
<xct:StateLayout.StateViews>
<xct:StateView StateKey="Loading">
<ActivityIndicator .../>
</xct:StateView>
<xct:StateView StateKey="None"
VerticalOptions="FillAndExpand"
HorizontalOptions="FillAndExpand">
<xct:CameraView VerticalOptions="FillAndExpand"
HorizontalOptions="FillAndExpand"
CaptureMode="Photo"
CameraOptions="Default"/>
</xct:StateView>
</xct:StateLayout.StateViews>
<CollectionView Grid.Column="1"/>
</Grid>
</ContentPage.Content>
我尝试将 CameraView 控件移到 StateLayout 之外。该控件显示在“实时可视树”中,但相机不显示流。
在 UWP 上:
我检查了“相机”和“麦克风”功能是否已启用。
当设置“无”状态时(在“加载”状态之后),我的控件在“实时可视树”上可见,除了 CameraView...
在安卓上
我检查了 Android Manifest 上是否启用了“RecordAudio”和“Camera”权限。
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAMERA" />
我使用安卓模拟器。
同样的行为......但是!当我将 CameraView 移动到 Grid 时,相机会流式传输并显示出来!
其他信息
- 我的网络摄像头工作(在 Windows 相机应用程序中)
- 我使用 Xamarin.Essentials 1.7.0 请求权限
- 我尝试过使用 .NET 5 的 VS2019 和 VS2021
2021 年 6 月 9 日更新
我删除了状态管理。我还尝试使用 Visual State Manager(在 Xamarin.Forms API 中提供):
<Grid...>
<xct:CameraView
x:Name="cameraView"
CaptureMode="Photo"
FlashMode="Off"
HorizontalOptions="FillAndExpand"
MediaCaptured="MediaCaptured"
OnAvailable="CameraView_OnAvailable"
VerticalOptions="FillAndExpand"/>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup Name="FooStates">
<VisualState Name="State0">
<VisualState.Setters>
<Setter Property="IsVisible" Value="False"/>
</VisualState.Setters>
</VisualState>
<VisualState Name="State1">
<VisualState.Setters>
<Setter Property="IsVisible" Value="True"/>
</VisualState.Setters>
</VisualState>
<VisualState Name="State2">
<VisualState.Setters>
<Setter Property="IsVisible" Value="False"/>
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
</xct:CameraView>
</Grid>
最后,完全远程管理状态:
<Grid....>
<xct:CameraView
x:Name="cameraView"
CaptureMode="Photo"
FlashMode="Off"
HorizontalOptions="FillAndExpand"
MediaCaptured="RecognitionCameraView_MediaCaptured"
OnAvailable="RecognitionCameraView_OnAvailable"
VerticalOptions="FillAndExpand"
IsVisible="{Binding CameraIsVisible}"/>
</Grid>
结果是一样的...该页面在Windows上不显示相机流...
Xamarin 社区工具包示例
我尝试了 Xamarin Community Tollkit 示例应用程序,CameraView 工作正常。我什至尝试从示例中复制 XAML...该页面未在 Windows 上显示相机流...
解决方法
最后,我无法使用CameraView
控件(来自Xamarin.Community.Toolkit
包)在 Windows 上流式传输相机......
我选择了一个基本的替代解决方案:自定义渲染器。
我受到 Xamarin 官方文档和他的示例的启发。该代码可在此处获得: