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 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; } }
public override void InitializePlayer() { bool needNewPlayer = _mediaPlayer == null; if (needNewPlayer) { var adaptiveTrackSelectionFactory = new AdaptiveTrackSelection.Factory(BANDWIDTH_METER); var trackSelector = new DefaultTrackSelector(adaptiveTrackSelectionFactory); var eventLogger = new ExoPlayerEventLogger(trackSelector); var renderersFactory = new DefaultRenderersFactory(ApplicationContext); var loadControl = new DefaultLoadControl(); _mediaPlayer = ExoPlayerFactory.NewSimpleInstance(renderersFactory, trackSelector, loadControl); _mediaPlayer.AddListener(eventLogger); _mediaPlayer.AddListener(this); _mediaPlayer.SetAudioDebugListener(eventLogger); _mediaPlayer.SetMetadataOutput(eventLogger); } StatusChanged += (sender, args) => OnStatusChangedHandler(args); }
// 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(); }
// Internal methods private void InitializePlayer() { if (player == null) { Intent intent = Intent; string action = intent.Action; android.Net.Uri[] uris; string[] extensions; if (ACTION_VIEW.Equals(action)) { uris = new android.Net.Uri[] { intent.Data }; extensions = new string[] { intent.GetStringExtra(EXTENSION_EXTRA) }; } else if (ACTION_VIEW_LIST.Equals(action)) { string[] uristrings = intent.GetStringArrayExtra(URI_LIST_EXTRA); uris = new android.Net.Uri[uristrings.Length]; for (int i = 0; i < uristrings.Length; i++) { uris[i] = android.Net.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)); Finish(); return; } if (Utils.MaybeRequestReadExternalStoragePermission(this, uris)) { // The player will be reinitialized if the permission is granted. return; } DefaultDrmSessionManager drmSessionManager = null; if (intent.HasExtra(DRM_SCHEME_EXTRA) || intent.HasExtra(DRM_SCHEME_UUID_EXTRA)) { string drmLicenseUrl = intent.GetStringExtra(DRM_LICENSE_URL_EXTRA); string[] keyRequestPropertiesArray = intent.GetStringArrayExtra(DRM_KEY_REQUEST_PROPERTIES_EXTRA); bool multiSession = intent.GetBooleanExtra(DRM_MULTI_SESSION_EXTRA, false); int errorstringId = Resource.String.error_drm_unknown; if (Utils.SdkInt < 18) { errorstringId = Resource.String.error_drm_not_supported; } else { try { string drmSchemeExtra = intent.HasExtra(DRM_SCHEME_EXTRA) ? DRM_SCHEME_EXTRA : DRM_SCHEME_UUID_EXTRA; UUID drmSchemeUuid = Utils.GetDrmUuid(intent.GetStringExtra(drmSchemeExtra)); if (drmSchemeUuid == null) { errorstringId = Resource.String.error_drm_unsupported_scheme; } else { drmSessionManager = BuildDrmSessionManagerV18( drmSchemeUuid, drmLicenseUrl, keyRequestPropertiesArray, multiSession); } } catch (UnsupportedDrmException e) { errorstringId = e.Reason == UnsupportedDrmException.ReasonUnsupportedScheme ? Resource.String.error_drm_unsupported_scheme : Resource.String.error_drm_unknown; } } if (drmSessionManager == null) { ShowToast(errorstringId); Finish(); return; } } ITrackSelectionFactory trackSelectionFactory; string abrAlgorithm = intent.GetStringExtra(ABR_ALGORITHM_EXTRA); if (abrAlgorithm == null || ABR_ALGORITHM_DEFAULT.Equals(abrAlgorithm)) { trackSelectionFactory = new AdaptiveTrackSelection.Factory(BANDWIDTH_METER); } else if (ABR_ALGORITHM_RANDOM.Equals(abrAlgorithm)) { trackSelectionFactory = new RandomTrackSelection.Factory(); } else { ShowToast(Resource.String.error_unrecognized_abr_algorithm); Finish(); return; } bool preferExtensionDecoders = intent.GetBooleanExtra(PREFER_EXTENSION_DECODERS_EXTRA, false); int extensionRendererMode = ((DemoApplication)Application).UseExtensionRenderers() ? (preferExtensionDecoders ? DefaultRenderersFactory.ExtensionRendererModePrefer : DefaultRenderersFactory.ExtensionRendererModeOn) : DefaultRenderersFactory.ExtensionRendererModeOff; DefaultRenderersFactory renderersFactory = new DefaultRenderersFactory(this, extensionRendererMode); trackSelector = new DefaultTrackSelector(trackSelectionFactory); trackSelector.SetParameters(trackSelectorParameters); lastSeenTrackGroupArray = null; player = ExoPlayerFactory.NewSimpleInstance(renderersFactory, trackSelector, drmSessionManager); eventLogger = new EventLogger(trackSelector); player.AddListener(new PlayerEventListener(this)); player.PlayWhenReady = startAutoPlay; player.AddListener(eventLogger); // Cannot implement the AnalyticsListener because the binding doesn't work. //Todo: implement IAnalyticsListener //player.AddAnalyticsListener(eventLogger); player.AddAudioDebugListener(eventLogger); player.AddVideoDebugListener(eventLogger); player.AddMetadataOutput(eventLogger); //end Todo playerView.Player = player; playerView.SetPlaybackPreparer(this); debugViewHelper = new DebugTextViewHelper(player, debugTextView); debugViewHelper.Start(); IMediaSource[] mediaSources = new IMediaSource[uris.Length]; for (int i = 0; i < uris.Length; i++) { mediaSources[i] = BuildMediaSource(uris[i], extensions[i]); } mediaSource = mediaSources.Length == 1 ? mediaSources[0] : new ConcatenatingMediaSource(mediaSources); string adTagUristring = intent.GetStringExtra(AD_TAG_URI_EXTRA); if (adTagUristring != null) { android.Net.Uri adTagUri = android.Net.Uri.Parse(adTagUristring); if (!adTagUri.Equals(loadedAdTagUri)) { ReleaseAdsLoader(); loadedAdTagUri = adTagUri; } IMediaSource adsMediaSource = CreateAdsMediaSource(mediaSource, android.Net.Uri.Parse(adTagUristring)); if (adsMediaSource != null) { mediaSource = adsMediaSource; } else { ShowToast(Resource.String.ima_not_loaded); } } else { ReleaseAdsLoader(); } } bool haveStartPosition = startWindow != C.IndexUnset; if (haveStartPosition) { player.SeekTo(startWindow, startPosition); } player.Prepare(mediaSource, !haveStartPosition, false); UpdateButtonVisibilities(); }