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; }
private PlayerManager(IQueuePositionListener queuePositionListener, PlayerView localPlayerView, PlayerControlView castControlView, Context context, CastContext castContext) { this.queuePositionListener = queuePositionListener; this.localPlayerView = localPlayerView; this.castControlView = castControlView; mediaQueue = new List <DemoUtil.Sample>(); currentItemIndex = C.IndexUnset; concatenatingMediaSource = new ConcatenatingMediaSource(); DefaultTrackSelector trackSelector = new DefaultTrackSelector(BANDWIDTH_METER); IRenderersFactory renderersFactory = new DefaultRenderersFactory(context); exoPlayer = ExoPlayerFactory.NewSimpleInstance(renderersFactory, trackSelector); exoPlayer.AddListener(this); localPlayerView.Player = exoPlayer; castPlayer = new CastPlayer(castContext); castPlayer.AddListener(this); castPlayer.SetSessionAvailabilityListener(this); castControlView.Player = castPlayer; }
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 virtual void Initialize() { if (Player != null) { return; } if (MediaSession == null) { throw new ArgumentNullException(nameof(MediaSession)); } if (RequestHeaders?.Count > 0 && RequestHeaders.TryGetValue("User-Agent", out string userAgent)) { UserAgent = userAgent; } else { UserAgent = Util.GetUserAgent(Context, "MediaManager"); } HttpDataSourceFactory = new DefaultHttpDataSourceFactory(UserAgent); if (RequestHeaders?.Count > 0) { foreach (var item in RequestHeaders) { HttpDataSourceFactory.DefaultRequestProperties.Set(item.Key, item.Value); } } DataSourceFactory = new DefaultDataSourceFactory(Context, null, HttpDataSourceFactory); DashChunkSourceFactory = new DefaultDashChunkSource.Factory(DataSourceFactory); SsChunkSourceFactory = new DefaultSsChunkSource.Factory(DataSourceFactory); BandwidthMeter = new DefaultBandwidthMeter(); TrackSelectionFactory = new AdaptiveTrackSelection.Factory(BandwidthMeter); TrackSelector = new DefaultTrackSelector(TrackSelectionFactory); MediaSource = new ConcatenatingMediaSource(); Player = ExoPlayerFactory.NewSimpleInstance(Context, TrackSelector); var audioAttributes = new Com.Google.Android.Exoplayer2.Audio.AudioAttributes.Builder() .SetUsage(C.UsageMedia) .SetContentType(C.ContentTypeMusic) .Build(); Player.AudioAttributes = audioAttributes; //TODO: Use this in 2.9.0 //Player.SetAudioAttributes(audioAttributes, true); PlayerEventListener = new PlayerEventListener() { OnPlayerErrorImpl = (exception) => { MediaManager.OnMediaItemFailed(this, new MediaItemFailedEventArgs(MediaManager.MediaQueue.Current, exception, exception.Message)); }, OnTracksChangedImpl = (trackGroups, trackSelections) => { MediaManager.MediaQueue.CurrentIndex = Player.CurrentWindowIndex; //TODO: Update metadata of item here } }; Player.AddListener(PlayerEventListener); PlaybackController = new PlaybackController(); MediaSessionConnector = new MediaSessionConnector(MediaSession, PlaybackController); QueueNavigator = new QueueNavigator(MediaSession); MediaSessionConnector.SetQueueNavigator(QueueNavigator); QueueDataAdapter = new QueueDataAdapter(MediaSource); MediaSourceFactory = new QueueEditorMediaSourceFactory(); TimelineQueueEditor = new TimelineQueueEditor(MediaSession.Controller, MediaSource, QueueDataAdapter, MediaSourceFactory); MediaSessionConnector.SetQueueEditor(TimelineQueueEditor); RatingCallback = new RatingCallback(); MediaSessionConnector.SetRatingCallback(RatingCallback); PlaybackPreparer = new MediaSessionConnectorPlaybackPreparer(Player, MediaSource); MediaSessionConnector.SetPlayer(Player, PlaybackPreparer, null); }
public QueueDataAdapter(ConcatenatingMediaSource mediaSource) { _mediaSource = mediaSource; mediaManager.MediaQueue.CollectionChanged += MediaQueue_CollectionChanged; }
public MediaSessionConnectorPlaybackPreparer(IExoPlayer player, ConcatenatingMediaSource mediaSource) { _player = player; _mediaSource = mediaSource; }