/** * Shows the selection dialog for a given renderer. * * @param activity The parent activity. * @param title The dialog's title. * @param trackInfo The current track information. * @param rendererIndex The index of the renderer. */ public void showSelectionDialog(Activity activity, string title, MappingTrackSelector.MappedTrackInfo trackInfo, int rendererIndex) { this.trackInfo = trackInfo; this.rendererIndex = rendererIndex; trackGroups = trackInfo.GetTrackGroups(rendererIndex); trackGroupsAdaptive = new bool[trackGroups.Length]; for (int i = 0; i < trackGroups.Length; i++) { trackGroupsAdaptive[i] = adaptiveTrackSelectionFactory != null && trackInfo.GetAdaptiveSupport(rendererIndex, i, false) != RendererCapabilities.AdaptiveNotSupported && trackGroups.Get(i).Length > 1; } isDisabled = selector.GetRendererDisabled(rendererIndex); _override = selector.GetSelectionOverride(rendererIndex, trackGroups); AlertDialog.Builder builder = new AlertDialog.Builder(activity); builder.SetTitle(title) .SetView(buildView(builder.Context)) .SetPositiveButton(global::Android.Resource.String.Ok, this) .SetNegativeButton(global::Android.Resource.String.Cancel, delegate { }) .Create() .Show(); }
public void OnPrepared(DownloadHelper helper) { for (int i = 0; i < downloadHelper.PeriodCount; i++) { TrackGroupArray trackGroups = downloadHelper.GetTrackGroups(i); for (int j = 0; j < trackGroups.Length; j++) { TrackGroup trackGroup = trackGroups.Get(j); for (int k = 0; k < trackGroup.Length; k++) { trackKeys.Add(new TrackKey(i, j, k)); var trackNameProvider = downloadTracker.TrackNameProvider; var trackName = trackNameProvider.GetTrackName(trackGroup.GetFormat(k)); trackTitles.Add(trackName); } } if (trackKeys.Count != 0) { builder.SetView(dialogView); } builder.Create().Show(); } }
/** * Shows the selection dialog for a given renderer. * * @param activity The parent activity. * @param title The dialog's title. * @param trackInfo The current track information. * @param rendererIndex The index of the renderer. */ public void ShowSelectionDialog(Activity activity, char[] title, MappingTrackSelector.MappedTrackInfo trackInfo, int rendererIndex) { _trackInfo = trackInfo; _rendererIndex = rendererIndex; _trackGroups = trackInfo.GetTrackGroups(rendererIndex); _trackGroupsAdaptive = new bool[_trackGroups.Length]; for (int i = 0; i < _trackGroups.Length; i++) { _trackGroupsAdaptive[i] = _adaptiveVideoTrackSelectionFactory != null && trackInfo.GetAdaptiveSupport(rendererIndex, i, false) != RendererCapabilities.AdaptiveNotSupported && _trackGroups.Get(i).Length > 1; } _isDisabled = _selector.GetRendererDisabled(rendererIndex); _override = _selector.GetSelectionOverride(rendererIndex, _trackGroups); AlertDialog.Builder builder = new AlertDialog.Builder(activity); builder.SetTitle(title.ToString()) .SetView(BuildView(LayoutInflater.From(builder.Context))) .SetPositiveButton(Android.Resource.String.Ok, this) .SetNegativeButton(Android.Resource.String.Cancel, this) .Create() .Show(); }
public void OnTracksChanged(TrackGroupArray p0, TrackSelectionArray p1) { UpdateButtonVisibilities(); /*MappingTrackSelector.MappedTrackInfo trackInfo = trackSelections; * if (trackInfo.HasOnlyUnplayableTracks(C.TrackTypeVideo)) * { * ShowToast(Resource.String.error_unsupported_video); * } * if (trackInfo.HasOnlyUnplayableTracks(C.TrackTypeAudio)) * { * ShowToast(Resource.String.error_unsupported_audio); * }*/ }
// User controls private void UpdateButtonVisibilities() { debugRootView.RemoveAllViews(); if (player == null) { return; } MappedTrackInfo mappedTrackInfo = trackSelector.CurrentMappedTrackInfo; if (mappedTrackInfo == null) { return; } for (int i = 0; i < mappedTrackInfo.RendererCount; i++) { TrackGroupArray trackGroups = mappedTrackInfo.GetTrackGroups(i); if (trackGroups.Length != 0) { Button button = new Button(this); int label; switch (player.GetRendererType(i)) { case C.TrackTypeAudio: label = Resource.String.exo_track_selection_title_audio; break; case C.TrackTypeVideo: label = Resource.String.exo_track_selection_title_video; break; case C.TrackTypeText: label = Resource.String.exo_track_selection_title_text; break; default: continue; } button.SetText(label); button.SetTag(button.Id, i); button.SetOnClickListener(this); debugRootView.AddView(button); } } }
public void OnTracksChanged(TrackGroupArray p0, TrackSelectionArray p1) { var trackGroupArray = new TrackGroup[p0.Length]; for (var i = 0; i < p0.Length; i++) { trackGroupArray[i] = p0.Get(i); } var trackSelectionArray = new ITrackSelection[p1.Length]; for (var i = 0; i < p1.Length; i++) { trackSelectionArray[i] = p1.Get(i); } TracksChanged?.Invoke(trackGroupArray, trackSelectionArray); }
public override void OnTracksChanged(TrackGroupArray trackGroups, TrackSelectionArray trackSelections) { activity.UpdateButtonVisibilities(); if (trackGroups != activity.lastSeenTrackGroupArray) { MappedTrackInfo mappedTrackInfo = activity.trackSelector.CurrentMappedTrackInfo; if (mappedTrackInfo != null) { if (mappedTrackInfo.GetTypeSupport(C.TrackTypeVideo) == MappedTrackInfo.RendererSupportUnsupportedTracks) { activity.ShowToast(Resource.String.error_unsupported_video); } if (mappedTrackInfo.GetTypeSupport(C.TrackTypeAudio) == MappedTrackInfo.RendererSupportUnsupportedTracks) { activity.ShowToast(Resource.String.error_unsupported_audio); } } activity.lastSeenTrackGroupArray = trackGroups; } }
public void OnTracksChanged(TrackGroupArray trackGroups, TrackSelectionArray trackSelections) { UpdateButtonVisibilities(); if (trackGroups != lastSeenTrackGroupArray) { var mappedTrackInfo = trackSelector.CurrentMappedTrackInfo; if (mappedTrackInfo != null) { if (mappedTrackInfo.GetTrackTypeRendererSupport(C.TrackTypeVideo) == MappingTrackSelector.MappedTrackInfo.RendererSupportUnsupportedTracks) { ShowToast(Resource.String.error_unsupported_video); } if (mappedTrackInfo.GetTrackTypeRendererSupport(C.TrackTypeAudio) == MappingTrackSelector.MappedTrackInfo.RendererSupportUnsupportedTracks) { ShowToast(Resource.String.error_unsupported_audio); } } lastSeenTrackGroupArray = trackGroups; } }
// 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 void OnTracksChanged(TrackGroupArray ignored, TrackSelectionArray trackSelections) { var mappedTrackInfo = trackSelector.CurrentMappedTrackInfo; if (mappedTrackInfo == null) { Log.Debug(TAG, "Tracks []"); return; } Log.Debug(TAG, "Tracks ["); // Log tracks associated to renderers. for (var rendererIndex = 0; rendererIndex < mappedTrackInfo.Length; rendererIndex++) { var rendererTrackGroups = mappedTrackInfo.GetTrackGroups(rendererIndex); var trackSelection = trackSelections.Get(rendererIndex); if (rendererTrackGroups.Length > 0) { Log.Debug(TAG, " Renderer:" + rendererIndex + " ["); for (int groupIndex = 0; groupIndex < rendererTrackGroups.Length; groupIndex++) { TrackGroup trackGroup = rendererTrackGroups.Get(groupIndex); var adaptiveSupport = getAdaptiveSupportString(trackGroup.Length, mappedTrackInfo.GetAdaptiveSupport(rendererIndex, groupIndex, false)); Log.Debug(TAG, " Group:" + groupIndex + ", adaptive_supported=" + adaptiveSupport + " ["); for (int trackIndex = 0; trackIndex < trackGroup.Length; trackIndex++) { var status = getTrackStatusString(trackSelection, trackGroup, trackIndex); var formatSupport = getFormatSupportString( mappedTrackInfo.GetTrackFormatSupport(rendererIndex, groupIndex, trackIndex)); Log.Debug(TAG, " " + status + " Track:" + trackIndex + ", " + Format.ToLogString(trackGroup.GetFormat(trackIndex)) + ", supported=" + formatSupport); } Log.Debug(TAG, " ]"); } // Log metadata for at most one of the tracks selected for the renderer. if (trackSelection != null) { for (var selectionIndex = 0; selectionIndex < trackSelection.Length(); selectionIndex++) { var metadata = trackSelection.GetFormat(selectionIndex).Metadata; if (metadata != null) { Log.Debug(TAG, " Metadata ["); printMetadata(metadata, " "); Log.Debug(TAG, " ]"); break; } } } Log.Debug(TAG, " ]"); } } // Log tracks not associated with a renderer. TrackGroupArray unassociatedTrackGroups = mappedTrackInfo.UnassociatedTrackGroups; if (unassociatedTrackGroups.Length > 0) { Log.Debug(TAG, " Renderer:None ["); for (int groupIndex = 0; groupIndex < unassociatedTrackGroups.Length; groupIndex++) { Log.Debug(TAG, " Group:" + groupIndex + " ["); var trackGroup = unassociatedTrackGroups.Get(groupIndex); for (int trackIndex = 0; trackIndex < trackGroup.Length; trackIndex++) { var status = getTrackStatusString(false); var formatSupport = getFormatSupportString( RendererCapabilities.FormatUnsupportedType); Log.Debug(TAG, " " + status + " Track:" + trackIndex + ", " + Format.ToLogString(trackGroup.GetFormat(trackIndex)) + ", supported=" + formatSupport); } Log.Debug(TAG, " ]"); } Log.Debug(TAG, " ]"); } Log.Debug(TAG, "]"); }
public void OnTracksChanged(TrackGroupArray p0, TrackSelectionArray p1) { Log.Debug("RxVideoPlayer", "Trackchanged"); }
public void OnTracksChanged(TrackGroupArray p0, TrackSelectionArray p1) { }
// 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(); }
void IPlayerEventListener.OnTracksChanged(TrackGroupArray trackGroups, TrackSelectionArray trackSelections) { }
public void OnTracksChanged(TrackGroupArray trackGroups, TrackSelectionArray trackSelections) { }
void IPlayerEventListener.OnTracksChanged(TrackGroupArray p0, TrackSelectionArray p1) { //throw new NotImplementedException(); }
public void OnTracksChanged(TrackGroupArray p0, TrackSelectionArray p1) { //throw new NotImplementedException(); }
public void OnTracksChanged(TrackGroupArray p0, TrackSelectionArray p1) { Console.WriteLine("OnTracksChanged"); }
public void OnTracksChanged(TrackGroupArray trackGroups, TrackSelectionArray trackSelections) { for (int i = 0; i < trackGroups.Length; i++) { TrackGroup trackGroup = trackGroups.Get(i); for (int j = 0; j < trackGroup.Length; j++) { Metadata trackMetadata = trackGroup.GetFormat(j).Metadata; if (trackMetadata != null) { for (int v = 0; v < trackMetadata.Length(); v++) { Metadata.IEntry entry = trackMetadata.Get(v); switch (entry) { case ApicFrame apicFrame: byte[] bitmapData = apicFrame.PictureData.ToArray(); Bitmap bitmap = BitmapFactory.DecodeByteArray(bitmapData, 0, bitmapData.Length); var test1 = apicFrame.MimeType; break; case BinaryFrame binaryFrame: var test2 = binaryFrame.Data; break; case ChapterFrame chapterFrame: var test3 = chapterFrame.ChapterId; break; case ChapterTocFrame chapterTocFrame: var test4 = chapterTocFrame.IsRoot; break; case CommentFrame commentFrame: var test5 = commentFrame.Text; break; case GeobFrame geobFrame: var test6 = geobFrame.Data; break; case InternalFrame internalFrame: var test7 = internalFrame.Text; break; case PrivFrame privFrame: var test8 = privFrame.PrivateData; break; case TextInformationFrame textInformationFrame: var test9 = textInformationFrame.Value; break; case UrlLinkFrame urlLinkFrame: var test10 = urlLinkFrame.Url; break; default: break; } } } } } OnTracksChangedImpl?.Invoke(trackGroups, trackSelections); }