这个例子是一个IMediaStreamNameAliasProvider2接口的实现,它提供了一个基本的框架,当Wowza Streaming Engine接收到一个播放请求后,它可以拦截这个请求并将流的名字(Stream Name)或者说路径修改为另一个名字。
这个接口提供了几个resolvePlayAlias方法,当播放器每一次开始播放一个流时,根据不同协议,就会触发其中一个resolvePlayAlias方法。 播放请求中的Stream name会被传递到这个方法中,并返回一个新的Stream Name
这个接口还提供了几个resolveStreamAlias方法,当你用Wowza StreamingEngine Manager管理界面、StartUpStreams.xml 或 MediaCaster API 去启动一个MediaCaster(Wowza Streaming Engine的一个内部负责从远端拉流的模块)类型的流时,系统会调用这些方法。当你在使用Live repeater、SHOUTcast/IceCast re-streaming 以及 RTSP/RTP re-streaming 功能时,系统会用到这个功能。它通常被用于将一个复杂、较长的流地址转变为一个简单而短小的流名字。 例如你要拉一个SHOUTcast音乐流,Url地址是http://192.168.1.7/myradiostation ,那么你可以创建一个别名,叫做myradiostation。 你可以用这个新的别名代指这个SHOUTcast流。
注意:在使用SMIL文件配置的多码率流时,smil的名字会先被解析,然后才会继续解析Smil里面的每一个流的名字。
注意: 在你使用了IMediaStreamNameAliasProvider2接口后,就不能使用Wowza StreamNameAlias模块或.stream文件,因为它们本来就是这个IMediaStreamNameAliasProvider2的一个实现。
注意: 这个功能只能改写流的名字(stream name),它不会去做重定向之类的事。
package com.wowza.wms.example.module;
import com.wowza.wms.application.*;
import com.wowza.wms.client.IClient;
importcom.wowza.wms.httpstreamer.model.IHTTPStreamerSession;
importcom.wowza.wms.mediacaster.IMediaCaster;
import com.wowza.wms.module.*;
import com.wowza.wms.rtp.model.RTPSession;
import com.wowza.wms.stream.IMediaStream;
importcom.wowza.wms.stream.IMediaStreamNameAliasProvider2;
importcom.wowza.wms.stream.livepacketizer.ILiveStreamPacketizer;
public class ModuleStreamNameAliasExampleextends ModuleBase implements IMediaStreamNameAliasProvider2 {
publicvoid onAppStart(IApplicationInstance appInstance) {
Stringfullname = appInstance.getApplication().getName() + "/"
+appInstance.getName();
getLogger().info("onAppStart:" + fullname);
appInstance.setStreamNameAliasProvider(this);
}
publicString resolvePlayAlias(IApplicationInstance appInstance,
Stringname, IClient client) {
getLogger().info("ResolvePlay Flash: " + name);
returnname;
}
publicString resolvePlayAlias(IApplicationInstance appInstance,
Stringname, IHTTPStreamerSession httpSession) {
getLogger().info("ResolvePlay HTTPSession: " + name);
returnname;
}
publicString resolvePlayAlias(IApplicationInstance appInstance,
Stringname, RTPSession rtpSession) {
getLogger().info("ResolvePlay RTPSession: " + name);
returnname;
}
publicString resolvePlayAlias(IApplicationInstance appInstance,
Stringname, ILiveStreamPacketizer liveStreamPacketizer) {
getLogger().info("ResolvePlay LiveStreamPacketizer: " + name);
returnname;
}
publicString resolveStreamAlias(IApplicationInstance appInstance,
Stringname, IMediaCaster mediaCaster) {
getLogger().info("ResolveStream Mediacaster: " + name);
returnname;
}
publicString resolvePlayAlias(IApplicationInstance appInstance, String name) {
getLogger().info("ResolvePlay: " + name);
returnname;
}
publicString resolveStreamAlias(IApplicationInstance appInstance,
Stringname) {
getLogger().info("ResolveStream: " + name);
returnname;
}
}
将以上代码编译后,在/conf/[app-name]/Application.xml文件的列表中添加下面的Module:
ModuleStreamNameAliasExample
ModuleStreamNameAliasExample
com.wowza.wms.example.module.ModuleStreamNameAliasExample
Wowza Streaming Engine 4是业界功能全面、API接口丰富的流媒体Server产品,采用它作为流媒体服务器产品的案例很多,直播、在线教育、IPTV都有它的用武之地。