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 提到的,它看起来是一个错误:
我开始使用 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";
大家好,我在 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 提到的,它看起来是一个错误:
我开始使用 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";