Hi
Our hardware setup:
Dell Poweredge Dual Xenon 5600
Wowza 3.6.2 Latest production build
Wirecast 4.3 - Latest version
Blackmagic Decklink SDI HD stream 1x720p Picture
Our software setup
Windows Server 2008 R2 Enterprise
Wowza config is tuned as recommended in the this post: https://www.wowza.com/docs/general-tuning
Wirecast streaming - RTMP - h264,AAC - Key frame each 2 sec - 2000 kbits video - 96 kbit Audio - Uplink 100 mbits fiber
Application Conf
<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-record</StreamType>
<StorageDir>E:/disk/LocalUser/app/arkiv/</StorageDir>
<KeyDir>${com.wowza.wms.context.VHostConfigHome}/keys</KeyDir>
<!-- LiveStreamPacketizers (separate with commas): cupertinostreamingpacketizer, smoothstreamingpacketizer, cupertinostreamingrepeater, smoothstreamingrepeater -->
<LiveStreamPacketizers>cupertinostreamingpacketizer,smoothstreamingpacketizer,sanjosestreamingpacketizer,dvrstreamingpacketizer</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>transcoder</LiveStreamTranscoder>
<!-- [templatename].xml or ${SourceStreamName}.xml -->
<Templates>customer_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 -->
<!-- To turn on DVR recording set Recorders to dvrrecorder. This works with dvrstreamingpacketizer -->
<Recorders>dvrrecorder</Recorders>
<!-- As a single server or as an origin, set the Store to dvrfilestorage-->
<!-- edges should have this empty -->
<Store>dvrfilestorage</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>delete</ArchiveStrategy>
<!-- If this is a dvrstreamingrepeater, define ChunkOriginURL to point back to origin -->
<!-- And define Application/Repeater/OriginURL to point back to the origin -->
<Repeater>
<ChunkOriginURL></ChunkOriginURL>
</Repeater>
<!-- Properties for DVR -->
<Properties>
<Property>
<Name>streamTimeout</Name>
<Value>30000</Value>
<Type>Integer</Type>
</Property>
</Properties>
</DVR>
<!-- HTTPStreamers (separate with commas): cupertinostreaming, smoothstreaming -->
<HTTPStreamers>cupertinostreaming,smoothstreaming,sanjosestreaming,dvrchunkstreaming</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>
<!-- Properties defined here will override any properties defined in conf/RTP.xml for any depacketizers loaded by this application -->
<Properties>
</Properties>
</RTP>
<MediaCaster>
<!-- 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>
<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>ModuleRTMPAuthenticate</Name>
<Description>ModuleRTMPAuthenticate</Description>
<Class>com.wowza.wms.security.ModuleRTMPAuthenticate</Class>
</Module>
</Modules>
<!-- Properties defined here will be added to the IApplication.getProperties() and IApplicationInstance.getProperties() collections -->
<Properties>
<Property>
<Name>smoothStreamingMediaMajorVersion</Name>
<Value>2</Value>
<Type>Integer</Type>
</Property>
<Property>
<Name>rtmpEncoderAuthenticateFile</Name>
<Value>${com.wowza.wms.context.VHostConfigHome}/conf/${com.wowza.wms.context.Application}/publish.password</Value>
</Property>
</Properties>
</Application>
</Root>
Transrate CONF
<!-- Example template for transrate, producing four new streams at different bitrates. Resultant streams can be played back individually or as a group. source, 360p and 160p encode blocks are enabled through the Enable property, other examples are not enabled. Add additional encode blocks to your template as needed. -->
<Root>
<Transcode>
<Encodes>
<!-- Example Encode block for source, not required unless Member of StreamNameGroup. -->
<Encode>
<Enable>true</Enable>
<Name>source</Name>
<StreamName>mp4:${SourceStreamName}_source</StreamName>
<Video>
<!-- H.264, H.263, PassThru, Disable -->
<Codec>PassThru</Codec>
<Bitrate>${SourceVideoBitrate}</Bitrate>
<Parameters>
</Parameters>
</Video>
<Audio>
<!-- AAC, PassThru, Disable -->
<Codec>PassThru</Codec>
<Bitrate>${SourceAudioBitrate}</Bitrate>
<Parameters>
</Parameters>
</Audio>
<Properties>
</Properties>
</Encode>
<!-- Setup for 720p, high bandwith, main profile for desktop or set-top box -->
<Encode>
<Enable>false</Enable>
<Name>720p</Name>
<StreamName>mp4:${SourceStreamName}_720p</StreamName>
<Video>
<!-- H.264, H.263, PassThru, Disable -->
<Codec>H.264</Codec>
<!-- default, CUDA, QuickSync, NVENC -->
<Transcoder>default</Transcoder>
<GPUID>-1</GPUID>
<FrameSize>
<!-- letterbox, fit-width, fit-height, crop, stretch, match-source -->
<FitMode>fit-height</FitMode>
<Width>1280</Width>
<Height>720</Height>
<!-- <Crop>0,0,0,0</Crop> -->
<!-- <SourceRectangle>0,0,320,240</SourceRectangle> -->
</FrameSize>
<!-- baseline, main, high -->
<Profile>main</Profile>
<Bitrate>1300000</Bitrate>
<KeyFrameInterval>
<FollowSource>true</FollowSource>
<Interval>60</Interval>
</KeyFrameInterval>
<Overlays>
<Overlay>
<Enable>false</Enable>
<Index>0</Index>
<ImagePath>${com.wowza.wms.context.VHostConfigHome}/content/wowzalogo.png</ImagePath>
<CheckForUpdates>false</CheckForUpdates>
<Opacity>100</Opacity>
<Location>
<X>4</X>
<Y>4</Y>
<Width>${ImageWidth}</Width>
<Height>${ImageHeight}</Height>
<!-- horiz: left, right, hcenter - vert: top, bottom, vcenter -->
<Align>left,top</Align>
</Location>
</Overlay>
</Overlays>
<Parameters>
</Parameters>
</Video>
<Audio>
<!-- AAC, PassThru, Disable -->
<Codec>PassThru</Codec>
<Bitrate>${SourceAudioBitrate}</Bitrate>
<Parameters>
</Parameters>
</Audio>
<Properties>
</Properties>
</Encode>
<!-- Setup for 360p, high bandwith, main profile for desktop -->
<Encode>
<Enable>true</Enable>
<Name>360p</Name>
<StreamName>mp4:${SourceStreamName}_360p</StreamName>
<Video>
<!-- H.264, H.263, PassThru, Disable -->
<Codec>H.264</Codec>
<!-- default, CUDA, QuickSync, NVENC -->
<Transcoder>default</Transcoder>
<GPUID>-1</GPUID>
<FrameSize>
<!-- letterbox, fit-width, fit-height, crop, stretch, match-source -->
<FitMode>fit-height</FitMode>
<Width>640</Width>
<Height>360</Height>
<!-- <Crop>0,0,0,0</Crop> -->
<!-- <SourceRectangle>0,0,320,240</SourceRectangle> -->
</FrameSize>
<!-- baseline, main, high -->
<Profile>main</Profile>
<Bitrate>850000</Bitrate>
<KeyFrameInterval>
<FollowSource>true</FollowSource>
<Interval>60</Interval>
</KeyFrameInterval>
<Overlays>
<Overlay>
<Enable>false</Enable>
<Index>0</Index>
<ImagePath>${com.wowza.wms.context.VHostConfigHome}/content/wowzalogo.png</ImagePath>
<CheckForUpdates>false</CheckForUpdates>
<Opacity>100</Opacity>
<Location>
<X>4</X>
<Y>4</Y>
<Width>${ImageWidth}</Width>
<Height>${ImageHeight}</Height>
<!-- horiz: left, right, hcenter - vert: top, bottom, vcenter -->
<Align>left,top</Align>
</Location>
</Overlay>
</Overlays>
<Parameters>
</Parameters>
</Video>
<Audio>
<!-- AAC, PassThru, Disable -->
<Codec>PassThru</Codec>
<Bitrate>${SourceAudioBitrate}</Bitrate>
<Parameters>
</Parameters>
</Audio>
<Properties>
</Properties>
</Encode>
<!-- Setup for 240p, medium bandwidth, baseline profile -->
<Encode>
<Enable>true</Enable>
<Name>240p</Name>
<StreamName>mp4:${SourceStreamName}_240p</StreamName>
<Video>
<!-- H.264, H.263, PassThru, Disable -->
<Codec>H.264</Codec>
<!-- default, CUDA, QuickSync, NVENC -->
<Transcoder>default</Transcoder>
<GPUID>-1</GPUID>
<FrameSize>
<!-- letterbox, fit-width, fit-height, crop, stretch, match-source -->
<FitMode>fit-height</FitMode>
<Width>360</Width>
<Height>240</Height>
<!-- <Crop>0,0,0,0</Crop> -->
<!-- <SourceRectangle>0,0,320,240</SourceRectangle> -->
</FrameSize>
<!-- baseline, main, high -->
<Profile>baseline</Profile>
<Bitrate>350000</Bitrate>
<KeyFrameInterval>
<FollowSource>true</FollowSource>
<Interval>60</Interval>
</KeyFrameInterval>
<Overlays>
<Overlay>
<Enable>false</Enable>
<Index>0</Index>
<ImagePath>${com.wowza.wms.context.VHostConfigHome}/content/wowzalogo.png</ImagePath>
<CheckForUpdates>false</CheckForUpdates>
<Opacity>100</Opacity>
<Location>
<X>4</X>
<Y>4</Y>
<Width>${ImageWidth}</Width>
<Height>${ImageHeight}</Height>
<!-- horiz: left, right, hcenter - vert: top, bottom, vcenter -->
<Align>left,top</Align>
</Location>
</Overlay>
</Overlays>
<Parameters>
</Parameters>
</Video>
<Audio>
<!-- AAC, PassThru, Disable -->
<Codec>PassThru</Codec>
<Bitrate>${SourceAudioBitrate}</Bitrate>
<Parameters>
</Parameters>
</Audio>
<Properties>
</Properties>
</Encode>
<!-- Setup for 160p, low bandwith, baseline profile for 3G mobile devices such as iOS, Android, Blackberry -->
<Encode>
<Enable>false</Enable>
<Name>160p</Name>
<StreamName>mp4:${SourceStreamName}_160p</StreamName>
<Video>
<!-- H.264, H.263, PassThru, Disable -->
<Codec>H.264</Codec>
<!-- default, CUDA, QuickSync, NVENC -->
<Transcoder>default</Transcoder>
<GPUID>-1</GPUID>
<FrameSize>
<!-- letterbox, fit-width, fit-height, crop, stretch, match-source -->
<FitMode>fit-height</FitMode>
<Width>284</Width>
<Height>160</Height>
<!-- <Crop>0,0,0,0</Crop> -->
<!-- <SourceRectangle>0,0,320,240</SourceRectangle> -->
</FrameSize>
<!-- baseline, main, high -->
<Profile>baseline</Profile>
<Bitrate>200000</Bitrate>
<KeyFrameInterval>
<FollowSource>true</FollowSource>
<Interval>60</Interval>
</KeyFrameInterval>
<Overlays>
<Overlay>
<Enable>false</Enable>
<Index>0</Index>
<ImagePath>${com.wowza.wms.context.VHostConfigHome}/content/wowzalogo.png</ImagePath>
<CheckForUpdates>false</CheckForUpdates>
<Opacity>100</Opacity>
<Location>
<X>4</X>
<Y>4</Y>
<Width>${ImageWidth}</Width>
<Height>${ImageHeight}</Height>
<!-- horiz: left, right, hcenter - vert: top, bottom, vcenter -->
<Align>left,top</Align>
</Location>
</Overlay>
</Overlays>
<Parameters>
</Parameters>
</Video>
<Audio>
<!-- AAC, PassThru, Disable -->
<Codec>PassThru</Codec>
<Bitrate>${SourceAudioBitrate}</Bitrate>
<Parameters>
</Parameters>
</Audio>
<Properties>
</Properties>
</Encode>
<!-- Setup for H.263, low bandwith, streaming to older mobile devices -->
<Encode>
<Enable>false</Enable>
<Name>h263</Name>
<StreamName>mp4:${SourceStreamName}_h263</StreamName>
<Video>
<!-- H.264, H.263, PassThru, Disable -->
<Codec>H.263</Codec>
<!-- default, CUDA, QuickSync, NVENC -->
<Transcoder>default</Transcoder>
<GPUID>-1</GPUID>
<FrameSize>
<!-- letterbox, fit-width, fit-height, crop, stretch, match-source -->
<FitMode>letterbox</FitMode>
<Width>176</Width>
<Height>144</Height>
<!-- <Crop>0,0,0,0</Crop> -->
<!-- <SourceRectangle>0,0,320,240</SourceRectangle> -->
</FrameSize>
<!-- baseline, main, high -->
<Profile>baseline</Profile>
<Bitrate>150000</Bitrate>
<KeyFrameInterval>
<FollowSource>false</FollowSource>
<Interval>60</Interval>
</KeyFrameInterval>
<Overlays>
<Overlay>
<Enable>false</Enable>
<Index>0</Index>
<ImagePath>${com.wowza.wms.context.VHostConfigHome}/content/wowzalogo.png</ImagePath>
<CheckForUpdates>false</CheckForUpdates>
<Opacity>100</Opacity>
<Location>
<X>4</X>
<Y>4</Y>
<Width>${ImageWidth}</Width>
<Height>${ImageHeight}</Height>
<!-- horiz: left, right, hcenter - vert: top, bottom, vcenter -->
<Align>left,top</Align>
</Location>
</Overlay>
</Overlays>
<Parameters>
</Parameters>
</Video>
<Audio>
<!-- AAC, PassThru, Disable -->
<Codec>AAC</Codec>
<Bitrate>64000</Bitrate>
<Parameters>
</Parameters>
</Audio>
<Properties>
</Properties>
</Encode>
</Encodes>
<Decode>
<Video>
<Deinterlace>false</Deinterlace>
<Overlays>
<Overlay>
<Enable>false</Enable>
<Index>0</Index>
<ImagePath>${com.wowza.wms.context.VHostConfigHome}/content/wowzalogo.png</ImagePath>
<CheckForUpdates>false</CheckForUpdates>
<Opacity>100</Opacity>
<Location>
<X>4</X>
<Y>4</Y>
<Width>${ImageWidth}</Width>
<Height>${ImageHeight}</Height>
<!-- horiz: left, right, hcenter - vert: top, bottom, vcenter -->
<Align>left,top</Align>
</Location>
</Overlay>
</Overlays>
<Parameters>
</Parameters>
</Video>
<Properties>
</Properties>
</Decode>
<StreamNameGroups>
<!-- Note: Play stream using stream name ngrp:[stream-name] -->
<StreamNameGroup>
<Name>all</Name>
<StreamName>${SourceStreamName}_all</StreamName>
<Members>
<Member>
<EncodeName>source</EncodeName>
</Member>
<Member>
<EncodeName>720p</EncodeName>
</Member>
<Member>
<EncodeName>360p</EncodeName>
</Member>
<Member>
<EncodeName>240p</EncodeName>
</Member>
</Members>
</StreamNameGroup>
<StreamNameGroup>
<Name>mobile</Name>
<StreamName>${SourceStreamName}_mobile</StreamName>
<Members>
<Member>
<EncodeName>240p</EncodeName>
</Member>
<Member>
<EncodeName>160p</EncodeName>
</Member>
</Members>
</StreamNameGroup>
</StreamNameGroups>
<Properties>
</Properties>
</Transcode>
</Root>
Our problem
-
?DVR is not working in 1/7 of our tests (manifest.f4m) . If we try to playbak the stream without ?DVR = no problem… (Nothing in the error log)
-
If we run a 6-10 hour long livestream, stop the encoder. We wait 5 minutes then we start the encoder. Then the different bandwidth’s (240p,360p, source) are not aligned. After a new restart of the encoder it works fine. (Error logs shows this):
WARN server comment 2013-06-21 15:17:06 - - - - - 148520.771 - - - - - - - - LiveStreamDvrRecorder.endChunk[customer/_definst_/customerlive3_source]: Recalculating video duration by estimating. Was 4000. Is now 3940.
WARN server comment 2013-06-21 15:17:06 - - - - - 148520.773 - - - - - - - - LiveStreamDvrRecorder.endChunk[customer/_definst_/customerlive3_source]: Recalculating audio duration by estimating. Was 12190. Is now 12422.
WARN server comment 2013-06-21 15:17:06 - - - - - 148520.773 - - - - - - - - DvrStreamStoreBase.storeChunks[customer/_definst_/customerlive3_source/customerlive3_source.6] : Skipping chunk. A/V durations differ by 8482 ms, more than allowed 2000 ms. aDuration=12422 vDuration=3940
WARN server comment 2013-06-21 15:17:07 - - - - - 148521.292 - - - - - - - - DvrStreamStoreBase.storeChunks[customer/_definst_/customerlive3_source/customerlive3_source.6] : Skipping chunk. A/V packet times differ by 8445 ms, more than allowed 2000 ms. aTime=12445 vTime=4000
WARN server comment 2013-06-21 15:17:07 - - - - - 148521.443 - - - - - - - - LiveStreamDvrRecorder.endChunk[customer/_definst_/customerlive3_240p]: Recalculating audio duration by estimating. Was 12747. Is now 12979.
WARN server comment 2013-06-21 15:17:07 - - - - - 148521.444 - - - - - - - - DvrStreamStoreBase.storeChunks[customer/_definst_/customerlive3_240p/customerlive3_240p.6] : Skipping chunk. A/V durations differ by 4979 ms, more than allowed 2000 ms. aDuration=12979 vDuration=8000
WARN server comment 2013-06-21 15:17:07 - - - - - 148521.753 - - - - - - - - LiveStreamDvrRecorder.endChunk[customer/_definst_/customerlive3_360p]: Recalculating audio duration by estimating. Was 13235. Is now 13467.
WARN server comment 2013-06-21 15:17:07 - - - - - 148521.754 - - - - - - - - DvrStreamStoreBase.storeChunks[customer/_definst_/customerlive3_360p/customerlive3_360p.6] : Skipping chunk. A/V durations differ by 5467 ms, more than allowed 2000 ms. aDuration=13467 vDuration=8000
WARN server comment 2013-06-21 15:17:07 - - - - - 148521.826 - - - - - - - - DvrStreamStoreBase.storeChunks[customer/_definst_/customerlive3_source/customerlive3_source.6] : Skipping chunk. A/V packet times differ by 5003 ms, more than allowed 2000 ms. aTime=13003 vTime=8000
WARN server comment 2013-06-21 15:17:10 - - - - - 148524.302 - - - - - - - - DvrStreamStoreBase.storeChunks[customer/_definst_/customerlive3_240p/customerlive3_240p.6] : Skipping chunk. A/V packet times differ by 4963 ms, more than allowed 2000 ms. aTime=13003 vTime=8040
WARN server comment 2013-06-21 15:17:10 - - - - - 148524.377 - - - - - - - - DvrStreamStoreBase.storeChunks[customer/_definst_/customerlive3_360p/customerlive3_360p.6] : Skipping chunk. A/V packet times differ by 5450 ms, more than allowed 2000 ms. aTime=13490 vTime=8040
- After 3-4 hours of streaming we get alignment problems on DVR (Nothing in the access log or error log) playback without ?DVR works like a charm.
Anyone have any ideas ?