Problem saving content in WowzaStreamingEngine 4.0.0

Hi all.

I’m testing WowzaStreamingEngine 4.0.0, but I seem to have a problem saving content. We’re using live-record mode, and the transcoder, to produce an output FLV and MP4. However, neither of these files are being written, and there are no apparent errors in the logs. I’ve checked the permissions on the output directory and these are fine, moreover this has worked fine with a previous version (WowzaMediaServer 3.6.4).

Any thoughts as to what could be the problem?

Thanks,

Henry

PS. My application config is:

<Root>
	<Application>
		<Connections>
			<AutoAccept>true</AutoAccept>
			<AllowDomains></AllowDomains>
		</Connections>
		<Streams>
			<StreamType>live-record</StreamType>
			<StorageDir>${com.wowza.wms.AppHome}/applications/vodrecord</StorageDir>
			<Properties>
				<Property>
					<Name>versionFile</Name>
					<Value>false</Value>
					<Type>Boolean</Type>
				</Property>
				<Property>
					<Name>appendFile</Name>
					<Value>true</Value>
					<Type>Boolean</Type>
				</Property>
			</Properties>
		</Streams>
		<Transcoder>
			<LiveStreamTranscoder>transcoder</LiveStreamTranscoder>
			<Templates>audioonly.xml</Templates>
			<ProfileDir>${com.wowza.wms.context.VHostConfigHome}/transcoder/profiles</ProfileDir>
			<TemplateDir>${com.wowza.wms.context.VHostConfigHome}/transcoder/templates</TemplateDir>
		</Transcoder>
		<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/Methods defined in Authentication.xml. Default setup includes; none, basic, digest -->
			<Authentication>
				<Method>digest</Method>
			</Authentication>
			<!-- RTP/AVSyncMethod. Valid values are: senderreport, systemclock, rtptimecode -->
			<AVSyncMethod>senderreport</AVSyncMethod>
			<MaxRTCPWaitTime>12000</MaxRTCPWaitTime>
			<Properties>
			</Properties>
		</RTP>
		<MediaCaster>
			<Properties>
			</Properties>
		</MediaCaster>
		<MediaReader>
			<Properties>
			</Properties>
		</MediaReader>
		<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>
		</Modules>
		<Properties>
		</Properties>
	</Application>
</Root>

Hi Henry,

Did you restart the application after changing the StreamType?

Are there any clues in the error or access logs that point to the issue?

Does it work if you use the default StorageDir?

<StorageDir>${com.wowza.wms.context.VHostConfigHome}/content</StorageDir>

Salvadore

Henry, this looks to be an issue with the source. What encoder are you using? Can you test with FMLE?

Salvadore

I did test this the other day with your original configuration and it worked with FMLE on Wowza 4.

Can you describe your stream settings?

Video and audio codecs

Bit rate

FPS and GOP length(key frame interval)

Salvadore

Thanks for the update Henry, glad you got this sorted out.

Salvadore

Hi Salvadore.

Yes, I restarted the manager (WowzaStreamingEngineManager) and the engine (WowzaStreamingEngine) between making changes. I tried changing the storage dir parameter as suggested to:

<StorageDir>${com.wowza.wms.context.VHostConfigHome}/content</StorageDir>

But still nothing is written.

Regarding the configuration, initially I tried modifying our existing (3.6.4) config (listed above) as per the migration guide, but this didn’t seem to work so I created config from scratch in the manager, then manually added the missing sections. Sadly I’m still getting nothing written.

The only entry in the error log is:

WARN    server  comment 2014-02-18      08:42:40        -       -       -       -       -       127.124 -       -       -       -       -       -       -       -       LiveReceiver.flushPacketizerDelayCommand[livedesktop/_definst_/]: Stream name is missing for too long, flushing delayed packet.

The access log has the following:

2014-02-18      08:42:39        GMT     create  stream  INFO    200     -       -       _defaultVHost_  livedesktop     _definst_       0.04    [any]   1935    rtmp://apollo.kuluvalley.com:1935/livedesktop   192.168.0.145   rtmp    http://henry.kuluvalley.com/KVP/0000000000/client/swf/mediaRecorderH264-1.9.swf?disableScaling=1&showMultiCamSelectionScrn=0&jsGlobalInvokerName=Delegate.invokeGlobal&isOnlineCapture=1&jsStatusDelegateID=G4&jsCameraNotFoundDelegateID=G5&keyDownEventCallbackID=G6&serverName=apollo.kuluvalley.com&appName=livedesktop&protocols=rtmp:1935;rtmp:443;rtmp:80;rtmps:443;rtmps:80;rtmpe:443;rtmpe:80;rtmpt:443;rtmpt:80&streamName=streamrFHqn&defaultPlaybackVolume=75&defaultRecordingVolume=40&camVideoBitRate=0&camVideoQuality=90&camVideoFrameRate=25&camVideoKeyFrameInterval=15&camVideoWidth=480&camVideoHeight=270&videoWidth=426&videoHeight=240&debugMode=0&autoStartPlayback=0&allowAudioOnlyRecording=0&allowVideoOnlyRecording=1&currentRecordingAudioOnly=0&currentRecordingVideoOnly=1&showRecordingStatuses=0&cacheKiller=1392713052425     MAC 12,0,0,44   1953419931      4336    3413    1       0       0       0       -       -       -       -       0
       0.0     rtmp://apollo.kuluvalley.com:1935/livedesktop   rtmp://apollo.kuluvalley.com:1935/livedesktop   -       rtmp://apollo.kuluvalley.com:1935/livedesktop   -
2014-02-18      08:42:40        GMT     comment server  WARN    200     -       LiveReceiver.flushPacketizerDelayCommand[livedesktop/_definst_/]: Stream name is missing for too long, flushing delayed packet. -       -       -       127.124 -       -       -       -       -       -       -       -       -       -       -       -       -       -       -       -       -       -       -       -       -       -       -       -       -
2014-02-18      08:42:41        GMT     comment server  INFO    200     -       TranscoderSessionNative.loadLibrary: Load transcoder list file: /usr/local/WowzaStreamingEngine/lib-native/linux64/transcoder.list      -       -       -
       127.147 -       -       -       -       -       -       -       -       -       -       -       -       -       -       -       -       -       -       -       -       -       -       -       -       -

Then nothing more. In 3.6.4 there would be more output in the access log as the stream is received. Nothing in our app has changed, pointing it to 3.6.4 works but not with 4.0, so I don’t believe our app is not sending data.

I’ve listed the latest configuration I’m using below.

Many thanks,

Henry

<?xml version="1.0" encoding="UTF-8"?>
<Root version="1">
	<Application>
		<Name>livedesktop</Name>
		<AppType>Live</AppType>
		<Description></Description>
		<!-- 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-record</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, sanjosestreamingpacketizer, smoothstreamingpacketizer</LiveStreamPacketizers>
			<!-- Properties defined here will override any properties defined in conf/Streams.xml for any streams types loaded by this application -->
			<Properties>
				<Property>
					<Name>versionFile</Name>
					<Value>false</Value>
					<Type>Boolean</Type>
				</Property>
				<Property>
					<Name>appendFile</Name>
					<Value>true</Value>
					<Type>Boolean</Type>
				</Property>
			</Properties>
		</Streams>
		<Transcoder>
			<LiveStreamTranscoder>transcoder</LiveStreamTranscoder>
			<Templates>audioonly.xml</Templates>
			<ProfileDir>${com.wowza.wms.context.VHostConfigHome}/transcoder/profiles</ProfileDir>
			<TemplateDir>${com.wowza.wms.context.VHostConfigHome}/transcoder/templates</TemplateDir>
		</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, smoothstreaming, sanjosestreaming, 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>
			</Properties>
		</RTP>
		<MediaCaster>
			<RTP>
				<RTSP>
					<!-- udp, interleave -->
					<RTPTransportMode>interleave</RTPTransportMode>
				</RTSP>
			</RTP>
			<StreamValidator>
				<Enable>true</Enable>
				<ResetNameGroups>true</ResetNameGroups>
				<StreamStartTimeout>20000</StreamStartTimeout>
				<StreamTimeout>12000</StreamTimeout>
				<VideoStartTimeout>0</VideoStartTimeout>
				<VideoTimeout>0</VideoTimeout>
				<AudioStartTimeout>0</AudioStartTimeout>
				<AudioTimeout>0</AudioTimeout>
				<VideoTCToleranceEnable>false</VideoTCToleranceEnable>
				<VideoTCPosTolerance>3000</VideoTCPosTolerance>
				<VideoTCNegTolerance>-500</VideoTCNegTolerance>
				<AudioTCToleranceEnable>false</AudioTCToleranceEnable>
				<AudioTCPosTolerance>3000</AudioTCPosTolerance>
				<AudioTCNegTolerance>-500</AudioTCNegTolerance>
				<DataTCToleranceEnable>false</DataTCToleranceEnable>
				<DataTCPosTolerance>3000</DataTCPosTolerance>
				<DataTCNegTolerance>-500</DataTCNegTolerance>
				<AVSyncToleranceEnable>false</AVSyncToleranceEnable>
				<AVSyncTolerance>1500</AVSyncTolerance>
				<DebugLog>false</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>
			</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>
		<Manager>
			<!-- Properties defined are used by the Manager -->
			<Properties>
			</Properties>
		</Manager>
		<Repeater>
			<OriginURL></OriginURL>
			<QueryString><![CDATA[]]></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>
		</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>
		</Properties>
	</Application>
</Root>

Hi Salvadore.

This is a webcam recording from a browser based Flash recorder. I’ll test a FMLE and Wirecast based stream when I’m back in the office tomorrow.

However, recording from our existing Flash recorder has always worked fine for all previous versions of Wowza. Has version 4 become less tolerant of stream anomalies? Is there some new requirement of the source stream that we need to take into account?

Thanks,

Henry

Hi Salvadore.

I finally got back to this after a load of work on our Wowza live plugin, and the problem seems to have fixed itself :slight_smile: Well not necessarily, we’re now on version 4.0.1 which maybe addressed the issue, but regardless it’s a good result for us !

Thanks for the help on this,

Yours,

Henry

Hi Salvadore.

Just FYI, I worked out what the root cause was. It seems that the transcoder no longer works with CentOS 5.8 (which we are using for our VoD recording.) I tried CentOS 6.4, however, and the transcoder worked fine.

There’s another thread started by someone else on this topic: Transcoded stream won’t start on CentOS 5.8

Yours,

Henry