0

In my video renderer, I am trying to set the volume to 0 by default. I tried to use setVolume but it is not available on my video view. Please suggest. I am looking to set the volume value to 0 when the video is in Background Mode. I have attached my VideoRenderer file for android for reference.

public class VideoPlayerRenderer : ViewRenderer<VideoPlayer, ARelativeLayout>
    {
        VideoView videoView;
        MediaController mediaController;    // Used to display transport controls
        bool isPrepared;

        public VideoPlayerRenderer(Context context) : base(context)
        {
        }

        protected override void OnElementChanged(ElementChangedEventArgs<VideoPlayer> args)
        {
            base.OnElementChanged(args);

            if (args.NewElement != null)
            {
                if (Control == null)
                {
                    // Save the VideoView for future reference
                    videoView = new VideoView(Context);

                    // Put the VideoView in a RelativeLayout
                    ARelativeLayout relativeLayout = new ARelativeLayout(Context);
                    relativeLayout.AddView(videoView);

                    // Center the VideoView in the RelativeLayout
                    ARelativeLayout.LayoutParams layoutParams =
                        new ARelativeLayout.LayoutParams(LayoutParams.MatchParent, LayoutParams.MatchParent);
                    layoutParams.AddRule(LayoutRules.CenterInParent);
                    videoView.LayoutParameters = layoutParams;

                    // Handle a VideoView event
                    videoView.Prepared += OnVideoViewPrepared;


                    SetNativeControl(relativeLayout);

                    //Update Volume
                    UpdateVolume();
                }

                SetSource();

            }

         private void UpdateVolume()
             {
                var volume = Element.Volume;

                if (volume != int.MinValue)
                {
                    var nativeVolume = (float)Math.Min(100, Math.Max(0, volume)) / 100;

                    //assign my native volume to my video view. 


                }

              }
pree
  • 239
  • 1
  • 3
  • 12

1 Answers1

0

The sender in the VideoView.Prepared event is a MediaPlayer. You can use that MediaPlayer instance to control your volume etc.

private void OnPrepared(object sender, EventArgs e)
{
    if (sender is MediaPlayer mediaPlayer)
    {
        mediaPlayer.SetVolume(0, 0);
    }
}

Alternatively if you prefer you can implement your own IOnPreparedListener and pass along to the VideoView:

private class PreparedListener : Java.Lang.Object, MediaPlayer.IOnPreparedListener
{
    public void OnPrepared(MediaPlayer mp)
    {
        mp.SetVolume(0, 0);
    }
}

And set this as listener on the VideoView like:

videoView.SetOnPreparedListener(new PreparedListener());
Cheesebaron
  • 24,131
  • 15
  • 66
  • 118