This example module dynamically switches between native RTP and MPEG-TS delivery when streaming out of Wowza Streaming Engine™ using RTSP. Adding the query parameter ?mpegts to the RTSP URL will force the session to MPEG-TS. An example scenario for this module is if you want to use one application to stream to mobile devices over RTP and to have set-top boxes request MPEG-TS.
package com.wowza.wms.plugin.test.module; import com.wowza.wms.module.*; import com.wowza.wms.application.*; import com.wowza.wms.rtp.model.*; import com.wowza.wms.rtsp.*; public class ModuleRTSPTransportSwitcher extends ModuleBase { IApplicationInstance appInstance = null; class TransportSwitcher implements IRTSPActionNotify { public void onDescribe(RTPSession rtspSession, RTSPRequestMessage req, RTSPResponseMessages resp) { while(true) { RTPStream rtpStream = rtspSession.getRTSPStream(); if (rtpStream == null) break; boolean isForceMPEGTS = false; String queryStr = rtspSession.getQueryStr(); if (queryStr != null) isForceMPEGTS = queryStr.toLowerCase().contains("mpegts"); getLogger().info("ModuleRTSPTransportSwitcher#TransportSwitcher.onDescribe["+appInstance.getContextStr()+"]: mpegts:"+isForceMPEGTS+" context:"+req.getHeader("context")); rtpStream.setForceMPEGTSOut(isForceMPEGTS); break; } } public void onAnnounce(RTPSession rtspSession, RTSPRequestMessage req, RTSPResponseMessages resp) { } public void onSetParameter(RTPSession rtspSession, RTSPRequestMessage req, RTSPResponseMessages resp) { } public void onGetParameter(RTPSession rtspSession, RTSPRequestMessage req, RTSPResponseMessages resp) { } public void onOptions(RTPSession rtspSession, RTSPRequestMessage req, RTSPResponseMessages resp) { } public void onPause(RTPSession rtspSession, RTSPRequestMessage req, RTSPResponseMessages resp) { } public void onPlay(RTPSession rtspSession, RTSPRequestMessage req, RTSPResponseMessages resp) { } public void onRecord(RTPSession rtspSession, RTSPRequestMessage req, RTSPResponseMessages resp) { } public void onRedirect(RTPSession rtspSession, RTSPRequestMessage req, RTSPResponseMessages resp) { } public void onSetup(RTPSession rtspSession, RTSPRequestMessage req, RTSPResponseMessages resp) { } public void onTeardown(RTPSession rtspSession, RTSPRequestMessage req, RTSPResponseMessages resp) { } } public void onAppStart(IApplicationInstance appInstance) { getLogger().info("ModuleRTSPTransportSwitcher.onAppStart["+appInstance.getContextStr()+"]"); this.appInstance = appInstance; } public void onRTPSessionCreate(RTPSession rtpSession) { rtpSession.addActionListener(new TransportSwitcher()); } }
To add this module to Application.xml, edit [install-dir]/conf/[application]/Application.xml and add the following <Module> entry as the last entry in the <Modules> list:
<Module> <Name>ModuleRTSPTransportSwitcher</Name> <Description>ModuleRTSPTransportSwitcher</Description> <Class>com.wowza.wms.plugin.test.module.ModuleRTSPTransportSwitcher</Class> </Module>