C# Xamarin MediaElement不会发布视频源
大家好,我正在使用Xamarin中的MediaElement进行本地设备文件的视频播放 我面临的问题是能否发布MediaElement的视频源。我调用Stop并将Source属性设置为null,但最后一个视频仍然加载到具有播放功能的MediaElement中 我是遗漏了什么还是这是一个错误 以下是一些相关代码:C# Xamarin MediaElement不会发布视频源,c#,visual-studio,xamarin,xamarin.android,mediaelement,C#,Visual Studio,Xamarin,Xamarin.android,Mediaelement,大家好,我正在使用Xamarin中的MediaElement进行本地设备文件的视频播放 我面临的问题是能否发布MediaElement的视频源。我调用Stop并将Source属性设置为null,但最后一个视频仍然加载到具有播放功能的MediaElement中 我是遗漏了什么还是这是一个错误 以下是一些相关代码: <MediaElement HeightRequest="
<MediaElement
HeightRequest="200"
ShowsPlaybackControls="True"
BackgroundColor="#141d3d"
Grid.Row="1"
Aspect="AspectFill"
AutoPlay="True"
IsVisible="{Binding IsVideoVisible}"
Source="{Binding AnprVidSource}"
x:Name="meAnpr"
KeepScreenOn="True" />
试图清除MediaElements源代码的代码,但似乎没有任何作用
meAnpr.Stop();
meAnpr.IsEnabled = false;
viewModel.AnprVidSource = null;
正如Milhail Duchev提到的,这看起来是一个bug:
我开始使用MediaElement,现在我想我选择了错误的路径。这个bug仍然很活跃 创建MediaElement后,不能将其设置为Hide。IsVisible=false和Source=null无效。所以,我找到了一个至少可以隐藏它的解决方法,那就是使用不透明度 此外,您不能在MediaElement上绘制覆盖,因为出于某种原因,MediaElement始终保持在顶部 在我的情况下,我需要交替显示录像机和MediaElement,有时不透明补丁也不起作用。因此,解决方法如下:
videoPlayer.PropertyChanged += VideoPlayer_PropertyChanged;
private void VideoPlayer_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
if(e.PropertyName == nameof(IsVisible))
{
if(videoPlayer.IsVisible){
videoPlayer.WidthRequest = 500; videoPlayer.HeightRequest = 500;
}else{
videoPlayer.WidthRequest = 0; videoPlayer.HeightRequest = 0;
}
}
}
即使上述解决方案不适用于您,您也必须在需要时创建新的MediaElement并删除旧的MediaElement
也许这会对其他人有所帮助。希望显示视频尚未设置并显示图标 因此,每当我需要将MediaElement设置为null或空白时, 我将源代码设置为我从jpg创建的短mp4 已将该文件添加到Android资源子文件夹 资源\raw\videonotset.mp4 设置源 mediaelement.Source=ms-appx:///videonotset.mp4; 对显示相机图标的图像元素执行了相同的操作 已将该文件添加到Android资源子文件夹 资源\drawable\imagenotset.jpg 设置源
imageelement.Source=imagenotset.jpg 考虑到MediaElement仍在预览中,而且从外观上看,还需要几个月的时间,这很可能是一个bug。看看问题列表,如果没有列出,你可以报告:是的,我认为你是对的@MihailDuchev。我想在此期间我能做的就是隐藏玩家你也可以评论你有同样的问题。另外,如果你能上传一个关于这个问题的演示应用程序,对他们会有很大帮助。好主意,我的朋友!是的,对于我们这些使用MediaElement的人来说,我们现在必须把工作搞砸。
videoPlayer.PropertyChanged += VideoPlayer_PropertyChanged;
private void VideoPlayer_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
if(e.PropertyName == nameof(IsVisible))
{
if(videoPlayer.IsVisible){
videoPlayer.WidthRequest = 500; videoPlayer.HeightRequest = 500;
}else{
videoPlayer.WidthRequest = 0; videoPlayer.HeightRequest = 0;
}
}
}