Wowza Community

CupertinoMediaCasterConnection

Hello

We print the main source broadcasts to the wowza stream file with the wowza api service we have written, we print instant 1 to 20 source live broadcasts and get hls output, the duration of our source live broadcasts takes a maximum of 2 hours, the broadcasts we print from wowza constantly freeze, while the main source broadcast does not freeze at all,

I tried all the transcode options one by one, Transcode Transrate H265
There is no setting option left that I did not change in the performance tuning values
There is no value that I have not tried in the live application features, but the broadcasts are constantly cut off or freeze at 1-2 second intervals,

No matter what I did, I could not fix these errors in the logs,
I have a license, I am writing to support. Even though I send all the logs to whatever is requested, they are answered within 48 hours, but they are given evasive answers.

Error logs:

server feature:
Intel Xeon Processor E5-2650 v3 10 Core 25MB Cache 2.30GHz
1TB SSD
64GB Ram
1gbps

About Wowza Streaming Engine
Wowza Streaming Engine Version
4.8.17+1 (build 20211216162410)
Wowza Streaming Engine Manager Version
4.8.17+1 (build 20211216162410)
License
Wowza Streaming Engine 4 Subscription Edition
OS Windows Server 2016 (amd64)
Java Information
Java Version
9.0.4
Java VM Version
9.0.4+11
Java Architecture
64
Java Name
OpenJDK 64-Bit Server VM
Java Vendor
Oracle Corporation
Java Home
C:\Program Files (x86)\Wowza Media Systems\Wowza Streaming Engine 4.8.17+1\jre
Java Max Heap Size
32768MB

Java Garbage Collection Settings,
default
G1 (Garbage First) collector (recommended)
-XX:+UseParallelGC -XX:+UseNUMA
-XX:+UseG1GC -XX:MaxGCPauseMillis=100

Java Garbage Collection Settings, I tried 3 options, unfortunately I keep getting the same errors, exactly what values ​​do I need to change in order to use full according to this server feature. I would appreciate if there is a friend who understands wowza configuration that can help.

Blockquote Single Live conf/applicaationlive Application.xml

live Live true <!-- 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 home directory
		${com.wowza.wms.context.Application} - Application name
		${com.wowza.wms.context.ApplicationInstance} - Application instance name
		
	-->
	<Streams>
		<StreamType>live-record-lowlatency</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, mpegdashstreamingrepeater, dvrstreamingpacketizer, dvrstreamingrepeater -->
		<LiveStreamPacketizers>cupertinostreamingpacketizer, mpegdashstreamingpacketizer</LiveStreamPacketizers>
		<!-- Properties defined here will override any properties defined in conf/Streams.xml for any streams types loaded by this application -->
		<Properties>
			<Property>
				<Name>onFlushNotifyClients</Name>
				<Value>true</Value>
				<Type>Boolean</Type>
			</Property>
			<Property>
				<Name>sortPackets</Name>
				<Value>false</Value>
				<Type>Boolean</Type>
			</Property>
			<Property>
				<Name>sortBufferSize</Name>
				<Value>8000</Value>
				<Type>Integer</Type>
			</Property>
			<Property>
				<Name>instantOn</Name>
				<Value>true</Value>
				<Type>Boolean</Type>
			</Property>
			<Property>
				<Name>instantOnBufferTime</Name>
				<Value>8100</Value>
				<Type>Integer</Type>
			</Property>
			<Property>
				<Name>enhancedTimeCodes</Name>
				<Value>true</Value>
				<Type>Boolean</Type>
			</Property>
		</Properties>
	</Streams>
	<Transcoder>
		<!-- To turn on transcoder set to: transcoder -->
		<LiveStreamTranscoder>transcoder</LiveStreamTranscoder>
		<!-- [templatename].xml or ${SourceStreamName}.xml -->
		<Templates>${SourceStreamName}.xml,transcode-h265.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></VODTimedTextProviders>
		<!-- Properties for TimedText -->
		<Properties>
		</Properties>
	</TimedText>
	<!-- HTTPStreamers (separate with commas): cupertinostreaming, smoothstreaming, sanjosestreaming, mpegdashstreaming, dvrchunkstreaming -->
	<HTTPStreamers>cupertinostreaming, mpegdashstreaming</HTTPStreamers>
	<MediaCache>
		<MediaCacheSourceList></MediaCacheSourceList>
	</MediaCache>
	<SharedObjects>
		<StorageDir>${com.wowza.wms.context.VHostConfigHome}/applications/${com.wowza.wms.context.Application}/sharedobjects/${com.wowza.wms.context.ApplicationInstance}</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></RTSPBindIpAddress>
		<RTSPConnectionIpAddress>0.0.0.0</RTSPConnectionIpAddress>
		<RTSPOriginIpAddress>127.0.0.1</RTSPOriginIpAddress>
		<IncomingDatagramPortRanges>*</IncomingDatagramPortRanges>
		<!-- Properties defined here will override any properties defined in conf/RTP.xml for any depacketizers loaded by this application -->
		<Properties>
			<Property>
				<Name>mpegtsVideoIsAligned</Name>
				<Value>false</Value>
				<Type>Boolean</Type>
			</Property>
			<Property>
				<Name>mpegtsAudioIsAligned</Name>
				<Value>false</Value>
				<Type>Boolean</Type>
			</Property>
		</Properties>
	</RTP>
	<WebRTC>
		<!--  Enable WebRTC publishing to this application -->
		<EnablePublish>true</EnablePublish>
		<!-- Enable WebRTC playback from this application -->
		<EnablePlay>true</EnablePlay>
		<!--  Enable query of published stream names for this application -->
		<EnableQuery>true</EnableQuery>
		<!--  IP address, transport, and port used for WebRTC streaming. -->
		<!--TCP format: [wowza-streaming-engine-external-ip-address],tcp,[port] -->
		<!--UDP format: [wowza-streaming-engine-external-ip-address],udp -->
		<IceCandidateIpAddresses>91.232.31.166,tcp,1935|91.232.31.166,udp</IceCandidateIpAddresses>
		<!-- Local IP address of the network card you want to use for WebRTC UDP traffic -->
		<UDPBindAddress></UDPBindAddress>
		<!-- Comma-deliniated list of audio codecs, in order of preference, for stream ingestion -->
		<PreferredCodecsAudio>opus,pcmu,pcma</PreferredCodecsAudio>
		<!-- Comma-deliniated list of video codecs, in order of preference, for stream ingestion -->
		<PreferredCodecsVideo>h264,vp8,vp9</PreferredCodecsVideo>
		<!-- Enable WebRTC debug logging -->
		<DebugLog>false</DebugLog>
		<!-- Properties for WebRTC -->
		<Properties>
		</Properties>
	</WebRTC>
	<MediaCaster>
		<RTP>
			<RTSP>
				<!-- udp, interleave -->
				<RTPTransportMode>interleave</RTPTransportMode>
			</RTSP>
		</RTP>
		<StreamValidator>
			<Enable>true</Enable>
			<ResetNameGroups>false</ResetNameGroups>
			<StreamStartTimeout>20000</StreamStartTimeout>
			<StreamTimeout>12000</StreamTimeout>
			<VideoStartTimeout>0</VideoStartTimeout>
			<VideoTimeout>0</VideoTimeout>
			<AudioStartTimeout>0</AudioStartTimeout>
			<AudioTimeout>0</AudioTimeout>
			<VideoTCToleranceEnable>true</VideoTCToleranceEnable>
			<VideoTCPosTolerance>3000</VideoTCPosTolerance>
			<VideoTCNegTolerance>-500</VideoTCNegTolerance>
			<AudioTCToleranceEnable>true</AudioTCToleranceEnable>
			<AudioTCPosTolerance>3000</AudioTCPosTolerance>
			<AudioTCNegTolerance>-500</AudioTCNegTolerance>
			<DataTCToleranceEnable>true</DataTCToleranceEnable>
			<DataTCPosTolerance>3000</DataTCPosTolerance>
			<DataTCNegTolerance>-500</DataTCNegTolerance>
			<AVSyncToleranceEnable>true</AVSyncToleranceEnable>
			<AVSyncTolerance>1500</AVSyncTolerance>
			<DebugLog>true</DebugLog>
		</StreamValidator>
		<!-- 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>
			<Property>
				<Name>cupertinoChunkDurationTarget</Name>
				<Value>10000</Value>
				<Type>Integer</Type>
			</Property>
			<Property>
				<Name>cupertinoMaxChunkCount</Name>
				<Value>10</Value>
				<Type>Integer</Type>
			</Property>
			<Property>
				<Name>cupertinoPlaylistChunkCount</Name>
				<Value>3</Value>
				<Type>Integer</Type>
			</Property>
			<Property>
				<Name>debugAACTimecodes</Name>
				<Value>true</Value>
				<Type>Boolean</Type>
			</Property>
			<Property>
				<Name>debugMP3Timecodes</Name>
				<Value>true</Value>
				<Type>Boolean</Type>
			</Property>
			<Property>
				<Name>cupertinoMinPlaylistChunkCount</Name>
				<Value>3</Value>
				<Type>Integer</Type>
			</Property>
			<Property>
				<Name>cupertinoCalculateChunkIDBasedOnTimecode</Name>
				<Value>true</Value>
				<Type>Boolean</Type>
			</Property>
			<Property>
				<Name>cupertinoForceEndChunkWhenNoKeyframes</Name>
				<Value>true</Value>
				<Type>Boolean</Type>
			</Property>
			<Property>
				<Name>cupertinoChunkDurationOverflowThreshold</Name>
				<Value>50000</Value>
				<Type>Integer</Type>
			</Property>
		</Properties>
	</LiveStreamPacketizer>
	<HTTPStreamer>
		<!-- Properties defined here will override any properties defined in conf/HTTPStreamers.xml for any HTTPStreamer loaded by this applications -->
		<Properties>
			<Property>
				<Name>cupertinoEnableProgramDateTime</Name>
				<Value>true</Value>
				<Type>Boolean</Type>
			</Property>
			<Property>
				<Name>requestTimeout</Name>
				<Value>20000</Value>
				<Type>Integer</Type>
			</Property>
			<Property>
				<Name>newSessionTimeout</Name>
				<Value>16000</Value>
				<Type>Integer</Type>
			</Property>
			<Property>
				<Name>validSessionTimeout</Name>
				<Value>2500</Value>
				<Type>Integer</Type>
			</Property>
		</Properties>
	</HTTPStreamer>
	<Manager>
		<!-- Properties defined are used by the Manager -->
		<Properties>
		</Properties>
	</Manager>
	<Repeater>
		<OriginURL></OriginURL>
		<QueryString></QueryString>
	</Repeater>
	<StreamRecorder>
		<Properties>
		</Properties>
	</StreamRecorder>
	<Modules>
		<Module>
			<Name>base</Name>
			<Description>Base</Description>
			<Class>com.wowza.wms.module.ModuleCore</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>ModuleCoreSecurity</Name>
			<Description>Core Security Module for Applications</Description>
			<Class>com.wowza.wms.security.ModuleCoreSecurity</Class>
		</Module>
		<Module>
			<Name>ModulePushPublish</Name>
			<Description>ModulePushPublish</Description>
			<Class>com.wowza.wms.pushpublish.module.ModulePushPublish</Class>
		</Module>
	</Modules>
	<!-- Properties defined here will be added to the IApplication.getProperties() and IApplicationInstance.getProperties() collections -->
	<Properties>
		<Property>
			<Name>securityPublishRequirePassword</Name>
			<Value>true</Value>
			<Type>Boolean</Type>
		</Property>
		<Property>
			<Name>pushPublishMapPath</Name>
			<Value>${com.wowza.wms.context.VHostConfigHome}/conf/${com.wowza.wms.context.Application}/PushPublishMap.txt</Value>
			<Type>String</Type>
		</Property>
	</Properties>
	<ApplicationTimeout>0</ApplicationTimeout>
	<PingTimeout>0</PingTimeout>
</Application>

Transcoding is a resource-intensive process. With the server specs that you specified you can maybe transcoder 2-5 streams concurrently, depending on the transcoding profile. Have a look at the CPU usage when you start 20 streams; most likely the CPU will be close to, or at 100% pretty much all the time.

Transcoding is not an obligatory feature for streaming. If your incoming streams are good enough to be distributed then you can turn off transcoding and only use packaging to HLS. Packaging alone doesn’t need a lot of capacity, so you’ll easily do 20 streams on that server. But if you need transcoding, then:

  1. A single Wowza Streaming Engine license is valid for up to 10 concurrent transcoding sessions. Although the server does not stop you from transcoding more than 10, you will have to contact customerservice@wowza.com or sales@wowza.com to discuss your options.

  2. To transcode 20 streams on a single server you will need 1 or 2 GPUs (Graphics Processing Units, aka. Hardware Acceleration), e.g. an NVidia Tesla or similar. Again, this depends on your transcoding profile and settings. The GPUs that I’ve tested can handle 15-20 streams concurrently. I recommend to either use 2 x GPU in your server, or to get a 2nd server (which also is a good idea from a fail-over POV)