create live publishing streams on request from .net

I’d like to:

  1. have publishing points created on request by executing a command external to wowza

  2. communicate the new publishing point address to a user

  3. restrict access only to the user IP

  4. the user will push video and audio to wowza

4.1) broadcast with no restrictions the live stream

4.2) archive a copy in .mp4 format on the server

  1. destroy the publishing point at the end

The client will be running .NET, and push a live feed from a camera to wowza using directshow and a RTP/RTSP/RTMP renderer filter (still evaluating which to choose)

This is a possible solution I got after looking at the articles, but it seems this requires too much coding so maybe I’m missing something very big (“too much” when compared to the SDK offered by the old windows media server solution we are using now and are considering to replace)

1, 2, 5) expose a webservice from inside wowza like this https://www.wowza.com/docs/how-to-add-a-web-service-interface-to-wowza-media-server-and-integrate-with-net-dotnet

that would programmaticaly do the actions explained here https://www.wowza.com/docs/how-to-publish-and-play-a-live-stream-mpeg-ts-based-encoder (but I’m not yet sure how, any hints?)

  1. https://www.wowza.com/docs/how-to-limit-publishing-of-live-streams-by-ip-list

  2. In case of the RTP directshow filter: AVC+AAC > MPEG-TS > RTP > UDP

4.1 4.2) use an application with a StreamType live-record

Can you confirm this is correct and the best one when using wowza?

thanks

You will need to follow this guide to start an mpeg-ts stream.

It sounds like you might need help with this. You can post in the Find a Consultant Forum, or write to support@wowza.com and ask for the list of independent consultants.

Richard

It should work for MediaCaster streams too. The publish command runs when they are started. Is there a WARN line above the app-start x-event in the logs? That is where you see message about incorrectly loading Modules. Did you re-start Wowza after adding the collection .jar file?

Richard

Check the [wowza-install-dir]/lib folder to see if your project’s .jar file is there.

If you have updated Wowza, you might find it in the /lib folder of the previous install.

The easiest way to fix that in the IDE is delete the project’s build.xml, then delete the project (without deleting files), then create it again with the exact same name. You will get all your work back and the IDE will be lined up with the new install.

Richard

Hi,

I think the problem is the type of stream you are trying to protect.

The module will only protect against streams that are actively published to an application on Wowza using an RTMP connection. This type of connection does not require an action on Wowza to start the publishing. It could be extended to also work with RTSP encoders that use RTSP ANNOUNCE but it would not work with other publishers / encoder types where Wowza must request the stream or start a MediaCaster to receive it.

Your stream is from an mpeg-ts encoder and while it pushes the stream to a udp port on the Wowza server, Wowza needs to start a mediaCaster to be able to actually receive the stream. This can be automatically triggered when a player connects or manually with the Stream Manager or StartupStreams.xml

With mpeg-ts and some rtp streams, the encoder pushes the stream data to a udp port on the receiving server. With UDP, any computer in the world that can make a connection to a remote UDP port can send data to it. It is up to the receiving end to determine if it wants to do anything with that data. The only way you can prevent unwanted udp connections is to block them using a firewall or router. Using firewall rules, you can let the valid connections through and block or dump the invalid ones.

You can prevent someone publishing an mpeg-ts stream by removing the .stream file and shutting down the mediaCaster. If they know they are supposed to stop then they will normally shut down their encoder. If they won’t go away then the only thing you can do is block them in the firewall. That is not easy from within Wowza as it would require specific code however, there may be a third party method for controlling the firewall dynamically.

Roger.

thanks for the hint

I implemented everything but I can’t get 3) to work:

even with the unmodified module from wms-plugin-collection.jar the publish method is never called (“Overriding Publish” is not printed to console and nothing gets blocked).

Does the module presented in https://www.wowza.com/docs/how-to-limit-publishing-of-live-streams-by-ip-list work only when streaming from flash?

Thanks

there isn’t a warning when loading the ModuleOverridePublishRestrictIP module

yes, I restarted wowza after changing the config

conf\live\Application.xml (it’s based on the default live config, plus a couple of modules and the rtp IPs)

<Root>
	<Application>
		<!-- Uncomment to set application level timeout values
		<ApplicationTimeout>60000</ApplicationTimeout>
		<PingTimeout>12000</PingTimeout>
		<ValidationFrequency>8000</ValidationFrequency>
		<MaximumPendingWriteBytes>0</MaximumPendingWriteBytes>
		<MaximumSetBufferTime>60000</MaximumSetBufferTime>
		<MaximumStorageDirDepth>25</MaximumStorageDirDepth>
		-->
		<Connections>
			<AutoAccept>true</AutoAccept>
			<AllowDomains></AllowDomains>
		</Connections>
		<!--
			StorageDir path variables
			
			${com.wowza.wms.AppHome} - Application home directory
			${com.wowza.wms.ConfigHome} - Configuration home directory
			${com.wowza.wms.context.VHost} - Virtual host name
			${com.wowza.wms.context.VHostConfigHome} - Virtual host config directory
			${com.wowza.wms.context.Application} - Application name
			${com.wowza.wms.context.ApplicationInstance} - Application instance name
			
		-->
		<Streams>
			<StreamType>live</StreamType>
			<StorageDir>${com.wowza.wms.context.VHostConfigHome}/content</StorageDir>
			<KeyDir>${com.wowza.wms.context.VHostConfigHome}/keys</KeyDir>
			<!-- LiveStreamPacketizers (separate with commas): cupertinostreamingpacketizer, smoothstreamingpacketizer, sanjosestreamingpacketizer, mpegdashstreamingpacketizer, cupertinostreamingrepeater, smoothstreamingrepeater, sanjosestreamingrepeater, dvrstreamingpacketizer, dvrstreamingrepeater -->
			<LiveStreamPacketizers>cupertinostreamingpacketizer,smoothstreamingpacketizer,sanjosestreamingpacketizer</LiveStreamPacketizers>			
			<!-- Properties defined here will override any properties defined in conf/Streams.xml for any streams types loaded by this application -->
			<Properties>
			</Properties>
		</Streams>
		<Transcoder>
			<!-- To turn on transcoder set to: transcoder -->
			<LiveStreamTranscoder></LiveStreamTranscoder>
			<!-- [templatename].xml or ${SourceStreamName}.xml -->
			<Templates>${SourceStreamName}.xml,transrate.xml</Templates>
			<ProfileDir>${com.wowza.wms.context.VHostConfigHome}/transcoder/profiles</ProfileDir>
			<TemplateDir>${com.wowza.wms.context.VHostConfigHome}/transcoder/templates</TemplateDir>
			<Properties>
			</Properties>
		</Transcoder>
		<DVR>
			<!-- As a single server or as an origin, use dvrstreamingpacketizer in LiveStreamPacketizers above -->
			<!-- Or, in an origin-edge configuration, edges use dvrstreamingrepeater in LiveStreamPacketizers above -->
			<!-- As an origin, also add dvrchunkstreaming to HTTPStreamers below -->
			<!-- If this is a dvrstreamingrepeater, define Application/Repeater/OriginURL to point back to the origin -->
			
			<!-- To turn on DVR recording set Recorders to dvrrecorder.  This works with dvrstreamingpacketizer  -->
			<Recorders></Recorders>
			<!-- As a single server or as an origin, set the Store to dvrfilestorage-->
			<!-- edges should have this empty -->
			<Store></Store>
			<!--  Window Duration is length of live DVR window in seconds.  0 means the window is never trimmed. -->
			<WindowDuration>0</WindowDuration>
			<!-- Storage Directory is top level location where dvr is stored.  e.g. c:/temp/dvr -->
			<StorageDir>${com.wowza.wms.context.VHostConfigHome}/dvr</StorageDir>
			<!-- valid ArchiveStrategy values are append, version, delete -->
			<ArchiveStrategy>append</ArchiveStrategy>
			<!-- Properties for DVR -->
			<Properties>
			</Properties>
		</DVR>
		<TimedText>
			<!-- VOD caption providers (separate with commas): vodcaptionprovidermp4_3gpp, vodcaptionproviderttml, vodcaptionproviderwebvtt,  vodcaptionprovidersrt, vodcaptionproviderscc -->
			<VODTimedTextProviders>vodcaptionprovidermp4_3gpp</VODTimedTextProviders>
			
			<!-- Properties for TimedText -->
			<Properties>
			</Properties>		
		</TimedText>		
		<!-- HTTPStreamers (separate with commas): cupertinostreaming, smoothstreaming, sanjosestreaming, mpegdashstreaming, dvrchunkstreaming -->
		<HTTPStreamers>cupertinostreaming,smoothstreaming,sanjosestreaming</HTTPStreamers>
		<SharedObjects>
			<StorageDir></StorageDir>
		</SharedObjects>
		<Client>
			<IdleFrequency>-1</IdleFrequency>
			<Access>
				<StreamReadAccess>*</StreamReadAccess>
				<StreamWriteAccess>*</StreamWriteAccess>
				<StreamAudioSampleAccess></StreamAudioSampleAccess>
				<StreamVideoSampleAccess></StreamVideoSampleAccess>
				<SharedObjectReadAccess>*</SharedObjectReadAccess>
				<SharedObjectWriteAccess>*</SharedObjectWriteAccess>
			</Access>
		</Client>
		<RTP>
			<!-- RTP/Authentication/[type]Methods defined in Authentication.xml. Default setup includes; none, basic, digest -->
			<Authentication>
				<PublishMethod>digest</PublishMethod>
				<PlayMethod>none</PlayMethod>
			</Authentication>
			<!-- RTP/AVSyncMethod. Valid values are: senderreport, systemclock, rtptimecode -->
			<AVSyncMethod>senderreport</AVSyncMethod>
			<MaxRTCPWaitTime>12000</MaxRTCPWaitTime>
			<IdleFrequency>75</IdleFrequency>
			<RTSPSessionTimeout>90000</RTSPSessionTimeout>
			<RTSPMaximumPendingWriteBytes>0</RTSPMaximumPendingWriteBytes>
			<RTSPBindIpAddress>192.168.0.200</RTSPBindIpAddress>
			<RTSPConnectionIpAddress>192.168.0.200</RTSPConnectionIpAddress>
			<RTSPOriginIpAddress>192.168.0.200</RTSPOriginIpAddress>
			<IncomingDatagramPortRanges>*</IncomingDatagramPortRanges>
			<!-- Properties defined here will override any properties defined in conf/RTP.xml for any depacketizers loaded by this application -->
			<Properties>
			</Properties>
		</RTP>
		<MediaCaster>
			<RTP>
				<RTSP>
					<!-- udp, interleave -->
					<RTPTransportMode>interleave</RTPTransportMode>
				</RTSP>
			</RTP>
			<!-- Properties defined here will override any properties defined in conf/MediaCasters.xml for any MediaCasters loaded by this applications -->
			<Properties>
			</Properties>
		</MediaCaster>
		<MediaReader>
			<!-- Properties defined here will override any properties defined in conf/MediaReaders.xml for any MediaReaders loaded by this applications -->
			<Properties>
			</Properties>
		</MediaReader>
		<MediaWriter>
			<!-- Properties defined here will override any properties defined in conf/MediaWriter.xml for any MediaWriter loaded by this applications -->
			<Properties>
			</Properties>
		</MediaWriter>
		<LiveStreamPacketizer>
			<!-- Properties defined here will override any properties defined in conf/LiveStreamPacketizers.xml for any LiveStreamPacketizers loaded by this applications -->
			<Properties>
			</Properties>
		</LiveStreamPacketizer>
		<HTTPStreamer>
			<!-- Properties defined here will override any properties defined in conf/HTTPStreamers.xml for any HTTPStreamer loaded by this applications -->
			<Properties>
			</Properties>
		</HTTPStreamer>
		<Repeater>
			<OriginURL></OriginURL>
			<QueryString><![CDATA[]]></QueryString>
		</Repeater> 
		<Modules>
			<Module>
				<Name>base</Name>
				<Description>Base</Description>
				<Class>com.wowza.wms.module.ModuleCore</Class>
			</Module>
			<Module>
				<Name>properties</Name>
				<Description>Properties</Description>
				<Class>com.wowza.wms.module.ModuleProperties</Class>
			</Module>
			<Module>
				<Name>logging</Name>
				<Description>Client Logging</Description>
				<Class>com.wowza.wms.module.ModuleClientLogging</Class>
			</Module>
			<Module>
				<Name>flvplayback</Name>
				<Description>FLVPlayback</Description>
				<Class>com.wowza.wms.module.ModuleFLVPlayback</Class>
			</Module>
			<Module>
				<Name>OverridePublishLimitIP</Name>
				<Description>Override publish</Description>
				<Class>com.wowza.wms.plugin.collection.module.ModuleOverridePublishRestrictIP</Class>
			</Module>
			<Module>
				<Name>ThisDoesntExist</Name>
				<Description>ThisDoesntExist</Description>
				<Class>com.wowza.wms.plugin.collection.module.ThisDoesntExist</Class>
			</Module>
		</Modules>
		<!-- Properties defined here will be added to the IApplication.getProperties() and IApplicationInstance.getProperties() collections -->
		<Properties>
			<Property>
				<Name>ipList</Name>
				<Value>123.45.67.89</Value>
			</Property>
		</Properties>
	</Application>
</Root>

content\mpegts_2.stream

udp://0.0.0.0:10002

console log (it shows that it can’t load the “ThisDoesntExist” module, which means it is attempting to load the modules I specify there. I then started a live rtp stream, sent some data, and stopped receiving the stream)

Configure logging: file:///C:/Program Files (x86)/Wowza Media Systems/Wowza Media Server 3.6.2/conf/log4j.properties
INFO server server-start Wowza Media Server 3 Trial Edition (Expires: Sep 09, 2013) 3.6.2 build5334 -
INFO server comment - Server License Key: SVRT3-XXXXX-XXXXX-XXXXX-XXXXX-KKPwv
INFO server comment - Maximum Connections: Unlimited
INFO server comment - Transcoder Streams Available: Unlimited
INFO server comment - Transcoder Watermark: Yes
INFO server comment - nDVR Available: Yes
INFO server comment - DRM Available: Yes
INFO server comment - Hardware Available Processors: 4
INFO server comment - Hardware Physical Memory: 2384MB/16257MB
INFO server comment - Hardware Swap Space: 1440MB/16767MB
INFO server comment - Max File Descriptor Count: Unlimited
INFO server comment - OS Name: Windows 7
INFO server comment - OS Version: 6.1
INFO server comment - OS Architecture: amd64
INFO server comment - OS CPU: amd64
INFO server comment - Java Name: Java HotSpot(TM) 64-Bit Server VM
INFO server comment - Java Vendor: Oracle Corporation
INFO server comment - Java Version: 1.7.0_25
INFO server comment - Java VM Version: 23.25-b01
INFO server comment - Java Spec Version: 1.7
INFO server comment - Java Home: C:\Program Files\Java\jdk1.7.0_25\jre
INFO server comment - Java Max Heap Size: 682MB
INFO server comment - Java Architecture: 64
INFO server comment - Java Locale[user.language]: en
INFO server comment - Java Locale[user.country]: US
INFO server comment - Java Locale[user.variant]:
INFO server comment - Java Locale[file.encoding]: Cp1252
INFO server comment - Java Timezone[user.timezone]: America/New_York
INFO server comment - Java Args[0]: -Xmx768M
INFO server comment - Java Args[1]: -Dcom.sun.management.jmxremote=true
INFO server comment - Java Args[2]: -Dcom.wowza.wms.runmode=standalone
INFO server comment - Java Args[3]: -Dcom.wowza.wms.native.base=win
INFO server comment - Java Args[4]: -Dcom.wowza.wms.ConfigURL=
INFO server comment - Server runmode: standalone
INFO server comment - Server native.platform: win
INFO server comment - Server threads[h/t]: 10/10
INFO server comment - JMX java.rmi.server.hostname: localhost
INFO server comment - JMX bind attempt service:jmx:rmi://localhost:8084/jndi/rmi://localhost:8085/jmxrmi
INFO server comment - JMX password file: C:/Program Files (x86)/Wowza Media Systems/Wowza Media Server 3.6.2/conf/jmxremote.password
INFO server comment - JMX access file: C:/Program Files (x86)/Wowza Media Systems/Wowza Media Server 3.6.2/conf/jmxremote.access
INFO server comment - JMX bind successful
INFO server comment - CMDInterface now listening: [any]:8083
INFO vhost vhost-start _defaultVHost_ -
INFO server comment - _defaultVHost_ threads[h/t]:120/80 home:C:/Program Files (x86)/Wowza Media Systems/Wowza Media Server 3.6.2
INFO vhost comment _defaultVHost_ Bind attempt ([any]:1935:4)
INFO vhost comment _defaultVHost_ Bind successful ([any]:1935)
INFO vhost comment _defaultVHost_ Bind attempt ([any]:8086:1)
INFO vhost comment _defaultVHost_ Bind successful ([any]:8086)
INFO server comment - Server.startShutdownHook: Start server shutdown hook
INFO server comment - LTWebserviceModule.onServerInit: http://0.0.0.0:9091/ltwowzaserverws
INFO server comment - LTWebservice.bind: http://0.0.0.0:9091/ltwowzaserverws
INFO server comment - Wowza Media Server is started!
WARN server comment - loadModFunctions[live/_definst_]: Module class not found or could not be loaded. Check [install-dir]/conf/live/Application.xml t
o be sure all Modules/Module/Class paths are correct: name:ThisDoesntExist class:com.wowza.wms.plugin.collection.module.ThisDoesntExist
INFO application app-start _definst_ live/_definst_
INFO server comment - RTPMediaCaster.create[1575554065]
INFO server comment - RTPMediaCaster.init[1575554065]
INFO server comment - RTPMediaCaster.Reconnector[1575554065:live/_definst_:mpegts_2.stream]: start: 1
INFO server comment - HTTPStreamManager.onHTTPRequest: Publish stream successfully started [live/_definst_]: flv:mpegts_2.stream
INFO server comment - RTPSessionDescriptionDataProviderBasic.getStreamInfo[live/_definst_]: URI: udp://0.0.0.0:10002
INFO stream create - -
INFO server comment - RTPDePacketizerMPEGTS.init: Drop incomplete video frames
INFO server comment - RTPUDPTransport.bind[live/_definst_]: /0.0.0.0:10002
INFO stream publish mpegts_2.stream -
INFO server comment - RTPMediaCaster.Reconnector[1575554065:live/_definst_:mpegts_2.stream]: done: 1
INFO server comment - RTPMediaCaster.streamTimeout[1575554065:live/_definst_:mpegts_2.stream]: timeout:12000 diff:12002 reason:101
INFO server comment - RTPMediaCaster.resetConnection[1575554065:live/_definst_:mpegts_2.stream]:
INFO server comment - RTPMediaCaster.closeRTPSession[1575554065:live/_definst_:mpegts_2.stream]
INFO server comment - RTPUDPTransport.unbind[live/_definst_]: /0.0.0.0:10002 sent:0 recv:0
INFO stream unpublish mpegts_2.stream -
INFO stream destroy mpegts_2.stream -
INFO server comment - RTPMediaCaster.Reconnector[1575554065:live/_definst_:mpegts_2.stream]: start: 2
INFO server comment - RTPSessionDescriptionDataProviderBasic.getStreamInfo[live/_definst_]: URI: udp://0.0.0.0:10002
INFO stream create - -
INFO server comment - RTPDePacketizerMPEGTS.init: Drop incomplete video frames
INFO server comment - RTPUDPTransport.bind[live/_definst_]: /0.0.0.0:10002
INFO stream publish mpegts_2.stream -
INFO server comment - RTPMediaCaster.Reconnector[1575554065:live/_definst_:mpegts_2.stream]: done: 2
INFO server comment - RTPDePacketizerMPEGTS.handleRTPPacket: MPEG-TS over RTP
INFO server comment - [live/_definst_/mpegts_2.stream]: handleTransportStreamBlock: new MPTS.
INFO server comment - [live/_definst_/mpegts_2.stream]: MPEG2PATAssembler:MonitorStart
INFO server comment - [live/_definst_/mpegts_2.stream]: MPEG2MPTS:StartStream: PID: 0x0
INFO server comment - [live/_definst_/mpegts_2.stream]: Received PAT
INFO server comment - [live/_definst_/mpegts_2.stream]: PAT Version 0
INFO server comment - [live/_definst_/mpegts_2.stream]:         Program: 1 PMT PID: 0x3e8
INFO server comment - [live/_definst_/mpegts_2.stream]: MPEG2PMTAssembler:MonitorStart: PID: 1000 Program Number: 1
INFO server comment - [live/_definst_/mpegts_2.stream]: MPEG2MPTS:StartStream: PID: 0x3e8
INFO server comment - [live/_definst_/mpegts_2.stream]: Received new PMT
INFO server comment - [live/_definst_/mpegts_2.stream]: PMT: Version 0 PCR pid: 0x3e9
INFO server comment - [live/_definst_/mpegts_2.stream]:         Stream: Type: 0x1B PID: 0x3e9 Video
INFO server comment - [live/_definst_/mpegts_2.stream]:         Stream: Type: 0x0F PID: 0x3ea Audio
INFO server comment - [live/_definst_/mpegts_2.stream]: RTPDePacketizerMPEGTS.pmtAvailable: IMPORT: videoPID[prg:0xffffffff,pid:0x3e9,filter:none]: st
reamType:H264:27
INFO server comment - [live/_definst_/mpegts_2.stream]: MPEG2MPTS:StartStream: PID: 0x3e9
INFO server comment - [live/_definst_/mpegts_2.stream]: RTPDePacketizerMPEGTS.pmtAvailable: IMPORT: audioPID[prg:0x1,pid:0x3ea,filter:none]: streamTyp
e:AAC:15 audioLanguage:unknown
INFO server comment - [live/_definst_/mpegts_2.stream]: MPEG2MPTS:StartStream: PID: 0x3ea
INFO server comment - UDPTransport.firstPacket: bind:/0.0.0.0:10002 msg:/192.168.0.200:23466
INFO server comment - LiveStreamPacketizerSanJose.init[live/_definst_/mpegts_2.stream]: chunkDurationTarget: 10000
INFO server comment - LiveStreamPacketizerSanJose.init[live/_definst_/mpegts_2.stream]: chunkDurationTolerance: 500
INFO server comment - LiveStreamPacketizerSanJose.init[live/_definst_/mpegts_2.stream]: playlistChunkCount:4
INFO server comment - MediaStreamMap.getLiveStreamPacketizer: Create live stream packetizer: sanjosestreamingpacketizer:mpegts_2.stream
INFO server comment - SanJosePacketHandler.startStream[live/_definst_/mpegts_2.stream]
INFO server comment - LiveStreamPacketizerSanJose.handlePacket[live/_definst_/mpegts_2.stream]: Video codec: H264
INFO server comment - LiveStreamPacketizerSanJose.handlePacket[live/_definst_/mpegts_2.stream]: Audio codec: AAC
INFO server comment - LiveStreamPacketizerCupertino.init[live/_definst_/mpegts_2.stream]: chunkDurationTarget: 10000
INFO server comment - LiveStreamPacketizerCupertino.init[live/_definst_/mpegts_2.stream]: chunkDurationTolerance: 500
INFO server comment - LiveStreamPacketizerCupertino.init[live/_definst_/mpegts_2.stream]: audioGroupCount: 3
INFO server comment - LiveStreamPacketizerCupertino.init[live/_definst_/mpegts_2.stream]: playlistChunkCount:3
INFO server comment - MediaStreamMap.getLiveStreamPacketizer: Create live stream packetizer: cupertinostreamingpacketizer:mpegts_2.stream
INFO server comment - CupertinoPacketHandler.startStream[live/_definst_/mpegts_2.stream]
INFO server comment - LiveStreamPacketizerCupertino.handlePacket[live/_definst_/mpegts_2.stream]: Video codec:H264 isCompatible:true
INFO server comment - LiveStreamPacketizerCupertino.handlePacket[live/_definst_/mpegts_2.stream]: Audio codec:AAC isCompatible:true
INFO server comment - LiveStreamPacketizerCupertino.handlePacket[live/_definst_/mpegts_2.stream][avc1.66.30]: H.264 Video info: {H264CodecConfigInfo:
codec:H264, profile:Baseline, level:3.0, frameSize:720x404, displaySize:720x404, frameRate:30.0, PAR:1:1, crop: l:0 r:0 t:0 b:6}
INFO server comment - MediaStreamMap.getLiveStreamPacketizer: Create live stream packetizer: smoothstreamingpacketizer:mpegts_2.stream
INFO server comment - LiveStreamPacketizerSmoothStreaming.startStream[live/_definst_/mpegts_2.stream]
INFO server comment - LiveStreamPacketizerCupertino.handlePacket[live/_definst_/mpegts_2.stream][mp4a.40.2]: AAC Audio info: {AACFrame: codec:AAC, cha
nnels:2, frequency:24000, samplesPerFrame:1024, objectType:LC}
INFO server comment - LiveStreamPacketizerSmoothStreaming.handlePacket[live/_definst_/mpegts_2.stream]: Fragment durations: [1.1,1.1,1.1]
INFO server comment - LiveStreamPacketizerSmoothStreaming.flushPendingVideo: Bitrate[live/_definst_/mpegts_2.stream]: 1325512
INFO server comment - LiveStreamPacketizerSmoothStreaming.addFragment[live/_definst_/mpegts_2.stream]: Add chunk: type:video id:0 count:33 duration:11
00
INFO server comment - LiveStreamPacketizerSmoothStreaming.addFragment[live/_definst_/mpegts_2.stream]: Add chunk: type:video id:1 count:33 duration:11
00
INFO server comment - RTPMediaCaster.shutdown[1575554065:live/_definst_:mpegts_2.stream]: mpegts_2.stream
INFO server comment - RTPMediaCaster.disconnect[1575554065:live/_definst_:mpegts_2.stream]
INFO server comment - RTPMediaCaster.closeRTPSession[1575554065:live/_definst_:mpegts_2.stream]
INFO server comment - RTPUDPTransport.unbind[live/_definst_]: /0.0.0.0:10002 sent:0 recv:765
INFO stream unpublish mpegts_2.stream -
INFO stream destroy mpegts_2.stream -
INFO server comment - MediaStreamMap.removeLiveStreamPacketizer[live/_definst_/mpegts_2.stream]: Destroy live stream packetizer: smoothstreamingpacket
izer
INFO server comment - MediaStreamMap.removeLiveStreamPacketizer[live/_definst_/mpegts_2.stream]: Destroy live stream packetizer: cupertinostreamingpac
ketizer
INFO server comment - MediaStreamMap.removeLiveStreamPacketizer[live/_definst_/mpegts_2.stream]: Destroy live stream packetizer: sanjosestreamingpacke
tizer
INFO server comment - HTTPStreamManager.onHTTPRequest: Publish stream successfully stopped [live/_definst_]: mpegts_2.stream

this is a new installation

to troubleshoot this issue with the ModuleOverridePublishRestrictIP sample I’m using the unmodified wms-plugin-collection.jar I found in WowzaServerAddOnCollection.zip

another .jar (LTWebcast.jar) I built with the IDE loads correctly (it’s a ServerListener in Server.xml)

wms-plugin-collection.jar is in the same directory http://imgkk.com/i/4evz.png , is loaded by the live\Application.xml but publish doesn’t get called when starting publishing

thanks for the detailed explanation