0

我正在开发用于播放视频的 UWP 桌面应用程序。我需要在运行时包含字幕,并且我正在尝试使用 Subtitle 类型的 TimedMetadataTrack 对象。尽管我在 TimedMetadataTrack 对象中包含了几个 TimedTextCue 并将此对象添加到 MediaSource 的 ExternalTimedMetadataTracks 集合中,但在 MediaPlayerElement 上播放视频时不会显示任何标题。什么不见​​了?任何帮助都是最受欢迎的。谢谢。

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;
4

1 回答 1

1

有没有办法通过编程来选择字幕,这样用户就不必这样做了?

您可以创建一个MediaPlaybackItem 类作为媒体源,然后您可以调用 MediaPlaybackItem 对象的 SetPresentationMode 方法,传入要切换的轨道的索引,然后提供来自 TimedMetadataTrackPresentationMode 枚举的值。

像这样:

            source.ExternalTimedMetadataTracks.Add(metadataTrack);

        MediaPlaybackItem mediaPlaybackItem = new MediaPlaybackItem(source);

        mediaPlayerElement.Source = mediaPlaybackItem;

        mediaPlayerElement.AutoPlay = true;

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

您可以参考此文档以获取更多信息:媒体项目、播放列表和曲目

于 2021-07-28T06:57:25.077 回答