【问题标题】:Xamarin MediaElement won't release video sourceXamarin MediaElement 不会发布视频源
【发布时间】:2020-06-18 11:30:27
【问题描述】:

大家好,我在 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;

【问题讨论】:

  • 考虑到MediaElement 仍处于预览阶段(从外观上看,这将是几个月之后),它确实很可能是一个错误。查看问题列表,如果没有列出,您可以报告:github.com/xamarin/Xamarin.Forms/…
  • 是的,我认为你是对的@MihailDuchev。我想我在此期间能做的就是隐藏播放器

标签: c# visual-studio xamarin xamarin.android mediaelement


【解决方案1】:

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

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

【讨论】:

  • 您也可以评论您遇到相同问题的问题。此外,如果您可以上传该问题的演示应用程序,将对他们有很大帮助。
【解决方案2】:

我开始使用 MediaElement,现在我认为我选择了错误的路线。这个错误仍然存​​在。

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

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

在我的情况下,我需要交替显示 VideoRecorder 和 MediaElement,有时Opacity 补丁也不起作用。所以,解决方法:

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 的人来说,我们现在将不得不把工作搞砸。
【解决方案3】:

想要显示视频尚未设置并显示一个图标。

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

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

资源\raw\videonotset.mp4

设置来源

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

对显示相机图标的 Image 元素做了同样的处理

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

资源\drawable\imagenotset.jpg

设置来源

imageelement.Source = "imagenotset.jpg";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-18
    • 1970-01-01
    • 1970-01-01
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多