Xamarin MediaElement не будет выпускать источник видео - PullRequest
2 голосов
/ 18 июня 2020

Привет, ребята, я использую MediaElement в Xamarin для воспроизведения видео файлов локального устройства.

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;

Ответы [ 3 ]

2 голосов
/ 18 июня 2020

Как упоминал Михаил Дучев, это выглядит как ошибка:

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

1 голос
/ 15 июля 2020
• 1000 нет эффекта. Итак, обходной путь, который я нашел, чтобы, по крайней мере, скрыть его, использует 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 и удалять старый.

Возможно, это поможет другим.

0 голосов
/ 03 сентября 2020

Хотел показать, что видео еще не было настроено, и показать значок.

Поэтому всякий раз, когда мне нужно было установить для MediaElement значение null или пусто, я устанавливал в качестве источника короткий mp4, который я создал из jpg.

Добавлен файл в Android подпапку ресурса

Resources \ raw \ videonotset.mp4

Установить источник

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

Сделал то же самое для элемента Image, показывающего значок камеры

Добавил файл в Android подпапку Resource

Resources \ drawable \ imagenotset.jpg

Установить источник

imageelement.Source = "imagenotset.jpg";

...