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)); })); }
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; } }
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); } }
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); }
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); } }
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); } }
// 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(); }
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); } }
public void Restart() { _player.SeekTo(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(); } }
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); } }
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); } }