C# Xamarin 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="

大家好,我正在使用Xamarin中的MediaElement进行本地设备文件的视频播放

我面临的问题是能否发布MediaElement的视频源。我调用Stop并将Source属性设置为null,但最后一个视频仍然加载到具有播放功能的MediaElement中

我是遗漏了什么还是这是一个错误

以下是一些相关代码:

                             <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;
          }
        }            
    }