当前您所在的位置:首页>新闻中心>行业动态>

如何为直播流配置隐藏字幕字幕?

发布时间:2019/06/06 浏览量:1375

Wowza Stream Engine 4 支持在直播流中插入隐藏字幕。它可以接收实时流中的字幕数据并将其转化为合适的格式,以对外提供包括Apple HTTP Live Streaming (Apple HLS)、Adobe HTTP Dynamic Streaming (Adobe HDS)以及 RTMP协议在内的流媒体服务。 许多播放器技术,包括Apple iOS devices、VideoLAN VLC 播放器以及很多机顶盒都可以显示嵌入在直播流中的CEA-608格式的隐藏字幕。 另外还有一些播放器技术,例如JW Player 和 Flowplayer, 只能显示AMF onTextData格式的隐藏字幕。 

 

注:本文所说的字幕,你可以理解为Closed Caption 或 Subtitle. 

 

注意: 本文针对Wowza Streaming Engine 4.0及以上的版本,如果你还在使用Wowza Media Server 3.X,建议您先做版本升级。

 

支持的字幕格式

隐藏字幕有很多不同的数据来源,在流媒体输出时,每一个流媒体播放协议需要在流中嵌入不同数据格式的隐藏字幕。 Wowza Stream Engine 4的直播流隐藏字幕功能支持以下输入和输出格式。

 

支持的输入格式

1.嵌入到输入流中的CEA-608 字幕。

2.嵌入到输入流中的Action Message Format (AMF) onTextData。

3.嵌入到输入流中的AMF onCaption和onCaptionInfo。

4.用API将onTextData嵌入到实时流中

 

支持的输出格式

下面的所有输出格式,都可以用上面支持的输入格式来转化: 

 

1.onTextData Adobe HDS 中的events和RTMP直播流。

2.Apple HLS (M3U8)直播流视频轨道中的CEA-608 格式的 SEI 数据。

3.Apple HLS (M3U8)直播流视频轨道中的WebVTT 文本轨道。

 

支持的字幕格式转化

 

下面的表格对Wowza Stream Engine 4支持的输入到输入的格式转换功能进行了总结: 

 

输出 >


输入 ?
Adobe HDS
(onTextData)
RTMP
(onTextData)
Apple HLS 
(CEA-608 in video)
Apple HLS 
(WebVTT)
AMF onTextData Yes Yes Yes Yes
AMF onCaption Yes Yes Yes Yes
CEA-608 Yes Yes Yes Yes
via API Yes Yes Yes Yes

 

 

插入CEA-608格式的字幕

 

这个部分介绍了如何配置你的Wowza应用,让它监听输入的直播流并得到其中CEA-608格式的字幕,对字幕进行解码,然后将它们转换为onTextData事件。

 

1.在Wowza Streaming Engine Manager管理界面,点击Applicationstab页,左侧导航菜单点击应用的名字(例如live).

 

2.在应用的Setup页面,点击Edit,在页面下部的Closed Caption Sources区域,选择Embedded CEA-608 captions in live streams. 点击Save,然后根据提示重启Wowza Application。

 

3.点击Propertiestab页,然后在Quick Links导航条点击Closed Captions.

 

4.在Closed Captions部分,点击Edit.

 

5.启用下面表格中的每一个参数,并为其设置相应的参数值.

 

参数名

参数值

说明

captionUndefinedLanguageId eng 字幕使用的语言代码。如果没有设置,默认是本地服务器的3个字母所所代表的国家编码(3-letter).
ccIngestCEA608EnableField1 true 设置CEA-608 field 1是否为enabled。默认为true (enabled). 通常情况,field 1 和 field 2 只有其中一个是enabled, 不会两个都是。.
ccIngestCEA608EnableField2 false 设置CEA-608 field 2是否为enabled。默认为false (disabled).
ccIngestCEA608LogCaptions true 设置在解析字幕时是否要记录日志。默认为true (enabled).
ccIngestCEA608VerboseLogging false 设置是否在解析CEA-608时记录更详细的日志。默认是false (disabled).

 

6.点击Save,然后根据提示,重启Wowza Application.

 

7.从编码器发布一个带有CEA-608字幕数据的直播流,在这个例子中, 我们将使用名为myStream的直播流.

 

由于单纯的CEA-608字幕和流媒体服务器中的字幕两者存在一些不同,一些字幕模型的解码可能比另一些的要好。Pop-on captions (可以显示在屏幕的任意位置,后面跟随另一个字幕或者结束)是最好的。 其它字幕模型(例如scroll-up 字幕直接在屏幕上绘制)可能表现的有些延时。这是由于CEA-608是直接在设备上绘制,然而Wowza Stream Engine 4必须每一个字幕以获得它并将它嵌入到输出的直播流里。 

 

当考虑采用什么字幕模型插入到Wowza Stream Engine 4 的直播流中时: 

Use pop-on 字幕是最合适的

如果使用其它字幕模型,要尽可能的降低字幕显示的开始时间到结束时间的时长。

 

插入 AMF onTextData 格式的字幕

 

下面介绍了如何配置Wowza应用,让它对输入的直播流进行监听以获得AMF onTextData 格式的字幕,对字幕进行解码,并将它转换为CEA-608格式的字幕。 

 

onTextData 事件是一个Action Message Format (AMF) 事件,它通常和Adobe HDS 以及 RTMP streaming 协议配合使用,被用于封装隐藏字幕或标题信息。onTextData 事件通常包括下面的字段: 

 

text. 封装了UTF-8 编码的文本。

 

lang. 三个字母代表的语言(例如,eng).

 

trackid. (可选) 针对VOD点播流,这个ID是视频文件中的字幕轨道ID。对于直播流,这个字段可以忽略或者设置为99.

 

Wowza Streaming Engine 对输入流进行监听,以获得onTextData 事件,解开其中的text字段, 将其转换为CEA-608 格式, 然后将它嵌入到视频流的SEI NAL 单元。包括Apple iOS 设备、VideoLAN VLC播放器及许多机顶盒在内的众多播放器技术都可以显示这些嵌入在视频流中的隐藏字幕。

 

你可以用Wowza Stream Engine 4中调用server-side API IMediaStream.sendDirect()以将onTextData事件嵌入到直播流中。 (这里有一个代码例子,PublishOnTextData)。 这使得发布可以将隐藏字幕以timed text 事件或 SMPTE 事件的形式传递并使用Wowza Streaming Engine server-side API将onTextData嵌入到直播流中。 同时Wowza直播流中的onTextData会被拦截并以CEA-608 事件的格式嵌入到直播流中。

 

 

1.在Wowza Streaming Engine Manager管理界面,点击Applicationstab页,左侧导航菜单点击应用的名字(例如live).

 

2.在应用的Setup页面,点击Edit,在页面下部的Closed Caption Sources区域,选择onTextData events in live streams. 点击Save,然后根据提示重启Wowza Application。

 

3.点击Propertiestab页,然后在Quick Links导航条点击Closed Captions.

 

4.在Closed Captions部分,点击Edit.

 

5.启用下面表格中的每一个参数,并为其设置相应的参数值.

 

参数名

参数值

说明

closedCaptionLiveMaxDisplayTime 10000 隐藏字幕在屏幕上显示的最大时长,单位毫秒。
 

 

6.(可选) 你可以可以为应用配置一些更细节的参数。要添加自定义参数,按如下操作:

 

①在Properties tab页,在Quick Links导航条上点击Custom.

 

②在Custom部分,点击Edit,然后点击Add Custom Property.

 

③在Add Custom Property对话框中,按下面表格的内容添加自定义参数,然后点击Add.

 

Path

Name

Type

Value

/Root/Application/TimedText closedCaptionLiveCommandsPerFrame Integer 每一帧中隐藏字幕命令的最大数量(最大为31).
/Root/Application/TimedText closedCaptionLiveChannel Integer 隐藏字幕频道(channel).合法的值为0 (CC1) 和 1 (CC2). (注意: 好像Apple iOS 设备只支持CC1.)
/Root/Application/TimedText closedCaptionLiveColor Integer 隐藏字幕的字体颜色. 合法的值是0 (白色), 2 (绿色), 4 (蓝色), 6 (青色), 8 (红色), 10 (黄色)以及 12 (紫红色).
/Root/Application/TimedText closedCaptionLiveCharacterSet String 隐藏字幕的字符集,当将onTextData文本转换为字幕数据时的字符集。例如 UTF-8.
/Root/Application/TimedText closedCaptionLiveLogOnTextDataEvents Boolean 对每一个onTextData事件记录日志,如果设置为true, 所有的onTextData 事件都会被记录在日志中.
/Root/Application/TimedText closedCaptionLiveEnableTranscoderResults Boolean 是否在Wowza transcoder中对CEA-608 字幕透传。如果设置为true, 所有的 CEA-608 字幕都会被透传.
 

 

7.点击 Save, 重启Wowza应用,让参数生效.

 

8.并从编码器发布一个直播流。在这个例子中,我们使用名为myStream的直播流。

 

关于用API插入onTextData 字幕的例子

你可以下载(ModulePublishOnTextData) 模块,它1可以用API向Wowza直播流插入onTextData event。它从一个文本文件中读取字幕信息,每隔6.5秒,插入一条onTextData event。 这个模块仅仅是为了测试如何使用API向直播流中插入onTextData event。你可以参考它开发你自己的模块

 

插入 AMF onCaption 字幕

这个部分介绍了如何 section describes how to set up your live application to ingest Action Message Format (AMF) onCaption captions. Wowza Streaming Engine 支持。

两种类型的 AMF onCaption event.

 

第一种包含:

 

一个onCaptionInfo event 定义了讲话者字幕轨道信息。这个信息可能会包含一组讲话者和一组字幕轨道。

 

onCaption event里面定义了实际的字幕信息。包含一组字幕数据和一个可选的讲话者的索引,它指向onCaptionInfo中讲话者.

第二种包含一个"708"类型的onCaptionInfo,这个类型的字幕包含Base64编码的CEA-608 或 CEA-708 字幕数据。 Wowza Streaming Engine 仅插入CEA-608 字幕数据(包括 paint-on, roll-up, 或 pop-on 三种模式).

 

配置onCaption 字幕

1、在Wowza Streaming Engine Manager管理界面中,点击Applicationstab页,在左侧导航菜单中点击直播应用名(例如live)、

 

 2、在Setup页面,点击Edit。在界面下部分的Closed Caption Sources区域选择onCaptionInfo events in live streams。然后点击Save,最后根据提示重启Wowza应用。

 

播放

 

在Apple iOS 设备上播放

 

Apple iOS 播放器 可以从Apple HLS (M3U8) 流中获取CEA-608格式的数据,将其作为字幕显示。 

 

在iOS 设备中启用隐藏字幕。要这么做,在设置 > 视频, 将隐藏字幕 设置为 ON.

 

(不过在较新的iOS设备上,已经没有这个功能了)

用iOS设备的Safari浏览器访问下面的URL:

 

URL: http://[wowza-ip-address]:1935/[application]/myStream/playlist.m3u8

 

使用JW Player (RTMP)

 

JW Player 可以播放RTMP流中的字幕,请使用5.x 或 6.5 及更高版本JW Player。 

 

你必须下载JW Player的JS库,并在Web服务器上部署一个HTML页面。将下面的直播地址修改为你自己的应用名和流名。 

 

例如,如果你的直播流应用名为cclive,流的stream name 为myStream, 你使用JWPlayer 5.x时使用的页面代码看起来如下所示:

 

 

 

使用JWPlayer 6时,页面代码可能如下所示: 

 

 

使用Flowplayer (RTMP and Adobe HDS/San Jose)

 

Flowplayer 可以播放RTMP 和 Adobe HDS (San Jose) 流中的字幕(要使用合适的字幕和流插件)。 

 

你必须下载Flowplayer JS库,并在Web服务器上部署一个页面。 并将下面的直播地址修改为你自己的应用名和流名。 

 

例如,如果你的直播流应用名为cclive ,流的stream name 为myStream, 你的页面代码看起来如下所示:

 

北京哲想软件有限公司