zoukankan      html  css  js  c++  java
  • 【Win 10 应用开发】加载外部的 srt 字幕

    据说系统内置的多媒体功能支持 srt、 ssa 等字幕,老周测试过几种格式的字幕均能加载。

    SRT 字幕是最简单的字幕结构,甚至你用记事本都能做出来,就是分为几行来写。

    第一行是字幕的编号,应该是从1开始的,反正工具生成的SRT都是从1开始编号;

    第二行是字幕的开始时间和结束时间,中间用一个 “-->”来分隔;

    第三行是字幕内容。

    比如这样:

    18
    00:03:37,933 --> 00:03:45,366
    時而憑風遨遊,時而髙談怪論
    
    19
    00:03:45,366 --> 00:03:45,599
    
    
    20
    00:03:45,600 --> 00:03:49,800
    來往於仙山飄渺之間


    编号为19的字幕是空白,所以第三行没有内容。

    好,下面就说说加载外部SRT字幕的方法。

    第一步:创建MediaSource,然后把这个MediaSource实例与MediaElement控件关联,这样就可以在界面上播放。

                FileOpenPicker picker = new FileOpenPicker();
                picker.FileTypeFilter.Add(".mkv");
                picker.FileTypeFilter.Add(".mp4");
    
                StorageFile file = await picker.PickSingleFileAsync();
    
                if (file != null)
                {
                    MediaSource ms = MediaSource.CreateFromStorageFile(file);
                    me.Tag = ms;
                    me.SetPlaybackSource(ms);
                }


    第二步,加载字幕文件,然后创建TimedTextSource对象,再把它加入到MediaSource.ExternalTimedTextSources属性中,这个属性是一个列表,类型为TimedTextSource。每加入一个TimedTextSource对象就多一个字幕轨道。

                MediaSource mdsrc = me.Tag as MediaSource;
    
                FileOpenPicker picker = new FileOpenPicker();
                picker.FileTypeFilter.Add(".srt");
                StorageFile srtfile = await picker.PickSingleFileAsync();
    
                if (srtfile != null)
                {
                    IRandomAccessStream stream = await srtfile.OpenReadAsync();
                    TimedTextSource txtsrc = TimedTextSource.CreateFromStream(stream);
                    mdsrc.ExternalTimedTextSources.Clear();
                    mdsrc.ExternalTimedTextSources.Add(txtsrc);
                }


    这样就完成了。如果视频文件有内置字幕,方法也一样,只是在创建TimedTextSource对象时指定的是视频文件本身,如果是外部字幕,就指定字幕文件。

    运行应用程序,先打开视频播放,然后选择字幕文件。当添加了有效的字幕文件后,MediaElement控件的控制条中会出现一个打开字幕的按钮。如图。

    然后,点击这个按钮就可以选择加载的字幕,或者关闭字幕。

    最后,在视频中就能显示字幕了。

    好了,老周近两天严重感冒了,现在稍为好转,就顺便写一写博文。

    示例代码下载。

  • 相关阅读:
    文档库文件上传Webpart(原创)
    SharePointWebControls帮助类
    使用反射创建动态程序集
    Silverlight Workflow 工作流设计器和工作流编辑器的若干截图,先睹为快(Workflow Designer)
    Using Networking to Retrieve Data and Populate a DataGrid
    昕友silverlight表单设计器的使用 (原创 Form Designer)
    Bing翻译和Google翻译的比较
    具有某接口与是某类型
    UI Automation in WPF/Silverlight
    RTP/RTCP/RTSP/SIP/SDP
  • 原文地址:https://www.cnblogs.com/tcjiaan/p/5356368.html
Copyright © 2011-2022 走看看