注意:需要Wowza Media Server® 3.0.0 及更高版本的支持。
新版的IMediaStreamActionNotify 接口IMediaStreamActionNotify3 增加了对以下功能的支持:
Code:
voidonCodecInfoVideo(IMediaStream stream, MediaCodecInfoVideo codecInfoVideo);
voidonCodecInfoAudio(IMediaStream stream, MediaCodecInfoAudio codecInfoAudio);
这个新的事件将监听音视频流的编码信息。
Code:
package test;
importcom.wowza.wms.amf.*;
importcom.wowza.wms.application.*;
importcom.wowza.wms.module.*;
importcom.wowza.wms.stream.*;
importcom.wowza.wms.media.model.*;
public classModuleMediaStreamActionNotify3Example extends ModuleBase
{
class StreamListener implementsIMediaStreamActionNotify3
{
public voidonMetaData(IMediaStream stream, AMFPacket metaDataPacket)
{
System.out.println("onMetaData["+ stream.getContextStr() + "]: " + metaDataPacket.toString());
}
public voidonPauseRaw(IMediaStream stream, boolean isPause, double location)
{
System.out.println("onPauseRaw["+ stream.getContextStr() + "]: isPause:" + isPause + " location:"+ location);
}
public void onPause(IMediaStreamstream, boolean isPause, double location)
{
System.out.println("onPause["+ stream.getContextStr() + "]: isPause:" + isPause + "location:" + location);
}
public void onPlay(IMediaStreamstream, String streamName, double playStart, double playLen, int playReset)
{
System.out.println("onPlay["+ stream.getContextStr() + "]: playStart:" + playStart + "playLen:" + playLen + " playReset:" + playReset);
}
public void onPublish(IMediaStreamstream, String streamName, boolean isRecord, boolean isAppend)
{
System.out.println("onPublish["+ stream.getContextStr() + "]: isRecord:" + isRecord + "isAppend:" + isAppend);
}
public void onSeek(IMediaStreamstream, double location)
{
System.out.println("onSeek["+ stream.getContextStr() + "]: location:" + location);
}
public void onStop(IMediaStreamstream)
{
System.out.println("onStop["+ stream.getContextStr() + "]: ");
}
public void onUnPublish(IMediaStreamstream, String streamName, boolean isRecord, boolean isAppend)
{
System.out.println("onUnPublish["+ stream.getContextStr() + "]: streamName:" + streamName + "isRecord:" + isRecord + " isAppend:" + isAppend);
}
public voidonCodecInfoAudio(IMediaStream stream,
MediaCodecInfoAudiocodecInfoAudio) {
System.out.println("onCodecInfoAudio["+ stream.getContextStr() + " Audio Codec" +codecInfoAudio.toCodecsStr() + "]: ");
}
public voidonCodecInfoVideo(IMediaStream stream,
MediaCodecInfoVideocodecInfoVideo) {
System.out.println("onCodecInfoVideo["+ stream.getContextStr() + " Video Codec" +codecInfoVideo.toCodecsStr() + "]: ");
}
}
public void onStreamCreate(IMediaStreamstream)
{
getLogger().info("onStreamCreate["+stream+"]:clientId:" + stream.getClientId());
IMediaStreamActionNotify2actionNotify = new StreamListener();
WMSProperties props =stream.getProperties();
synchronized (props)
{
props.put("streamActionNotifier",actionNotify);
}
stream.addClientListener(actionNotify);
}
public void onStreamDestroy(IMediaStreamstream)
{
getLogger().info("onStreamDestroy["+stream+"]:clientId:" + stream.getClientId());
IMediaStreamActionNotify2 actionNotify= null;
WMSProperties props =stream.getProperties();
synchronized (props)
{
actionNotify =(IMediaStreamActionNotify2)stream.getProperties().get("streamActionNotifier");
}
if (actionNotify != null)
{
stream.removeClientListener(actionNotify);
getLogger().info("removeClientListener:" + stream.getSrc());
}
}
}
Wowza Streaming Engine 4是业界功能强大、API接口丰富的流媒体Server产品,采用它作为流媒体服务器产品的案例很多,直播、在线教育、IPTV都有它的用武之地。