Exemplo n.º 1
0
        private void PrepareSingleSource(string uri, MediaItem media)
        {
            durationSet = false;

            if (uri.StartsWith("file://"))
            {
                mediaSource = new ExtractorMediaSource(Android.Net.Uri.Parse(uri), defaultDataSourceFactory, extractorsFactory, null, null);
            }
            else
            {
                mediaSource = new ExtractorMediaSource(Android.Net.Uri.Parse(uri), httpDataSourceFactory, extractorsFactory, null, null);
            }

            //mediaSource = new ExtractorMediaSource(Android.Net.Uri.Parse(uri), httpDataSourceFactory, extractorsFactory, null, null);
            try
            {
                _player.Prepare(mediaSource);
            }
            catch (Exception e)
            {
                Toast.MakeText(Context, Resource.String.noconnectionshort, ToastLength.Short).Show();

                //LoginFuncs.ShowError(Context, new Exception(e.Message));
            }
        }
Exemplo n.º 2
0
        private async void PlayEdit(Edit edit)
        {
            var videofile = edit.shortlink;

            shareedit = edit;

            Bootlegger.BootleggerClient.LogUserAction("Preview",
                                                      new KeyValuePair <string, string>("editid", edit.id));

            //AndHUD.Shared.Show(this, "Loading...", -1, MaskType.Black, null, null, true);
            //FindViewById<EditVideoView>(Resource.Id.videoplayer).ClearVideoSource();
            //FindViewById<ImageButton>(Resource.Id.sharebtn).Visibility = ViewStates.Visible;
            //get video url:
            try {
                //set other fields:
                FindViewById <TextView>(Resource.Id.metadata).Text = edit.title;
                FindViewById <TextView>(Resource.Id.timemeta).Text = edit.createdAt.LocalizeFormat("ha E d MMM yy");
                if (string.IsNullOrEmpty(edit.description))
                {
                    FindViewById <TextView>(Resource.Id.description).Visibility = ViewStates.Gone;
                }
                else
                {
                    FindViewById <TextView>(Resource.Id.description).Text       = edit.description;
                    FindViewById <TextView>(Resource.Id.description).Visibility = ViewStates.Visible;
                }

                string url = await Bootlegger.BootleggerClient.GetEditUrl(edit);


                //DefaultHttpDataSourceFactory httpDataSourceFactory = new DefaultHttpDataSourceFactory("BootleggerPreview");

                ////var ok = new OkHttpClient();
                //int cacheSize = 300 * 1024 * 1024; // 300 MiB
                //Square.OkHttp3.Cache cache = new Square.OkHttp3.Cache(FilesDir, cacheSize);

                var client = new OkHttpClient.Builder()
                             //.Cache((Application as  BootleggerApp).FilesCache)
                             .Build();
                OkHttpDataSourceFactory httpDataSourceFactory = new OkHttpDataSourceFactory(client, "BootleggerPreview");

                var extractorsFactory = new DefaultExtractorsFactory();
                mediaSource = new ExtractorMediaSource(Android.Net.Uri.Parse(url), httpDataSourceFactory, extractorsFactory, null, null);
                _player.Prepare(mediaSource);
            }
            catch (Exception e)
            {
                //adjust to what kind of exception it is:
                LoginFuncs.ShowToast(this, e);
            }
            finally
            {
                //AndHUD.Shared.Dismiss();
            }
        }
        private void InitComponent()
        {
            try
            {
                VideoSurfaceView = FindViewById <PlayerView>(Resource.Id.pv_fullscreen);
                BtFullScreen     = FindViewById <ImageView>(Resource.Id.exo_fullscreen_icon);

                SetPlayer();

                BtFullScreen.Click += BtFullScreen_Click;

                ///////////////////////////

                ProgressBar            = FindViewById <ProgressBar>(Resource.Id.progress_bar);
                ProgressBar.Visibility = ViewStates.Visible;

                //===================== Exo Player ========================

                // Uri
                Uri uri         = Uri.Parse(VideoUrl);
                var videoSource = GetMediaSourceFromUrl(uri, uri?.Path?.Split('.').Last(), "normal");

                VideoPlayer.Prepare(videoSource);
                VideoPlayer.PlayWhenReady = true;

                TabbedMainActivity.GetInstance()?.SetOnWakeLock();
            }
            catch (Exception e)
            {
                Methods.DisplayReportResultTrack(e);
            }
        }
        public override async Task <bool> SetMediaPlayerDataSource()
        {
            var source = GetSource(CurrentFile.Url);

            _mediaPlayer.Prepare(source);
            return(await Task.FromResult(true));
        }
Exemplo n.º 5
0
        public void playVideo(string url, string typestream)
        {
            var MyURL    = url;
            var mediaUri = Android.Net.Uri.Parse(MyURL);

            var userAgent = Util.GetUserAgent(this, "Player");
            var defaultHttpDataSourceFactory = new DefaultHttpDataSourceFactory(userAgent);
            var defaultDataSourceFactory     = new DefaultDataSourceFactory(this, null, defaultHttpDataSourceFactory);

            if (typestream == "HLS")
            {
                playerView.UseController = false;
                extractorMediaSource     = new HlsMediaSource.Factory(defaultDataSourceFactory).CreateMediaSource(mediaUri);
            }
            else if (typestream == "MP4")
            {
                extractorMediaSource = new ExtractorMediaSource(mediaUri, defaultDataSourceFactory, new DefaultExtractorsFactory(), null, null);
            }
            ConcatenatingMediaSource concatenatedSource =
                new ConcatenatingMediaSource(extractorMediaSource);
            var defaultBandwidthMeter         = new DefaultBandwidthMeter();
            var adaptiveTrackSelectionFactory = new AdaptiveTrackSelection.Factory(defaultBandwidthMeter);
            var defaultTrackSelector          = new DefaultTrackSelector(adaptiveTrackSelectionFactory);

            player = ExoPlayerFactory.NewSimpleInstance(this, defaultTrackSelector);

            player.Prepare(concatenatedSource);

            player.AddListener(new CustomListener());

            playerView.Player = player;

            player.PlayWhenReady = true;
        }
Exemplo n.º 6
0
        private void setCurrentPlayer(IPlayer currentPlayer)
        {
            if (this.currentPlayer == currentPlayer)
            {
                return;
            }

            // View management.
            if (currentPlayer == exoPlayer)
            {
                localPlayerView.Visibility = ViewStates.Visible;
                castControlView.Hide();
            }
            else /* currentPlayer == castPlayer */
            {
                localPlayerView.Visibility = ViewStates.Gone;
                castControlView.Show();
            }

            // Player state management.
            long playbackPositionMs = C.TimeUnset;
            int  windowIndex        = C.IndexUnset;
            bool playWhenReady      = false;

            if (this.currentPlayer != null)
            {
                int playbackState = this.currentPlayer.PlaybackState;
                if (playbackState != Player.StateEnded)
                {
                    playbackPositionMs = this.currentPlayer.CurrentPosition;
                    playWhenReady      = this.currentPlayer.PlayWhenReady;
                    windowIndex        = this.currentPlayer.CurrentWindowIndex;
                    if (windowIndex != currentItemIndex)
                    {
                        playbackPositionMs = C.TimeUnset;
                        windowIndex        = currentItemIndex;
                    }
                }
                this.currentPlayer.Stop(true);
            }
            else
            {
                // This is the initial setup. No need to save any state.
            }

            this.currentPlayer = currentPlayer;

            // Media queue management.
            castMediaQueueCreationPending = currentPlayer == castPlayer;
            if (currentPlayer == exoPlayer)
            {
                exoPlayer.Prepare(concatenatingMediaSource);
            }

            // Playback transition.
            if (windowIndex != C.IndexUnset)
            {
                setCurrentItem(windowIndex, playbackPositionMs, playWhenReady);
            }
        }
Exemplo n.º 7
0
        public void Play(string url)
        {
            if (clicks % 2 == 0)
            {
                #region ExoPlayer

                var mediaUrl = url;
                var mediaUri = Android.Net.Uri.Parse(mediaUrl);
                Android.Content.Context context = Android.App.Application.Context;
                var userAgent = Util.GetUserAgent(context, "InstationPlayer");
                var defaultHttpDataSourceFactory  = new DefaultHttpDataSourceFactory(userAgent);
                var defaultDataSourceFactory      = new DefaultDataSourceFactory(context, null, defaultHttpDataSourceFactory);
                var extractorMediaSource          = new ExtractorMediaSource(mediaUri, defaultDataSourceFactory, new DefaultExtractorsFactory(), null, null);
                var defaultBandwidthMeter         = new DefaultBandwidthMeter();
                var adaptiveTrackSelectionFactory = new AdaptiveTrackSelection.Factory(defaultBandwidthMeter);
                var defaultTrackSelector          = new DefaultTrackSelector(adaptiveTrackSelectionFactory);

                exoPlayer = ExoPlayerFactory.NewSimpleInstance(context, defaultTrackSelector);
                exoPlayer.Prepare(extractorMediaSource);
                Console.WriteLine("Prepared");
                exoPlayer.PlayWhenReady = true;
                Console.WriteLine("Started");
                clicks++;

                #endregion
            }
            else if (clicks % 2 != 0)
            {
                exoPlayer.Stop();
                Console.WriteLine("Paused");
                clicks++;
            }
        }
Exemplo n.º 8
0
        protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            base.OnElementPropertyChanged(sender, e);

            if (e.PropertyName == ExtendedVideoPlayer.IsAppearedProperty.PropertyName)
            {
                if (!(Element.IsAppeared) &&
                    _exoPlayer != null)
                {
                    _exoPlayer.PlayWhenReady = false;
                }
            }
            else if (e.PropertyName == ExtendedVideoPlayer.SourceProperty.PropertyName)
            {
                string s = Element.Source;
                _exoPlayer.Stop();
                IMediaSource videoSource = new ExtractorMediaSource(
                    Android.Net.Uri.Parse(Element.Source),
                    new CacheableDataSource(Context, 100 * 1024 * 1024, 5 * 1024 * 1024),
                    new DefaultExtractorsFactory(),
                    null,
                    null);
                _exoPlayer.Prepare(videoSource);
            }
        }
Exemplo n.º 9
0
        protected override void OnElementChanged(ElementChangedEventArgs <ExtendedVideoPlayer> e)
        {
            base.OnElementChanged(e);

            string s = Element.Source;

            //
            // Will be invoked by the Xamarin.Forms page when the last is closed
            //
            Element.ReleaseAction = PlayerRelease;

            _exoSpot = new PlayerView(Context);
            //
            // Video will be expanded on full screen
            //
            _exoSpot.SetResizeMode(AspectRatioFrameLayout.ResizeModeFit);

            SetNativeControl(_exoSpot);

            //
            // Create a default TrackSelector
            //
            Handler         mainHandler    = new Handler();
            IBandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();

            AdaptiveTrackSelection.Factory videoTrackSelectionFactory =
                new AdaptiveTrackSelection.Factory(bandwidthMeter);

            TrackSelector trackSelector =
                new DefaultTrackSelector(videoTrackSelectionFactory);

            //
            // Create the player
            //
            _exoPlayer =
                ExoPlayerFactory.NewSimpleInstance(Context, trackSelector);
            _exoPlayer.AddListener(new ExtendedVideoPlayerEventListener(_exoPlayer));
            _exoPlayer.PlayWhenReady = true;

            //
            // Attach player to the view
            //
            _exoSpot.Player = _exoPlayer;

            DefaultDataSourceFactory dataSourceFactory = new DefaultDataSourceFactory(Context,
                                                                                      Util.GetUserAgent(Context, Context.GetString(Resource.String.application_name)));

            IMediaSource videoSource = new ExtractorMediaSource(
                Android.Net.Uri.Parse(Element.Source),
                new CacheableDataSource(Context, 100 * 1024 * 1024, 5 * 1024 * 1024),
                new DefaultExtractorsFactory(),
                null,
                null);

            //
            // Prepare the player with the source.
            //
            _exoPlayer.Prepare(videoSource);
        }
Exemplo n.º 10
0
        //private IMediaSource CreateCacheMediaSource(IMediaSource videoSource, Android.Net.Uri videoUrL)
        //{
        //    try
        //    {
        //        var url = System.IO.Path.Combine(UserResponseURL.DirectoryURL, selectedMedia.VideoLocation);
        //        var file = VideoDownloadAsyncController.GetDownloadedDiskVideoUri(url);

        //        SimpleCache cache = new SimpleCache(this.CacheDir, new LeastRecentlyUsedCacheEvictor(1024 * 1024 * 10));
        //        CacheDataSourceFactory cacheDataSource = new CacheDataSourceFactory(cache, DefaultDataMediaFactory);

        //        if (!string.IsNullOrEmpty(file))
        //        {
        //            videoUrL = Android.Net.Uri.Parse(file);

        //            videoSource = GetMediaSourceFromUrl(videoUrL, "normal");
        //            return videoSource;
        //        }
        //        else
        //        {
        //            return null;
        //        }
        //    }
        //    catch (Exception exception)
        //    {
        //        Console.WriteLine(exception);
        //        return null;
        //    }
        //}

        public void Play()
        {
            try
            {
                progressBar.Visibility = ViewStates.Visible;
                if (Player != null)
                {
                    Player.Stop();
                    Player.Release();
                }
                InitializePlayer();
                if (selectedMedia.VideoLocation.Contains(".mp4"))
                {
                    imgAudio.Visibility               = ViewStates.Gone;
                    SimpleExoPlayerView.Visibility    = ViewStates.Visible;
                    SimpleExoPlayerView.ResizeMode    = AspectRatioFrameLayout.ResizeModeZoom;
                    SimpleExoPlayerView.Player        = Player;
                    SimpleExoPlayerView.UseController = false;
                    swipListener.SwipeEvent          -= SwipListener_SwipeEvent;
                    swipListener.SwipeEvent          += SwipListener_SwipeEvent;
                    SimpleExoPlayerView.SetOnTouchListener(swipListener);
                }
                else
                {
                    imgAudio.Visibility            = ViewStates.Visible;
                    SimpleExoPlayerView.Visibility = ViewStates.Gone;
                    swipListener.SwipeEvent       -= SwipListener_SwipeEvent;
                    swipListener.SwipeEvent       += SwipListener_SwipeEvent;
                    imgAudio.SetOnTouchListener(swipListener);
                    Glide.With(this).Load(System.IO.Path.Combine(UserResponseURL.DirectoryURL, selectedMedia.Thumbnail)).Into(imgAudio);
                }
                var url         = Android.Net.Uri.Parse(System.IO.Path.Combine(UserResponseURL.DirectoryURL, selectedMedia.VideoLocation));
                var VideoSource = GetMediaSourceFromUrl(url, "normal");
                Player.Prepare(VideoSource);
                Player.AddListener(new LatestPlayerListener(this));
                Player.PlayWhenReady = true;
                Glide.With(this).Load(UserResponseURL.DirectoryUserSettings + selectedMedia.Avatar).Into(imgProfile);
                txtUserName.Text      = selectedMedia.Username;
                txtdays.Text          = Helpers.DateTimeHelper.GetDateTimeString(selectedMedia.Timestamp);
                txtDescription.Text   = selectedMedia.Description;
                txtLikeNumber.Text    = selectedMedia.Likes;
                txtShareNumber.Text   = selectedMedia.Shares;
                txtCommentNumber.Text = selectedMedia.Comments;

                if (selectedMedia.IsLiked == "1") // true
                {
                    btnLike.Tag = "1";
                    btnLike.SetImageResource(Resource.Drawable.like_blue);
                }
                else
                {
                    btnLike.Tag = "0";
                    btnLike.SetImageResource(Resource.Drawable.like_white);
                }
            }
            catch (System.Exception ex)
            {
            }
        }
Exemplo n.º 11
0
        void Play(string url)
        {
            var httpDataSourceFactory = new DefaultHttpDataSourceFactory(nameof(GitTrends));
            var ssChunkFactory        = new DefaultSsChunkSource.Factory(httpDataSourceFactory);

            var ssMediaSourceFactory = new SsMediaSource.Factory(ssChunkFactory, httpDataSourceFactory);

            _player.Prepare(ssMediaSourceFactory.CreateMediaSource(Uri.Parse(url)));
        }
Exemplo n.º 12
0
        public void Play()
        {
            if (State == PlayerState.Idle)
            {
                TheExoPlayer.Prepare(_videoSource, false, false);
//                TheExoPlayer.Prepare(_videoSource);
            }
            TheExoPlayer.PlayWhenReady = true;
        }
Exemplo n.º 13
0
        public void StartPlaying(string url)
        {
            State = State.Loading;
            Uri uri = Uri.Parse(url);
            IDataSourceFactory dataSourceFactory = new DefaultDataSourceFactory(Application.Context, Application.Context.PackageName);
            IMediaSource       mediaSource       = new ExtractorMediaSource.Factory(dataSourceFactory).CreateMediaSource(uri);

            _exoPlayer.Prepare(mediaSource);
        }
Exemplo n.º 14
0
        private void Play()
        {
            Uri            sourceUri             = Uri.Parse((Element.Source as UriVideoSource).Uri);
            var            httpDataSourceFactory = new DefaultHttpDataSourceFactory("1");
            var            hlsDataSourceFactory  = new DefaultHlsDataSourceFactory(httpDataSourceFactory);
            Handler        emptyHandler          = new Handler();
            HlsMediaSource hlsMediaSource        = new HlsMediaSource(sourceUri, hlsDataSourceFactory, 1, emptyHandler, this);

            _player.Prepare(hlsMediaSource);
        }
        private void Play()
        {
            var userAgent = Util.GetUserAgent(Context, "App1");

            defaultHttpDataSourceFactory = new DefaultHttpDataSourceFactory(userAgent);
            defaultDataSourceFactory     = new DefaultDataSourceFactory(Context, null, defaultHttpDataSourceFactory);

            if (Element.Source is UriVideoSource)
            {
                string uri = (Element.Source as UriVideoSource).Uri;

                if (!System.String.IsNullOrWhiteSpace(uri))
                {
                    _player.Prepare(BuildMediaSource(Android.Net.Uri.Parse(uri), ""));
                }
            }
            else if (Element.Source is FileVideoSource)
            {
                string filename = (Element.Source as FileVideoSource).File;

                if (!System.String.IsNullOrWhiteSpace(filename))
                {
                    //TODO: Implement File Input [NOT SURE IF NEEDED THOUGH]
                }
            }
            else if (Element.Source is ResourceVideoSource)
            {
                string package = Context.PackageName;
                string path    = (Element.Source as ResourceVideoSource).Path;

                if (!System.String.IsNullOrWhiteSpace(path))
                {
                    string filename = Path.GetFileNameWithoutExtension(path).ToLowerInvariant();
                    string uri      = "android.resource://" + package + "/raw/" + filename;
                    _player.Prepare(new ExtractorMediaSource.Factory(defaultDataSourceFactory).CreateMediaSource(Android.Net.Uri.Parse(uri)));
                }
            }
            _player.AddListener(this);
        }
Exemplo n.º 16
0
        public RadioPlayer(Context context, string url)
        {
            _sourceUrl = url;

#pragma warning disable 612, 618
            var agent   = WebSettings.GetDefaultUserAgent(context);
            var factory = new DefaultDataSourceFactory(context, agent);
            var extractorMediaSource = new ExtractorMediaSource(Android.Net.Uri.Parse(url), factory, new DefaultExtractorsFactory(), null, null);

            _exoPlayer = ExoPlayerFactory.NewSimpleInstance(context);
            _exoPlayer.Prepare(extractorMediaSource);
#pragma warning restore 612, 618
        }
Exemplo n.º 17
0
 internal void SetAudio(string v)
 {
     //set audio:
     if (v != null)
     {
         audioSource = new ExtractorMediaSource(Android.Net.Uri.Parse(v), httpDataSourceFactory, extractorsFactory, null, null);
         _audioPlayer.Prepare(audioSource);
         _audioPlayer.PlayWhenReady = false;
     }
     else
     {
         audioSource = null;
         _audioPlayer.Stop();
     }
 }
Exemplo n.º 18
0
        public void PlayVideo(string videoUrL, VideoObject videoObject, long resumePosition)
        {
            try
            {
                if (Player != null)
                {
                    SetStopvideo();

                    Player?.Release();
                    Player = null;

                    //GC Collecter
                    GC.Collect();
                }

                AdaptiveTrackSelection.Factory trackSelectionFactory = new AdaptiveTrackSelection.Factory();
                var trackSelector = new DefaultTrackSelector(trackSelectionFactory);
                var newParameters = new DefaultTrackSelector.ParametersBuilder()
                                    .SetMaxVideoSizeSd()
                                    .SetPreferredAudioLanguage("deu")
                                    .Build();
                trackSelector.SetParameters(newParameters);

                Player = ExoPlayerFactory.NewSimpleInstance(ActivityContext, trackSelector);
                FullWidthSetting();

                DefaultDataMediaFactory = new DefaultDataSourceFactory(ActivityContext, Util.GetUserAgent(ActivityContext, AppSettings.ApplicationName), BandwidthMeter);

                VideoSource = null;
                VideoSource = GetMediaSourceFromUrl(Uri.Parse(videoUrL), "normal");

                SimpleExoPlayerView.Player = Player;
                Player.Prepare(VideoSource);
                Player.AddListener(PlayerListener);
                Player.PlayWhenReady = true;
                Player.AddVideoListener(this);

                bool haveResumePosition = ResumeWindow != C.IndexUnset;
                if (haveResumePosition)
                {
                    Player.SeekTo(ResumeWindow, resumePosition);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }
        private void Play()
        {
            if (!string.IsNullOrEmpty(url))
            {
                Uri uri   = Uri.Parse(url);
                var agent = Com.Google.Android.Exoplayer2.Util.Util.GetUserAgent(Context, Context.ApplicationInfo.Name);
                DefaultHttpDataSourceFactory httpDataSourceFactory = new DefaultHttpDataSourceFactory(agent);
                DefaultSsChunkSource.Factory ssChunkFactory        = new DefaultSsChunkSource.Factory(httpDataSourceFactory);
                Handler emptyHandler = new Handler();

                //SsMediaSource ssMediaSource = new SsMediaSource(uri, httpDataSourceFactory, ssChunkFactory, emptyHandler);
                var mediaSource = new HlsMediaSource.Factory(httpDataSourceFactory).CreateMediaSource(uri);
                _player.Prepare(mediaSource);
                var playing = _player.IsPlaying;
            }
        }
        public void OnCompleted(string id, IList<TrackTransformationInfo> trackTransformationInfos)
        {
            System.Diagnostics.Debug.WriteLine($"OnCompleted: {id}");

            var uri = Uri.FromFile(_targetMedia.targetFile);

            /*
            await Share.RequestAsync(new ShareTextRequest
            {
                Uri = _targetMedia.targetFile.AbsolutePath,
                Title = "Share Created Video"
            });
            */

            var progressiveMediaSource = new Com.Google.Android.Exoplayer2.Source.ProgressiveMediaSource.Factory(new Com.Google.Android.Exoplayer2.Upstream.DefaultDataSourceFactory(this, "Exoplayer-local"));
            var mediaSource = progressiveMediaSource.CreateMediaSource(uri);
            _player.Prepare(mediaSource);
        }
Exemplo n.º 21
0
        void SetSource()
        {
            DefaultHttpDataSourceFactory httpDataSourceFactory = new DefaultHttpDataSourceFactory("1");
            IMediaSource MediaSource = null;
            string       uri         = Element.Source;
            bool         autoplay    = Element.AutoPlay;
            bool         loop        = Element.Loop;

            if (!string.IsNullOrWhiteSpace(uri))
            {
                MediaSource = new HlsMediaSource.Factory(httpDataSourceFactory)
                              .CreateMediaSource(Android.Net.Uri.Parse(uri));
            }

            if (MediaSource != null)
            {
                ExoPlayer.Prepare(MediaSource);
                ExoPlayer.PlayWhenReady = autoplay;
            }
        }
Exemplo n.º 22
0
        private void ListAdapter_OnPreview(Music obj)
        {
            listAdapter.UpdatePlaying(obj);
            currentPreview = obj;

            _audioPlayer.PlayWhenReady = false;
            mediaSource = new ExtractorMediaSource(Android.Net.Uri.Parse(obj.url), httpDataSourceFactory, extractorsFactory, null, null);
            try
            {
                _audioPlayer.Prepare(mediaSource);
                _audioPlayer.PlayWhenReady = true;
            }
            catch (Exception e)
            {
                LoginFuncs.ShowError(Context.ApplicationContext, e);
            }

            Bootlegger.BootleggerClient.LogUserAction("MusicPreview",
                                                      new KeyValuePair <string, string>("music", obj.url),
                                                      new KeyValuePair <string, string>("eventid", Bootlegger.BootleggerClient.CurrentEvent.id));
        }
Exemplo n.º 23
0
        private void InitializePlayback(StreamingUri itemToPlay)
        {
            if (mediaStreams == null)
            {
                mediaStreams = JsonConvert.DeserializeObject <List <StreamingUri> >(Intent.GetStringExtra("mediaStreams"))
                               .Where(a => a.StreamingUrl.OriginalString.Contains(".mp4")).ToList();
            }

            if (player is null)
            {
                mediaSourceFactory   = new DefaultDataSourceFactory(this, Util.GetUserAgent(this, Application.PackageName));
                trackSelectorFactory = new AdaptiveTrackSelection.Factory();
                var renderersFactory = new DefaultRenderersFactory(this);
                player            = ExoPlayerFactory.NewSimpleInstance(this, renderersFactory, new DefaultTrackSelector(trackSelectorFactory));
                playerView        = FindViewById <PlayerView>(Resource.Id.playerView);
                playerView.Player = player;
                playerView.RequestFocus();
                playerView.SetControllerVisibilityListener(this);
                linksSpinner = FindViewById <AppCompatSpinner>(Resource.Id.linksSpinner);

                player.PlayWhenReady = true;
                playerView.ControllerShowTimeoutMs = 3000;

                if (mediaStreams != null && mediaStreams.Count > 0)
                {
                    var titles = new List <string>()
                    {
                    };
                    mediaStreams.ForEach(a => titles.Add(a.StreamingQuality + " - MP4"));
                    linksSpinner.Adapter       = new ArrayAdapter(this, Android.Resource.Layout.SimpleSpinnerDropDownItem, titles);
                    linksSpinner.ItemSelected += LinksSpinner_ItemSelected;
                    linksSpinner.SetSelection(0);
                }
            }
            if (itemToPlay != null)
            {
                player.Prepare(CreateMediaSource(itemToPlay));
                playerView.KeepScreenOn = true;
            }
        }
Exemplo n.º 24
0
        public void PlayAudio(string url)
        {
            if (isPlaying)
            {
                Stop();
            }
            current_url = url;
            var context   = Android.App.Application.Context;
            var mediaUri  = Android.Net.Uri.Parse(url);
            var userAgent = Util.GetUserAgent(context, "GlobalFM");
            var defaultHttpDataSourceFactory  = new DefaultHttpDataSourceFactory(userAgent);
            var defaultDataSourceFactory      = new DefaultDataSourceFactory(context, null, defaultHttpDataSourceFactory);
            var extractorMediaSource          = new ExtractorMediaSource(mediaUri, defaultDataSourceFactory, new DefaultExtractorsFactory(), null, null);
            var defaultBandwidthMeter         = new DefaultBandwidthMeter();
            var adaptiveTrackSelectionFactory = new AdaptiveTrackSelection.Factory(defaultBandwidthMeter);
            var defaultTrackSelector          = new DefaultTrackSelector(adaptiveTrackSelectionFactory);

            player = ExoPlayerFactory.NewSimpleInstance(context, defaultTrackSelector);
            player.Prepare(extractorMediaSource);
            player.PlayWhenReady = true;
            isPlaying            = true;
        }
Exemplo n.º 25
0
        public void Init(Context context, Com.Google.Android.Exoplayer2.UI.PlayerView playerView)
        {
            // Create a default track selector.
            var bandwidthMeter             = new DefaultBandwidthMeter();
            var videoTrackSelectionFactory =
                new AdaptiveTrackSelection.Factory(bandwidthMeter);
            TrackSelector trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory);

            // Create a player instance.
            player = ExoPlayerFactory.NewSimpleInstance(context, trackSelector);

            // Bind the player to the view.
            playerView.Player = (player);

            // This is the MediaSource representing the content media (i.e. not the ad).
            var contentUrl = url;            //context.GetString (Resource.String.test_content_url);

            HlsMediaSource.Factory hlsfac = new HlsMediaSource.Factory(mediaDataSourceFactory);
            //var hlsMediaSource = hlsfac.CreateMediaSource (Uri.Parse(contentUrl));
            var hlsMediaSource = new HlsMediaSource(Uri.Parse(contentUrl), mediaDataSourceFactory, null, null);
            //var contentMediaSource =
            //BuildMediaSource (Uri.Parse (contentUrl),"");

            // Compose the content media source into a new AdsMediaSource with both ads and content.
            var mediaSourceWithAds = hlsMediaSource;

            //        new AdsMediaSource(
            //                hlsMediaSource,
            //            /* adMediaSourceFactory= */ this,
            //             adsLoader,
            //            playerView.getOverlayFrameLayout(),
            //            /* eventHandler= */ null,
            //            /* eventListener= */ null);

            // Prepare the player with the source.
            player.SeekTo(contentPosition);
            player.Prepare(hlsMediaSource);
            player.PlayWhenReady = (true);
        }
Exemplo n.º 26
0
        private void RunVideoWithAds(IMediaSource videoSource, bool showAds)
        {
            try
            {
                var isPro = ListUtils.MyChannelList.FirstOrDefault()?.IsPro ?? "0";
                if (isPro == "0" && ListUtils.AdsVideoList.Count > 0 && Methods.CheckConnectivity() && showAds)
                {
                    Random rand = new Random();

                    var playPos = rand.Next(ListUtils.AdsVideoList.Count - 1 + 1);
                    DataAdsVideo = ListUtils.AdsVideoList[playPos];

                    var type = Methods.AttachmentFiles.Check_FileExtension(DataAdsVideo?.Media);
                    if (type == "Video" && DataAdsVideo != null)
                    {
                        //AppSettings.ShowButtonSkip = DataAdsVideo
                        var adVideoSource = GetMediaSourceFromUrl(Uri.Parse(DataAdsVideo.Media), "Ads");
                        if (adVideoSource != null)
                        {
                            ListUtils.AdsVideoList.Remove(DataAdsVideo);

                            // Plays the first video, then the second video.
                            ConcatenatingMediaSource concatenatedSource = new ConcatenatingMediaSource(adVideoSource, videoSource);
                            SimpleExoPlayerView.Player = Player;
                            Player.Prepare(concatenatedSource);
                            Player.AddListener(PlayerListener);
                            Player.PlayWhenReady = true;
                            Player.AddVideoListener(this);

                            ExoTopLayout.Visibility   = ViewStates.Gone;
                            ExoEventButton.Visibility = ViewStates.Invisible;
                            BtnSkipIntro.Visibility   = ViewStates.Visible;
                            ExoTopAds.Visibility      = ViewStates.Visible;

                            BtnSkipIntro.Text    = AppSettings.ShowButtonSkip.ToString();
                            BtnSkipIntro.Enabled = false;

                            RunTimer();
                        }
                        else
                        {
                            SimpleExoPlayerView.Player = Player;
                            Player.Prepare(videoSource);
                            Player.AddListener(PlayerListener);
                            Player.AddVideoListener(this);
                            Player.PlayWhenReady = true;


                            ExoTopLayout.Visibility   = ViewStates.Visible;
                            ExoEventButton.Visibility = ViewStates.Visible;
                            BtnSkipIntro.Visibility   = ViewStates.Gone;
                            ExoTopAds.Visibility      = ViewStates.Gone;
                        }
                    }
                    else
                    {
                        SimpleExoPlayerView.Player = Player;

                        Player.Prepare(videoSource);
                        Player.AddListener(PlayerListener);
                        Player.PlayWhenReady = true;
                        Player.AddVideoListener(this);

                        ExoTopLayout.Visibility   = ViewStates.Visible;
                        ExoEventButton.Visibility = ViewStates.Visible;
                        BtnSkipIntro.Visibility   = ViewStates.Gone;
                        ExoTopAds.Visibility      = ViewStates.Gone;
                    }
                }
                else
                {
                    SimpleExoPlayerView.Player = Player;

                    Player.Prepare(videoSource);
                    Player.AddListener(PlayerListener);
                    Player.AddVideoListener(this);
                    Player.PlayWhenReady = true;


                    ExoTopLayout.Visibility   = ViewStates.Visible;
                    ExoEventButton.Visibility = ViewStates.Visible;
                    BtnSkipIntro.Visibility   = ViewStates.Gone;
                    ExoTopAds.Visibility      = ViewStates.Gone;
                }

                bool haveResumePosition = ResumeWindow != C.IndexUnset;
                if (haveResumePosition)
                {
                    Player.SeekTo(ResumeWindow, ResumePosition);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }
        void SetSource()
        {
            isPrepared = false;
            bool hasSetSource = false;
            DefaultHttpDataSourceFactory httpDataSourceFactory = new DefaultHttpDataSourceFactory("1");

            DefaultSsChunkSource.Factory ssChunkFactory = new DefaultSsChunkSource.Factory(httpDataSourceFactory);
            Handler      emptyHandler = new Handler();
            IMediaSource videoSource  = null;

            if (Element.Source is HLSVideoSource)
            {
                string uri = (Element.Source as HLSVideoSource).Uri;

                if (!string.IsNullOrWhiteSpace(uri))
                {
                    //videoView.SetVideoURI(Android.Net.Uri.Parse(uri));
                    videoSource  = new HlsMediaSource(Android.Net.Uri.Parse(uri), httpDataSourceFactory, emptyHandler, null);
                    hasSetSource = true;
                }
            }
            else if (Element.Source is UriVideoSource)
            {
                string uri = (Element.Source as UriVideoSource).Uri;

                if (!string.IsNullOrWhiteSpace(uri))
                {
                    //videoView.SetVideoURI(Android.Net.Uri.Parse(uri));
                    var dataSourceFactory = new DefaultDataSourceFactory(Context, Util.GetUserAgent(Context, "Multimedia"));
                    videoSource  = new ExtractorMediaSource(Android.Net.Uri.Parse(uri), dataSourceFactory, new DefaultExtractorsFactory(), emptyHandler, null);
                    hasSetSource = true;
                }
            }
            else if (Element.Source is FileVideoSource)
            {
                string filename = (Element.Source as FileVideoSource).File;

                if (!string.IsNullOrWhiteSpace(filename))
                {
                    DataSpec       dataSpec       = new DataSpec(Android.Net.Uri.FromFile(new Java.IO.File(filename)));
                    FileDataSource fileDataSource = new FileDataSource();
                    try
                    {
                        fileDataSource.Open(dataSpec);
                    }
                    catch (FileDataSource.FileDataSourceException e)
                    {
                        e.PrintStackTrace();
                    }
                    // videoView.SetVideoPath(filename);
                    IDataSourceFactory dataSourceFactory = new DefaultDataSourceFactory(this.Context, "CloudMusic");
                    videoSource  = new ExtractorMediaSource(fileDataSource.Uri, dataSourceFactory, new DefaultExtractorsFactory(), emptyHandler, null);
                    hasSetSource = true;
                }
            }
            else if (Element.Source is ResourceVideoSource)
            {
                string package = Context.PackageName;
                string path    = (Element.Source as ResourceVideoSource).Path;

                if (!string.IsNullOrWhiteSpace(path))
                {
                    string filename = Path.GetFileNameWithoutExtension(path).ToLowerInvariant();
                    string uri      = "android.resource://" + package + "/raw/" + filename;
                    //videoView.SetVideoURI(Android.Net.Uri.Parse(uri));
                    videoSource  = new SsMediaSource(Android.Net.Uri.Parse(uri), httpDataSourceFactory, ssChunkFactory, emptyHandler, null);
                    hasSetSource = true;
                }
            }
            if (videoSource != null)
            {
                ExoPlayer.Prepare(videoSource);
            }
            if (hasSetSource && Element.AutoPlay)
            {
                ExoPlayer.PlayWhenReady = true;
                // videoView.Start();
            }
        }
Exemplo n.º 28
0
        public void PlayVideo(bool isEndOfList, Holders.VideoAdapterViewHolder holderVideoPlayer = null, PostsObject item = null)
        {
            try
            {
                if (VideoPlayer == null)
                {
                    SetPlayer();
                }

                int targetPosition;
                if (!isEndOfList)
                {
                    var startPosition = ((LinearLayoutManager)GetLayoutManager()).FindFirstVisibleItemPosition();
                    var endPosition   = ((LinearLayoutManager)GetLayoutManager()).FindLastVisibleItemPosition();

                    if (endPosition - startPosition > 1)
                    {
                        endPosition = startPosition + 1;
                    }

                    if (startPosition < 0 || endPosition < 0)
                    {
                        return;
                    }

                    if (startPosition != endPosition)
                    {
                        var startPositionVideoHeight = GetVisibleVideoSurfaceHeight(startPosition);
                        var endPositionVideoHeight   = GetVisibleVideoSurfaceHeight(endPosition);
                        targetPosition = startPositionVideoHeight > endPositionVideoHeight ? startPosition : endPosition;
                    }
                    else
                    {
                        targetPosition = startPosition;
                    }
                }
                else
                {
                    targetPosition = GetAdapter().ItemCount - 1;
                }


                if (targetPosition == PlayPosition)
                {
                    return;
                }

                // set the position of the list-item that is to be played
                PlayPosition = targetPosition;
                if (VideoSurfaceView == null)
                {
                    return;
                }

                VideoSurfaceView.Visibility = ViewStates.Invisible;
                RemoveVideoView(VideoSurfaceView);

                var currentPosition = targetPosition - ((LinearLayoutManager)GetLayoutManager()).FindFirstVisibleItemPosition();

                var child = GetChildAt(currentPosition);
                if (child == null)
                {
                    return;
                }

                dynamic holder;
                if (holderVideoPlayer != null)
                {
                    holder         = holderVideoPlayer;
                    targetPosition = holderVideoPlayer.LayoutPosition;
                }
                else
                {
                    Holders.VideoAdapterViewHolder holderChild = (Holders.VideoAdapterViewHolder)child.Tag;
                    if (holderChild == null)
                    {
                        PlayPosition = -1;
                        return;
                    }
                    else
                    {
                        targetPosition = holderChild.LayoutPosition;
                        holder         = holderChild;
                    }
                }

                if (!(holder is Holders.VideoAdapterViewHolder holderVideo))
                {
                    return;
                }
                MediaContainerLayout = holderVideo.MediaContainerLayout;
                Thumbnail            = holderVideo.VideoImage;


                ViewHolderParent = holderVideo.ItemView;
                PlayControl      = holderVideo.PlayControl;

                if (!IsVideoViewAdded)
                {
                    AddVideoView();
                }
                holderVideo.VideoProgressBar.Visibility = ViewStates.Visible;
                VideoSurfaceView.Player = VideoPlayer;

                var controlView = VideoSurfaceView.FindViewById <PlayerControlView>(Resource.Id.exo_controller);
                Uri videoUrl    = Uri.Parse(item != null ? item.MediaSet[0].File : NativeFeedAdapter.PixelNewsFeedList[targetPosition].MediaSet[0].File);

                //>> Old Code
                //===================== Exo Player ========================
                var lis = new ExoPlayerRecyclerEvent(controlView, this, holderVideo);

                IMediaSource videoSource = GetMediaSourceFromUrl(videoUrl, "normal");

                var dataSpec = new DataSpec(videoUrl); //0, 1000 * 1024, null

                if (Cache == null)
                {
                    CacheVideosFiles(videoUrl);
                }

                //Cache = new SimpleCache(new Java.IO.File(MainContext.FilesDir, "media"), new NoOpCacheEvictor());

                if (CacheDataSourceFactory == null)
                {
                    CacheDataSourceFactory = new CacheDataSourceFactory(Cache, DefaultDataSourceFac);
                }

                var counters = new CacheUtil.CachingCounters();

                CacheUtil.GetCached(dataSpec, Cache, counters);
                if (counters.ContentLength == counters.TotalCachedBytes())
                {
                    videoSource = new ExtractorMediaSource.Factory(CacheDataSourceFactory).CreateMediaSource(videoUrl);
                }
                else if (counters.TotalCachedBytes() == 0)
                {
                    videoSource = new ExtractorMediaSource.Factory(CacheDataSourceFactory).CreateMediaSource(videoUrl);
                    // not cached at all
                    Task.Run(() =>
                    {
                        try
                        {
                            var cacheDataSource = new CacheDataSource(Cache, CacheDataSourceFactory.CreateDataSource());
                            CacheUtil.Cache(dataSpec, Cache, cacheDataSource, counters, new AtomicBoolean());
                            double downloadPercentage = counters.TotalCachedBytes() * 100d / counters.ContentLength;
                            Console.WriteLine(downloadPercentage);
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine(e);
                        }
                    });
                }
                else
                {
                    // partially cached
                    videoSource = new ExtractorMediaSource.Factory(CacheDataSourceFactory).CreateMediaSource(videoUrl);
                }

                lis.mFullScreenButton.SetOnClickListener(new NewClicker(lis.mFullScreenButton, videoUrl.ToString(), this));

                VideoPlayer.Prepare(videoSource);
                VideoPlayer.AddListener(lis);
                VideoPlayer.PlayWhenReady = true;
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }
Exemplo n.º 29
0
        public void PlayVideo(string videoUrL, GetMoviesObject.Movie videoObject)
        {
            try
            {
                if (videoObject != null)
                {
                    VideoData = videoObject;

                    VideoViewerActivity.GetInstance()?.TabVideosAbout?.LoadVideo_Data(videoObject);

                    TabbedMainActivity.GetInstance()?.SetOnWakeLock();

                    ReleaseVideo();

                    MFullScreenIcon.SetImageDrawable(ActivityContext.GetDrawable(Resource.Drawable.ic_action_ic_fullscreen_expand));

                    Uri videoUrl = Uri.Parse(!string.IsNullOrEmpty(videoUrL) ? videoUrL : VideoData.Source);

                    AdaptiveTrackSelection.Factory trackSelectionFactory = new AdaptiveTrackSelection.Factory();
                    var trackSelector = new DefaultTrackSelector(DefaultTrackSelector.Parameters.GetDefaults(ActivityContext), trackSelectionFactory);
                    trackSelector.SetParameters(new DefaultTrackSelector.ParametersBuilder(ActivityContext));

                    Player = new SimpleExoPlayer.Builder(ActivityContext).Build();

                    // Produces DataSource instances through which media data is loaded.
                    var defaultSource = GetMediaSourceFromUrl(videoUrl, videoUrl?.Path?.Split('.').Last(), "normal", IDrmSessionManager.DummyDrmSessionManager);

                    VideoSource = null !;

                    //Set Interactive Media Ads
                    if (PlayerSettings.ShowInteractiveMediaAds)
                    {
                        VideoSource = CreateMediaSourceWithAds(defaultSource, PlayerSettings.ImAdsUri);
                    }

                    if (SimpleExoPlayerView == null)
                    {
                        Initialize();
                    }

                    //Set Cache Media Load
                    if (PlayerSettings.EnableOfflineMode)
                    {
                        VideoSource = VideoSource == null?CreateCacheMediaSource(defaultSource, videoUrl) : CreateCacheMediaSource(VideoSource, videoUrl);

                        if (VideoSource != null)
                        {
                            SimpleExoPlayerView.Player = Player;
                            Player.Prepare(VideoSource);
                            //Player.AddListener(PlayerListener);
                            Player.PlayWhenReady = true;

                            bool haveResumePosition = ResumeWindow != C.IndexUnset;
                            if (haveResumePosition)
                            {
                                Player.SeekTo(ResumeWindow, ResumePosition);
                            }

                            return;
                        }
                    }

                    if (VideoSource == null)
                    {
                        if (!string.IsNullOrEmpty(videoUrL))
                        {
                            if (videoUrL.Contains("youtube") || videoUrL.Contains("Youtube") || videoUrL.Contains("youtu"))
                            {
                                //Task.Factory.StartNew(async () =>
                                //{
                                //    var newurl = await VideoInfoRetriever.GetEmbededVideo(VideoData.source);
                                //    videoSource = CreateDefaultMediaSource(Android.Net.Uri.Parse(newurl));
                                //});
                            }
                            else
                            {
                                VideoSource = GetMediaSourceFromUrl(Uri.Parse(videoUrL), videoUrL?.Split('.').Last(), "normal", IDrmSessionManager.DummyDrmSessionManager);

                                SimpleExoPlayerView.Player = Player;
                                Player.Prepare(VideoSource);
                                //Player.AddListener(PlayerListener);
                                Player.PlayWhenReady = true;

                                bool haveResumePosition = ResumeWindow != C.IndexUnset;
                                if (haveResumePosition)
                                {
                                    Player.SeekTo(ResumeWindow, ResumePosition);
                                }
                            }
                        }
                    }
                    else
                    {
                        SimpleExoPlayerView.Player = Player;
                        Player.Prepare(VideoSource);
                        //Player.AddListener(PlayerListener);
                        Player.PlayWhenReady = true;

                        bool haveResumePosition = ResumeWindow != C.IndexUnset;
                        if (haveResumePosition)
                        {
                            Player.SeekTo(ResumeWindow, ResumePosition);
                        }
                    }
                }
            }
            catch (Exception exception)
            {
                Methods.DisplayReportResultTrack(exception);
            }
        }
Exemplo n.º 30
0
        // Internal methods

        private void initializePlayer()
        {
            Intent intent        = Intent;
            bool   needNewPlayer = player == null;

            if (needNewPlayer)
            {
                var adaptiveTrackSelectionFactory =
                    new AdaptiveTrackSelection.Factory(BANDWIDTH_METER);
                trackSelector           = new DefaultTrackSelector(adaptiveTrackSelectionFactory);
                trackSelectionHelper    = new TrackSelectionHelper(trackSelector, adaptiveTrackSelectionFactory);
                lastSeenTrackGroupArray = null;
                eventLogger             = new EventLogger(trackSelector);

                var drmSchemeUuid = intent.HasExtra(DRM_SCHEME_UUID_EXTRA)
                                        ? UUID.FromString(intent.GetStringExtra(DRM_SCHEME_UUID_EXTRA)) : null;
                IDrmSessionManager drmSessionManager = null;
                if (drmSchemeUuid != null)
                {
                    var drmLicenseUrl             = intent.GetStringExtra(DRM_LICENSE_URL);
                    var keyRequestPropertiesArray = intent.GetStringArrayExtra(DRM_KEY_REQUEST_PROPERTIES);
                    int errorStringId             = Resource.String.error_drm_unknown;
                    if (Util.Util.SdkInt < 18)
                    {
                        errorStringId = Resource.String.error_drm_not_supported;
                    }
                    else
                    {
                        try
                        {
                            drmSessionManager = BuildDrmSessionManagerV18(drmSchemeUuid, drmLicenseUrl,
                                                                          keyRequestPropertiesArray);
                        }
                        catch (UnsupportedDrmException e)
                        {
                            errorStringId = e.Reason == UnsupportedDrmException.ReasonUnsupportedScheme
                                                                ? Resource.String.error_drm_unsupported_scheme : Resource.String.error_drm_unknown;
                        }
                    }
                    if (drmSessionManager == null)
                    {
                        ShowToast(errorStringId);
                        return;
                    }
                }

                var preferExtensionDecoders = intent.GetBooleanExtra(PREFER_EXTENSION_DECODERS, false);
                var extensionRendererMode   =
                    ((DemoApplication)Application).UseExtensionRenderers()
                                                ? (preferExtensionDecoders ? DefaultRenderersFactory.ExtensionRendererModePrefer
                                                : DefaultRenderersFactory.ExtensionRendererModeOn)
                                                : DefaultRenderersFactory.ExtensionRendererModeOff;
                var renderersFactory = new DefaultRenderersFactory(this,
                                                                   drmSessionManager, extensionRendererMode);

                player = ExoPlayerFactory.NewSimpleInstance(renderersFactory, trackSelector);
                player.AddListener(this);
                player.AddListener(eventLogger);
                player.SetAudioDebugListener(eventLogger);
                player.SetVideoDebugListener(eventLogger);
                player.SetMetadataOutput(eventLogger);

                simpleExoPlayerView.Player = player;
                player.PlayWhenReady       = shouldAutoPlay;
                debugViewHelper            = new DebugTextViewHelper(player, debugTextView);
                debugViewHelper.Start();
            }
            var action = intent.Action;

            Uri[]    uris;
            string[] extensions;
            if (ACTION_VIEW.Equals(action))
            {
                uris       = new Uri[] { intent.Data };
                extensions = new string[] { intent.GetStringExtra(EXTENSION_EXTRA) };
            }
            else if (ACTION_VIEW_LIST.Equals(action))
            {
                var uriStrings = intent.GetStringArrayExtra(URI_LIST_EXTRA);
                uris = new Uri[uriStrings.Length];
                for (int i = 0; i < uriStrings.Length; i++)
                {
                    uris[i] = Uri.Parse(uriStrings[i]);
                }
                extensions = intent.GetStringArrayExtra(EXTENSION_LIST_EXTRA);
                if (extensions == null)
                {
                    extensions = new string[uriStrings.Length];
                }
            }
            else
            {
                ShowToast(GetString(Resource.String.unexpected_intent_action, action));
                return;
            }
            if (Util.Util.MaybeRequestReadExternalStoragePermission(this, uris))
            {
                // The player will be reinitialized if the permission is granted.
                return;
            }
            var mediaSources = new IMediaSource[uris.Length];

            for (var i = 0; i < uris.Length; i++)
            {
                mediaSources[i] = BuildMediaSource(uris[i], extensions[i]);
            }
            var mediaSource = mediaSources.Length == 1 ? mediaSources[0]
                                : new ConcatenatingMediaSource(mediaSources);
            var adTagUriString = intent.GetStringExtra(AD_TAG_URI_EXTRA);

            if (adTagUriString != null)
            {
                Uri adTagUri = Uri.Parse(adTagUriString);
                if (!adTagUri.Equals(loadedAdTagUri))
                {
                    ReleaseAdsLoader();
                    loadedAdTagUri = adTagUri;
                }
                try
                {
                    mediaSource = CreateAdsMediaSource(mediaSource, Uri.Parse(adTagUriString));
                }
                catch (System.Exception)
                {
                    ShowToast(Resource.String.ima_not_loaded);
                }
            }
            else
            {
                ReleaseAdsLoader();
            }
            bool haveResumePosition = resumeWindow != C.IndexUnset;

            if (haveResumePosition)
            {
                player.SeekTo(resumeWindow, resumePosition);
            }
            player.Prepare(mediaSource, !haveResumePosition, false);
            inErrorState = false;
            UpdateButtonVisibilities();
        }