protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs args)
        {
            base.OnElementPropertyChanged(sender, args);

            if (args.PropertyName == VideoPlayer.AreTransportControlsEnabledProperty.PropertyName)
            {
                SetAreTransportControlsEnabled();
            }
            else if (args.PropertyName == VideoPlayer.SourceProperty.PropertyName)
            {
                SetSource();
            }
            else if (args.PropertyName == VideoPlayer.PositionProperty.PropertyName)
            {
                if (System.Math.Abs(ExoPlayer.CurrentPosition - Element.Position.TotalMilliseconds) > 1000)
                {
                    ExoPlayer.SeekTo((int)Element.Position.TotalMilliseconds);
                }
            }
            else if (args.PropertyName == VideoPlayer.IsVisibleProperty.PropertyName)
            {
                if (!Element.IsVisible)
                {
                    ExoPlayer.Stop();
                }
            }
        }
 public override Task Seek(TimeSpan position)
 {
     return(Task.Run(() =>
     {
         _mediaPlayer?.SeekTo(Convert.ToInt64(position.TotalMilliseconds));
     }));
 }
Ejemplo n.º 3
0
        public void Seek(TimeSpan position)
        {
            var duration = TheExoPlayer.Duration;

            if ((duration != -9223372036854775807) && (position.TotalMilliseconds <= duration))
            {
                TheExoPlayer.SeekTo((long)position.TotalMilliseconds);
            }
        }
 public void OnPlayerStateChanged(bool p0, int p1)
 {
     //
     // If video completely played
     //
     if (p1 == 4)
     {
         _exoPlayer.SeekTo(0);
         _exoPlayer.PlayWhenReady = false;
     }
 }
Ejemplo n.º 5
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);
            }
        }
Ejemplo n.º 6
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);
        }
Ejemplo n.º 7
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);
            }
        }
Ejemplo n.º 8
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);
            }
        }
Ejemplo n.º 9
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();
        }
Ejemplo n.º 10
0
        public async void PlaySequence(List <MediaItem> meta, MediaItem startingat)
        {
            currentsequence        = meta;
            currentmode            = PLAYBACK_MODE.PLAY_EDIT;
            _playerView.Visibility = ViewStates.Visible;

            FindViewById(Resource.Id.trackcontrols).Visibility   = ViewStates.Invisible;
            FindViewById <View>(Resource.Id.progress).Visibility = ViewStates.Visible;

            //build media source:

            DynamicConcatenatingMediaSource source = new DynamicConcatenatingMediaSource();

            foreach (var m in meta.GetRange(0, meta.Count - 1))
            {
                if (m.MediaType == Shot.ShotTypes.TITLE)
                {
                    //var textn = m.titletext.Split('\n');

                    //var titletext = System.Uri.EscapeDataString(m.titletext.TrimStart('\n'));
                    //var titletext = URLEncoder.Encode(m.titletext.TrimStart('\n'),"utf-8");
                    var titletext = m.titletext.TrimStart('\n');


                    //var numlines = titletext.Split('\n').Length;
                    //line:-{4-numlines}
                    //string text = URLEncoder.Encode($"WEBVTT\n\n00:00.000 --> 00:{m.outpoint.Seconds.ToString("D2")}.000\n{titletext}", "utf-8");
                    string text = $"WEBVTT\n\n00:00.000 --> 00:{m.outpoint.Seconds.ToString("D2")}.000\n{titletext}";


                    Format textFormat = Format.CreateTextSampleFormat(null, MimeTypes.TextVtt, Format.NoValue, "en");

                    var mm = new MergingMediaSource(
                        new ExtractorMediaSource(Android.Net.Uri.Parse("rawresource:///" + Resource.Raw.blackvideo), defaultDataSourceFactory, extractorsFactory, null, null),
                        new SingleSampleMediaSource(Android.Net.Uri.Parse("data:text/vtt," + text), defaultDataSourceFactory, textFormat, (long)m.outpoint.TotalMilliseconds)
                        );

                    source.AddMediaSource(mm);
                }
                else
                {
                    try
                    {
                        var uri = await Bootlegger.BootleggerClient.GetVideoUrl(m);

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

                        var mm = new ClippingMediaSource(ss, (long)m.inpoint.TotalMilliseconds * 1000, (long)m.outpoint.TotalMilliseconds * 1000);
                        source.AddMediaSource(mm);
                    }
                    catch (Exception e)
                    {
                        LoginFuncs.ShowToast(Plugin.CurrentActivity.CrossCurrentActivity.Current.Activity, e);
                        //Toast.MakeText(Context, Resource.String.noconnectionshort, ToastLength.Short).Show();
                    }
                }
            }

            mediaSource = source;
            try
            {
                _player.Prepare(mediaSource);
                _player.PlayWhenReady = true;
                _player.RepeatMode    = Player.RepeatModeAll;

                //seek to start of the chosen clip:
                _player.SeekTo(meta.IndexOf(startingat), 0);


                if (audioSource != null)
                {
                    //seek audio:
                    _audioPlayer.SeekTo((long)CountToIndex(meta, startingat));
                }

                //throw new Exception("THIS BREAKS DATABASE");
            }
            catch (Exception e)
            {
                Console.WriteLine(e);

                //Toast.MakeText(Context, Resource.String.noconnectionshort, ToastLength.Short).Show();
                LoginFuncs.ShowToast(Context, e);
                //LoginFuncs.ShowError(Context, e);
            }
        }
Ejemplo n.º 11
0
 public void Restart()
 {
     _player.SeekTo(0);
 }
Ejemplo n.º 12
0
        /// <summary>
        /// Initializes the player.
        /// </summary>
        public void InitializePlayer()
        {
            if (_player == null)
            {
                bool preferExtensionDecoders = _stream.PreferExtensionDecoders;

                UUID drmSchemeUuid = string.IsNullOrEmpty(DrmSchemeUuidExtra)
                                                                                   ? UUID.FromString(_stream.DrmSchemeUuidExtra) : null;

                IDrmSessionManager drmSessionManager = null;

                if (drmSchemeUuid != null)
                {
                    string   drmLicenseUrl             = _stream.DrmLicenseUrl;
                    string[] keyRequestPropertiesArray = _stream.DrmKeyRequestProperties;
                    Dictionary <string, string> keyRequestProperties;

                    if (keyRequestPropertiesArray == null || keyRequestPropertiesArray.Length < 2)
                    {
                        keyRequestProperties = null;
                    }
                    else
                    {
                        keyRequestProperties = new Dictionary <string, string>();
                        for (int i = 0; i < keyRequestPropertiesArray.Length - 1; i += 2)
                        {
                            keyRequestProperties.Add(keyRequestPropertiesArray[i],
                                                     keyRequestPropertiesArray[i + 1]);
                        }
                    }
                    try
                    {
                        drmSessionManager = BuildDrmSessionManager(drmSchemeUuid, drmLicenseUrl,
                                                                   keyRequestProperties);
                    }
                    catch (UnsupportedDrmException e)
                    {
                        int errorstringId = Util.SdkInt < 18 ? Resource.String.error_drm_not_supported
                                                                                                : (e.Reason == UnsupportedDrmException.ReasonUnsupportedScheme
                                                        ? Resource.String.error_drm_unsupported_scheme : Resource.String.error_drm_unknown);
                        ShowToast(errorstringId);

                        return;
                    }
                }

                _eventLogger = new EventLogger();
                ITrackSelectionFactory videoTrackSelectionFactory =
                    new AdaptiveVideoTrackSelection.Factory(_bandwidthMeter);
                _trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory);

                _trackSelectionHelper = new TrackSelectionHelper(_trackSelector, videoTrackSelectionFactory);
                _player = ExoPlayerFactory.NewSimpleInstance(_context, _trackSelector, new DefaultLoadControl());
                _player.AddListener(this);
                _player.AddListener(_eventLogger);
                _player.SetAudioDebugListener(_eventLogger);
                _player.SetVideoDebugListener(_eventLogger);
                _player.SetMetadataOutput(_eventLogger);

                _simpleExoPlayerView.Player = _player;

                if (_shouldRestorePosition)
                {
                    if (_playerPosition == C.TimeUnset)
                    {
                        _player.SeekToDefaultPosition(_playerWindow);
                    }
                    else
                    {
                        _player.SeekTo(_playerWindow, _playerPosition);
                    }
                }

                _player.PlayWhenReady = _shouldAutoPlay;
                _debugViewHelper      = new DebugTextViewHelper(_player, _debugTextView);
                _debugViewHelper.Start();
                _playerNeedsSource = true;
            }

            if (_playerNeedsSource)
            {
                //var intent = (_context as Activity).Intent;
                //string action = intent.Action;

                global::Android.Net.Uri[] uris;
                string[] extensions = {};

                uris       = new global::Android.Net.Uri[] { Android.Net.Uri.Parse(_stream.Url) };
                extensions = new string[] { _stream.ExtensionExtra };

                /*if (ActionView.Equals(action))
                 * {
                 *      uris = new global::Android.Net.Uri[] { intent.Data };
                 *      extensions = new string[] { _stream.ExtensionExtra };
                 * }
                 * else if (ActionViewList.Equals(action))
                 * {
                 *      string[] uristrings = _stream.UriListExtra;
                 *      uris = new global::Android.Net.Uri[uristrings.Length];
                 *      for (int i = 0; i < uristrings.Length; i++)
                 *      {
                 *              uris[i] = global::Android.Net.Uri.Parse(uristrings[i]);
                 *      }
                 *      extensions = _stream.ExtensionListExtra;
                 *      if (extensions == null)
                 *      {
                 *              extensions = new string[uristrings.Length];
                 *      }
                 * }
                 * else
                 * {
                 *      ShowToast(_context.GetString(Resource.String.unexpected_intent_action, action));
                 *      return;
                 * }*/

                if (Util.MaybeRequestReadExternalStoragePermission((Activity)_context, uris))
                {
                    // The player will be reinitialized if the permission is granted.
                    return;
                }

                var mediaSources = new IMediaSource[uris.Length];

                for (int i = 0; i < uris.Length; i++)
                {
                    mediaSources[i] = BuildMediaSource(uris[i], extensions[i]);
                }
                IMediaSource mediaSource = mediaSources.Length == 1 ? mediaSources[0]
                                        : new ConcatenatingMediaSource(mediaSources);
                _player.Prepare(mediaSource, !_shouldRestorePosition, true);
                _playerNeedsSource = false;
                UpdateButtonVisibilities();
            }
        }
Ejemplo n.º 13
0
        public void PlayVideo(string videoUrL, Get_Movies_Object.Movie videoObject)
        {
            try
            {
                if (videoObject != null)
                {
                    Videodata = videoObject;

                    LoadVideo_Data(videoObject);

                    ReleaseVideo();

                    if (Settings.Allow_Offline_Download == false)
                    {
                        Download_icon.Visibility = ViewStates.Gone;
                    }

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

                    Android.Net.Uri videoURL;
                    if (!string.IsNullOrEmpty(videoUrL))
                    {
                        videoURL = Android.Net.Uri.Parse(videoUrL);
                    }
                    else
                    {
                        videoURL = Android.Net.Uri.Parse(Videodata.source);
                    }

                    mainHandler = new Handler();

                    AdaptiveTrackSelection.Factory videoTrackSelectionFactory = new AdaptiveTrackSelection.Factory(BANDWIDTH_METER);
                    DefaultTrackSelector           trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory);

                    Player = ExoPlayerFactory.NewSimpleInstance(ActivityContext, trackSelector);
                    DefaultDatamediaFactory = new DefaultDataSourceFactory(ActivityContext, Util.GetUserAgent(ActivityContext, Settings.Application_Name), BANDWIDTH_METER);

                    // Produces DataSource instances through which media data is loaded.
                    ExtractorMediaSource DefaultSource = new ExtractorMediaSource(videoURL, DefaultDatamediaFactory, new DefaultExtractorsFactory(), mainHandler, eventLogger);

                    videoSource = null;

                    //Set Interactive Media Ads
                    if (Player_Settings.ShowInteractiveMediaAds)
                    {
                        videoSource = CreateAdsMediaSource(DefaultSource, Player_Settings.IMAdsUri);
                    }

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

                    //Set Cache Media Load
                    if (Player_Settings.EnableOfflineMode)
                    {
                        videoSource = videoSource == null?CreateCacheMediaSource(DefaultSource, videoURL) : CreateCacheMediaSource(videoSource, videoURL);

                        if (videoSource != null)
                        {
                            Download_icon.SetImageDrawable(ActivityContext.GetDrawable(Resource.Drawable.ic_checked_red));
                            Download_icon.Tag = "Downloaded";

                            simpleExoPlayerView.Player = Player;
                            Player.Prepare(videoSource);
                            Player.AddListener(PlayerLitsener);
                            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.Run(async() =>
                                {
                                    var newurl  = await VideoInfoRetriever.GetEmbededVideo(Videodata.source);
                                    videoSource = CreateDefaultMediaSource(Android.Net.Uri.Parse(newurl));
                                });
                            }
                            else
                            {
                                videoSource = CreateDefaultMediaSource(Android.Net.Uri.Parse(videoUrL));

                                simpleExoPlayerView.Player = Player;
                                Player.Prepare(videoSource);
                                Player.AddListener(PlayerLitsener);
                                Player.PlayWhenReady = true;

                                bool haveResumePosition = resumeWindow != C.IndexUnset;
                                if (haveResumePosition)
                                {
                                    Player.SeekTo(resumeWindow, resumePosition);
                                }
                            }
                        }
                    }
                    else
                    {
                        simpleExoPlayerView.Player = Player;
                        Player.Prepare(videoSource);
                        Player.AddListener(PlayerLitsener);
                        Player.PlayWhenReady = true;

                        bool haveResumePosition = resumeWindow != C.IndexUnset;
                        if (haveResumePosition)
                        {
                            Player.SeekTo(resumeWindow, resumePosition);
                        }
                    }
                }
            }
            catch (Exception exception)
            {
                Crashes.TrackError(exception);
            }
        }
Ejemplo n.º 14
0
        public void PlayVideo(string videoUrL)
        {
            try
            {
                if (!string.IsNullOrEmpty(videoUrL))
                {
                    VideoUrL = videoUrL;

                    ReleaseVideo();

                    FullScreenIcon.SetImageDrawable(ActivityContext.Context.GetDrawable(Resource.Drawable.ic_action_ic_fullscreen_expand));

                    LoadingProgressBar.Visibility = ViewStates.Visible;

                    Uri url = Uri.Parse(videoUrL);

                    AdaptiveTrackSelection.Factory trackSelectionFactory = new AdaptiveTrackSelection.Factory();
                    var trackSelector = new DefaultTrackSelector(trackSelectionFactory);
                    trackSelector.SetParameters(new DefaultTrackSelector.ParametersBuilder().Build());

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

                    // Produces DataSource instances through which media data is loaded.
                    var defaultSource = GetMediaSourceFromUrl(url, "normal");

                    VideoSource = null;

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

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

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

                    if (VideoSource == null)
                    {
                        VideoSource = GetMediaSourceFromUrl(url, "normal");

                        SimpleExoPlayerView.Player = Player;
                        Player.Prepare(VideoSource);
                        Player.AddListener(PlayerListener);
                        Player.PlayWhenReady = true;
                    }
                    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)
            {
                Console.WriteLine(exception);
            }
        }