这个模块可以让你用Wowza Server Listener 和Wowza Module两种方式实现类似于电视台直播节目的编排功能,以电视台为例,你可以有多个直播频道(在这里你也可以理解为虚拟直播频道),然后有很多节目内容,你可以设置某个频道在什么时间播放什么节目。 这就会形成一个节目播出计划的编排表,每个节目都有开始播放时间和结束时间。
当一个播出计划表的播出时间到达时,如果当前频道已经在播出另一个播出计划表的内容,那么这个频道会立刻切换到这个新的播出计划表的内容上。如果一个播出计划表的时间已经过去了,那么这个播出计划表中的内容会被立即播出。
安装
- 下载wse-plugin-streampublisher.zip。
- 解压下载的zip文件,将lib/wse-plugin-streampublisher.jar文件拷贝到Wowza安装目录下的lib文件夹下(即[install-dir]/lib目录)。
- 重新启动Wowza Streaming Engine。
配置
ServerListenerStreamPublisher Server Lisener和ModuleStreamPublisher应用模块是实现直播编排表功能的两种方式。它们可以一起配合使用,也可以分开独自使用,具体看你的需求。
1、Server listener: 当Wowza Streaming Engine启动后,ServerListenerStreamPublisher server listener 会加载指定应用(application)下的节目编排表,然后其中的频道(也就是一个stream)就会保持运行直到服务器被关闭。但是在这个过程中,如果SMIL文件中的编排信息有修改,这个server listener无法重新加载SMIL文件中的节目编排信息。
2、Application module: ModuleStreamPublisher 应用模块可以被用在任何一个应用(application)上,在这个应用启动时加载这个应用的节目编排表信息,在这个应用被关闭时丢弃直播流。SMIL文件在修改后可以被重新加载。 它也可以用在每一个独立的应用上,为每一个应用提供自己的节目编排表。此外,这个模块还可以为配置在server listener中的SMIL文件提供重新加载的功能。另外要注意的是,每一个要使用节目编排表功能的应用(application)的Stream Type都必须是live类型的。
注意:一个应用通常是在直播流被请求时动态加载。但如果节目编排表必须在Wowza Streaming Engine 启动时加载,你可以用一个单独的server listener 来在服务器启动时加载多个应用。请阅读How to use a ServerListener to load and lock an appinstance (IServerNotify2) 获得更多细节。
1、server listener的配置
要启用ServerListenerStreamPublisher,请按下面Java类路径为Wowza Streaming Engine添加Server Lisener:
完整的Java类包名 |
com.wowza.wms.plugin.streampublisher.ServerListenerStreamPublisher |
2、Module 的配置
配置这个Module,请按下面信息为你的Wowza应用添加自定义Module。
Name |
Description |
Fully Qualified Class Name |
streamPublisher | Schedules streams and playlists. | com.wowza.wms.plugin.streampublisher.ModuleStreamPublisher |
一些参数配置
1、Server 层面的参数
下面的参数是针对Server层面的参数,它定义了Server Lisener要把节目编排表加到到哪一个Wowza应用上。当你采用streamPublisher模块方式时,这一步可以跳过。
Path |
Name |
Type |
Value |
Notes |
/Root/Server | streamPublisherVHost | String | _defaultVHost_ | Vhost的名字,默认是_defaultVHost_) |
/Root/Server | streamPublisherApplication | String | live/_definst_ | Wowza应用及实例的名字(默认: live/_definst_) |
2、Application层面的参数
注意:下面的参数,既可以配置在Server层面,也可以配置在Application层面。如果两个层面都有设置,则最终生效的是配置在Application层面的参数。
注意:在下面表格中的Path列,/Root/Server对应Server层面的参数,/Root/Application对应Application层面的参数。
Path |
Name |
Type |
Value |
Notes |
/Root/Server -或- /Root/Application |
streamPublisherSmilFile | String | streamschedule.smil | 这个应用使用的编排表的SMIL文件的名字,这个SMIL文件必须存放在应用的内容存储目录。(默认值: streamschedule.smil) |
/Root/Server -或- /Root/Application |
streamPublisherPassMetaData | Boolean | true | 如果设置为true,视频内容的元数据(metadata)会被加载到直播流中。(默认值: true) |
/Root/Server -或- /Root/Application |
streamPublisherSwitchLog | Boolean | true | 如果设置为true,当每次切换节目时都会产生一个Log。如果设置为false将不会生成Log。(默认值: true) |
制作节目编排表
注意:
- 每一个Wowza应用加载的节目编排表都必须有自己的SMIL文件。SMIL文件的名字定义在streamPublisherSmilFile参数中。并且这个SMIL文件必须保存在应用的内容存储路径,这个路径在Application的配置文件中是可以配置的。
- 你不能用Wowza Streaming Engine Manager管理界面来编辑SMIL文件,因为这个SMIL文件中的一些Tag,Wowza Streaming Engine Manager是无法识别的,因此你必须自己用文本编辑器来编辑这个SMIL文件。
下面,我们开始用SMIL文件来配置编排表
请您先仔细查看下面这个SMIL文件的例子,应该很容易理解:
<smil> <head> </head> <body> <stream name="Stream1"></stream> <stream name="Stream2"></stream> <playlist name="pl1" playOnStream="Stream1" repeat="true" scheduled="2013-09-25 16:00:00"> <video src="mp4:sample.mp4" start="5" length="5"/> <video src="mp4:sample.mp4" start="50" length="5"/> <video src="mp4:sample.mp4" start="150" length="5"/> </playlist> <playlist name="pl2" playOnStream="Stream1" repeat="true" scheduled="2013-09-25 16:30:00"> <video src="mp4:sample.mp4" start="0" length="-1"/> </playlist> <playlist name="pl3" playOnStream="Stream2" repeat="true" scheduled="2013-09-25 16:00:00"> <video src="mp4:sample.mp4" start="30" length="5"/> </playlist> </body> </smil>
下面对这个SMIL文件略作解释说明:
- SMIL文件中的Stream1和Stream2就是两个直播频道的Stream Name
- 对于实时流的直播源,使用-2作为start参数的值。
- 对于VOD文件,可以使用0或任意正数作为start 参数的值。这个整数是以秒为单位的,从这个数值开始的位置播放视频。
- 如果要播放一个视频源并一直到它结束,请使用-1作为length参数的值。任何整数都将导致播放这些秒数的时间。
- 要循环播放时,请将repeat设置为true。将repeat设置为false将会导致当播放列表中的内容播放完毕后,直播流被关闭。在这之后,播放列表不会再被加载了,除非它在结束之前又被开始加载。
- 将scheduled参数设置为要开始播放的时间。如果这个时间已经过了,直播流将立即播放这个直播列表中的内容。