2 votes

Xamarin MediaElement ne publie pas la source de la vidéo

Bonjour, j'utilise MediaElement dans Xamarin pour la lecture vidéo des fichiers du périphérique local.

https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/mediaelement

Le problème que je rencontre est de pouvoir libérer la source vidéo pour MediaElement. J'appelle Stop() et je mets la propriété Source à null, mais la dernière vidéo est toujours chargée dans le MediaElement avec des capacités de lecture.

J'ai raté quelque chose ou c'est un bug ?

Voici une partie du code correspondant :

                             <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" />

Attribution d'une adresse locale à la propriété source.

AnprVidSource = UserVideo.Path;

Le code tente d'effacer la source des MediaElements, ce qui ne semble rien faire.

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

2voto

Comme Milhail Duchev l'a mentionné, il semble que ce soit un bug :

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

1voto

bhavya Points 55

J'ai commencé à utiliser MediaElement et maintenant je pense que j'ai choisi la mauvaise voie. Ce bug est toujours actif.

Une fois qu'un MediaElement est créé, il ne peut pas être réglé sur Hide.IsVisible = false et Source=null n'a aucun effet. J'ai donc trouvé une solution de contournement qui permet au moins de le masquer en utilisant la commande Opacity .

De plus, vous ne pouvez pas dessiner une superposition sur MediaElement, car pour une raison quelconque, MediaElement reste toujours en haut.

Dans mon cas, j'ai besoin d'afficher alternativement VideoRecorder et MediaElement et parfois Opacity Le patch ne fonctionne pas non plus. Donc, une solution de rechange pour cela :

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

Même si la solution ci-dessus ne fonctionne pas pour vous, vous devrez créer un nouveau MediaElelemnt chaque fois que cela sera nécessaire et supprimer l'ancien.

Peut-être que cela aidera d'autres personnes.

1voto

Joe Budeen Points 23

Je voulais montrer que la vidéo n'avait pas encore été définie et afficher une icône.

Ainsi, à chaque fois que j'ai eu besoin de définir le MediaElement comme nul ou vide, j'ai mis la source à un court mp4 que j'ai créé à partir d'un jpg.

Ajouté le fichier au sous-dossier Android Resource

Ressources \raw\videonotset.mp4

Définir la source

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

J'ai fait de même pour l'élément Image qui affiche l'icône de l'appareil photo.

Ajouté le fichier au sous-dossier Android Resource

Ressources \drawable\imagenotset.jpg

Définir la source

imageelement.Source = "imagenotset.jpg" ;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X