请参考下面的代码:
注意: 这个例子中用到的API只能在Wowza Streaming Engine™ 4.0 及以上版本使用。
package com.wowza.wms.example; import com.wowza.wms.amf.AMFDataList; import com.wowza.wms.amf.AMFPacket; import com.wowza.wms.application.IApplicationInstance; import com.wowza.wms.client.IClient; import com.wowza.wms.module.ModuleBase; import com.wowza.wms.request.RequestFunction; import com.wowza.wms.stream.IMediaStream; import com.wowza.wms.stream.IMediaStreamLivePacketNotify; public class ModuleLiveFrameRate extends ModuleBase { class PacketListener implements IMediaStreamLivePacketNotify { /** * onLivePacket is called for every packet that is received for the live stream before the packet is processed for playback. * It is very important that this method returns quickly and is not delayed in any way. */ @Override public void onLivePacket(IMediaStream stream, AMFPacket packet) { if (packet.isVideo()) { // packet.getTimecode(); returns the elapsed time, in milliseconds, between this packet and the last packet of the same type. double fps = (double)1000 / packet.getTimecode(); stream.getProperties().setProperty("currentFPS", new Double(fps)); } } } private PacketListener packetListener = new PacketListener(); private IApplicationInstance appInstance; public void onAppStart(IApplicationInstance appInstance) { this.appInstance = appInstance; } public void onStreamCreate(IMediaStream stream) { stream.addLivePacketListener(packetListener); } public void onStreamDestroy(IMediaStream stream) { stream.removeLivePacketListener(packetListener); } public void getCurrentFPS(IClient client, RequestFunction function, AMFDataList params) { double fps = 0; String streamName = getParamString(params, PARAM1); if (streamName != null) { fps = getCurrentFPS(streamName); } sendResult(client, params, fps); } public double getCurrentFPS(String streamName) { double fps = 0; IMediaStream stream = appInstance.getStreams().getStream(streamName); if (stream != null) { fps = stream.getProperties().getPropertyDouble("currentFPS", fps); } return fps; } }