Xamarin MediaElement 不会发布视频源

Xamarin MediaElement won't release video source

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

https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/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" />

正在为源分配本地地址 属性。

AnprVidSource = UserVideo.Path;

试图清除 MediaElements 源的代码似乎什么也没做

            meAnpr.Stop();
            meAnpr.IsEnabled = false;
            viewModel.AnprVidSource = null;

正如 Milhail Duchev 提到的,它看起来是一个错误:

https://github.com/xamarin/Xamarin.Forms/issues/9613

我开始使用 MediaElement,现在我想我选错了 route.This 错误仍然存​​在。

一旦创建了 MediaElement,就不能将其设置为 Hide.IsVisible = false 并且 Source=null 无效。所以,我发现至少可以隐藏它的解决方法是使用 Opacity.

此外,您不能在 MediaElement 上绘制叠加层,因为出于某种原因,MediaElement 始终保持在顶部。

就我而言,我需要交替显示 VideoRecorder 和 MediaElement,有时 Opacity 补丁不起作用 too.So,解决方法:

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

即使上述解决方案对您不起作用,您也必须在需要时创建一个新的 MediaElelemnt 并删除旧的。

也许这会对其他人有所帮助。

想显示视频还没有设置,显示一个图标。

因此,每当我需要将 MediaElement 设置为 null 或空白时, 我将源设置为我从 jpg 创建的短 mp4。

已将文件添加到 Android 资源子文件夹

Resources\raw\videonotset.mp4

设置来源

mediaelement.Source = "ms-appx:///videonotset.mp4";

对显示相机图标的图像元素执行相同操作

已将文件添加到 Android 资源子文件夹

Resources\drawable\imagenotset.jpg

设置来源

imageelement.Source = "imagenotset.jpg";