Как запускать элементы из коллекции ExternalTimedMetadataTracks?

#c# #uwp #timed #mediaplayerelement

Вопрос:

Я работаю над настольным приложением UWP для воспроизведения видео. Мне нужно включить субтитры во время выполнения, и я пытаюсь использовать объект TimedMetadataTrack типа Subtitle. Хотя я включил несколько TimedTextCue в объект TimedMetadataTrack и добавил этот объект в коллекцию ExternalTimedMetadataTracks MediaSource, заголовок не отображается во время воспроизведения видео на элементе MediaPlayer. Чего не хватает? Любая помощь будет только приветствоваться. Спасибо.

XAML

 <MediaPlayerElement x:Name="mediaPlayerElement" 
                                AutoPlay="False" 
                                Margin="5"
                                Width="640" Height="480"
                                HorizontalAlignment="Center" 
                                AreTransportControlsEnabled="True" />
 

Код За

         var source = MediaSource.CreateFromUri(new Uri("ms-appx:///Assets/teste.mp4"));

        TimedMetadataTrack metadataTrack = new TimedMetadataTrack("ID_0", "en-us", TimedMetadataKind.Subtitle);

        for (int i = 0; i < 10; i  )
        {
            TimedTextCue ttc = new TimedTextCue();
            TimedTextLine ttl = new TimedTextLine();

            ttl.Text = "This is subtitles line: "   i.ToString()   ".";

            ttc.Id = "ID_"   i;
            ttc.Lines.Add(ttl);
            ttc.StartTime = TimeSpan.FromSeconds((i * 10)   1);
            ttc.Duration = TimeSpan.FromSeconds(10);

            metadataTrack.AddCue(ttc);
        }

        source.ExternalTimedMetadataTracks.Add(metadataTrack);

        this.mediaPlayerElement.Source = source;
 

Комментарии:

1. Вы проверили, включено ли отображение подписи? Вы можете найти кнопку в левом нижнем углу под названием » Показать меню закрытых подписей «. Нажмите кнопку и выберите пользовательский заголовок, который вы добавили, чтобы увидеть, будет ли отображаться заголовок.

2. @RoyLi-MSFT, есть ли способ выбрать подзаголовок с помощью программирования, чтобы пользователю не приходилось этого делать?

Ответ №1:

есть ли способ выбрать субтитры с помощью программирования, чтобы пользователю не приходилось этого делать?

Вы можете создать класс MediaPlaybackItem в качестве источника мультимедиа, затем вызвать метод SetPresentationMode объекта MediaPlaybackItem, передав индекс дорожки, которую вы хотите переключить, а затем указав значение из перечисления TimedMetadataTrackPresentationMode.

Подобный этому:

             source.ExternalTimedMetadataTracks.Add(metadataTrack);

        MediaPlaybackItem mediaPlaybackItem = new MediaPlaybackItem(source);

        mediaPlayerElement.Source = mediaPlaybackItem;

        mediaPlayerElement.AutoPlay = true;

        mediaPlaybackItem.TimedMetadataTracks.SetPresentationMode(0, TimedMetadataTrackPresentationMode.PlatformPresented);
 

Вы можете обратиться к этой документации для получения дополнительной информации: элементы мультимедиа, списки воспроизведения и треки.