/**
         * 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();
                }
            }
Пример #3
0
        /**
         * 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();
        }
Пример #4
0
        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);
             * }*/
        }
Пример #5
0
        // 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);
                }
            }
        }
Пример #6
0
        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);
        }
Пример #7
0
 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;
     }
 }
Пример #8
0
 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;
     }
 }
Пример #9
0
        // 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();
        }
Пример #10
0
        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, "]");
        }
Пример #11
0
 public void OnTracksChanged(TrackGroupArray p0, TrackSelectionArray p1)
 {
     Log.Debug("RxVideoPlayer", "Trackchanged");
 }
Пример #12
0
 public void OnTracksChanged(TrackGroupArray p0, TrackSelectionArray p1)
 {
 }
Пример #13
0
        // 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();
        }
Пример #14
0
 void IPlayerEventListener.OnTracksChanged(TrackGroupArray trackGroups, TrackSelectionArray trackSelections)
 {
 }
Пример #15
0
 public void OnTracksChanged(TrackGroupArray trackGroups, TrackSelectionArray trackSelections)
 {
 }
Пример #16
0
 void IPlayerEventListener.OnTracksChanged(TrackGroupArray p0, TrackSelectionArray p1)
 {
     //throw new NotImplementedException();
 }
Пример #17
0
 public void OnTracksChanged(TrackGroupArray p0, TrackSelectionArray p1)
 {
     //throw new NotImplementedException();
 }
 public void OnTracksChanged(TrackGroupArray p0, TrackSelectionArray p1)
 {
     Console.WriteLine("OnTracksChanged");
 }
Пример #19
0
        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);
        }