多协议、性能稳定、丰富API的流媒体服务器软件
如何为Wowza Stream Engine 4的直播业务配置类似电视台的节目编排表?
Wowza Streaming Engine™软件中有一个附加的可选模块,叫做StreamPublisher,它原来是在可选功能模块集合中的,现在Wowza把它单独打包了(附带源代码),你可以根据自己的需求进行任意改写。

这个模块可以让你用Wowza Server Listener 和Wowza Module两种方式实现类似于电视台直播节目的编排功能,以电视台为例,你可以有多个直播频道(在这里你也可以理解为虚拟直播频道),然后有很多节目内容,你可以设置某个频道在什么时间播放什么节目。 这就会形成一个节目播出计划的编排表,每个节目都有开始播放时间和结束时间。

当一个播出计划表的播出时间到达时,如果当前频道已经在播出另一个播出计划表的内容,那么这个频道会立刻切换到这个新的播出计划表的内容上。如果一个播出计划表的时间已经过去了,那么这个播出计划表中的内容会被立即播出。

安装


  1. 下载wse-plugin-streampublisher.zip

  2. 解压下载的zip文件,将lib/wse-plugin-streampublisher.jar文件拷贝到Wowza安装目录下的lib文件夹下(即[install-dir]/lib目录)。

  3. 重新启动Wowza Streaming Engine。
注意:在这个StreamPublisher模块中,还包含一个叫做ModuleLoopUntilLive的可选模块,这个模块可以检测到直播信号的中断和恢复(编码器是否有实时流进入Wowza服务器?没有则意味着中断,有则意味着恢复),然后在中断时,由本地内容组成的虚拟直播代替实际的直播信号,在恢复时,又继续采用实际直播信号的数据。 要了解更多,请参考在直播流中断时,如何循环播放一些本地广告内容(ModuleLoopUntilLive)?

配置


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参数设置为要开始播放的时间。如果这个时间已经过了,直播流将立即播放这个直播列表中的内容。

重新加载节目编排表


要重新加载某一个应用的节目编排表,这个应用必须配置ModuleStreamPublisher模块。在重新加载之前,你可以根据需求对SMIL文件做一些更新。


播放



你可以用你希望的任何播放器播放SMIL文件中定义的直播流,只要使用SMIL文件中的Stream name即可。