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); }
public IMediaSource CreateDefaultMediaSource(Android.Net.Uri videoUrL) { try { if (videoUrL != null) { ExtractorMediaSource defaultSource = new ExtractorMediaSource(videoUrL, DefaultDatamediaFactory, new DefaultExtractorsFactory(), mainHandler, eventLogger); this.ActivityContext.RunOnUiThread(() => { if (simpleExoPlayerView != null) { simpleExoPlayerView.Player = Player; Player.Prepare(videoSource); Player.AddListener(PlayerLitsener); Player.PlayWhenReady = true; } else { Initialize(); simpleExoPlayerView.Player = Player; Player.Prepare(videoSource); Player.AddListener(PlayerLitsener); Player.PlayWhenReady = true; } bool haveResumePosition = resumeWindow != C.IndexUnset; if (haveResumePosition) { Player.SeekTo(resumeWindow, resumePosition); } }); return(defaultSource); } else { return(null); } } catch (Exception exception) { Crashes.TrackError(exception); return(null); } }
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; }
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 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); } }