Results 1 to 9 of 9

Thread: IOS live freezing in Origin-Edge DVR

  1. #1

    Unhappy IOS live freezing in Origin-Edge DVR

    Hi,

    I am working in origin-edge configuration with DVR at the edge. At origin a mpeg-2 stream is being injection and being transcoded to (720p) with
    video: H.264 bitrate: 1300000
    Audio: AAC bitrate: 96000

    At edge I am transaction into 3 different bitrates
    720p: passthru
    360p: video bitrate: 850000
    240p: video bitrate: 350000

    The live stream plays in every OS except IOS. In IOS the video plays for a while and freezes. Please HELP!!!! I have pasted the application.xml for origin and edge servers. Let me know if any further details required:

    Origin Server Application.xml:
    <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>liverepeater-origin</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></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>${SourceStreamName}.xml,transcode.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></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>logIncompleteMPEGTSVideoFrames</Name>
    <Value>true</Value>
    <Type>Boolean</Type>
    </Property>
    <Property>
    <Name>audioIsAligned</Name>
    <Value>false</Value>
    <Type>Boolean</Type>
    </Property>
    <Property>
    <Name>videoIsAligned</Name>
    <Value>false</Value>
    <Type>Boolean</Type>
    </Property>
    </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>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 defined here will be added to the IApplication.getProperties() and IApplicationInstance.getProperties() collections -->
    <Properties>
    </Properties>
    </Application>
    </Root>

    Edge Server Application.xml

    <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> -->
    <StorageDir>/vodcontent</StorageDir>
    <KeyDir>${com.wowza.wms.context.VHostConfigHome}/keys</KeyDir>
    <!-- LiveStreamPacketizers (separate with commas): cupertinostreamingpacketizer, smoothstreamingpacketizer, sanjosestreamingpacketizer, mpegdashstreamingpacketizer, cupertinostreamingrepeater, smoothstreamingrepeater, sanjosestreamingrepeater, dvrstreamingpacketizer, dvrstreamingrepeater -->
    <LiveStreamPacketizers>dvrstreamingpacketizer,cupertinostreamingpacketizer</LiveStreamPacketizers>
    <!-- Properties defined here will override any properties defined in conf/Streams.xml for any streams types loaded by this application -->
    <Properties>
    <Property>
    <Name>sortPackets</Name>
    <Value>true</Value>
    <Type>Boolean</Type>
    </Property>
    <Property>
    <Name>sortBufferSize</Name>
    <Value>750</Value>
    <Type>Integer</Type>
    </Property>
    </Properties>
    </Streams>
    <Transcoder>
    <!-- To turn on transcoder set to: transcoder -->
    <LiveStreamTranscoder>transcoder</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>
    <Property>
    <Name>debugAACTimecodes</Name>
    <Value>true</Value>
    <Type>Boolean</Type>
    </Property>
    </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>dvrrecorder</Recorders>

    <!-- 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>600</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></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>
    <!-- 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>cupertinoRepeaterChunkCount</Name>
    <Value>3</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>
    </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>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>Hotlink Denial</Name>
    <Description>Hotlink Denial Module</Description>
    <Class>com.ott.security.ModuleHotlinkDenial</Class>
    </Module>
    </Modules>
    <!-- Properties defined here will be added to the IApplication.getProperties() and IApplicationInstance.getProperties() collections -->
    <Properties>
    <Property>
    <Name>domainLock</Name>
    <Value>mitvrd.com</Value>
    </Property>
    <Property>
    <Name>AllowEncoder</Name>
    <Value>FMLE,FM,Wirecast</Value>
    </Property>
    </Properties>
    </Application>
    </Root>
    Last edited by dhamibirendra; 04-06-2014 at 07:06 PM.

  2. #2
    Join Date
    Dec 2007
    Posts
    21,962

    Default

    Transcoding on the origin and edge is unusual, and with HTTP clients playing back from edge it won't work because you are Transcoding on the edge with repeater packetizers, that can't work for HTTP clients of the transcoded renditions. It is also not cost effective to have the Transcoder on the edge. The conventional setup is to have use the Transcoder on the origin only, and repeat from the edge.

    I see that you have edited since first post, now the origin LiveStreamPacketizers is empty, which will be a problem for the renditions transcoded on the origin. So, revert to transcoding on the origin using regular LiveStreamPacketizers on the origin, and repeater LiveStreamPacketizers on the edge, and disable Transcoding on the edge.

    Richard

  3. #3

    Default

    Hi Richard,

    Thanks for the reply.

    I am not transcoding at the edge servers. The transcoding is being done at the origin servers only.

    And on the LiveStreamPacketizers, I also tried by setting them at origin as well, but did not help.

    So, let summarize your suggestion here:
    The LiveStreamPacketizers (Cupertino, SmootheStreaming.. etc) should be put at origin only. Whereas no packetizers (or should we?) is to be put at the edge server.
    Or, please clear me on this.

    Would appreciate very much, if you could help me on this.

    Regards,
    Birendra

  4. #4
    Join Date
    Dec 2007
    Posts
    21,962

    Default

    Birendra,

    Generally the regular packetizers are set on the origin/Transcoder application. But you can set them in the edge, in which case you leave them empty on the origin (which is good for long distance between origin and edge, for example). But as long as you are doing Transcoding in one place (either origin or edge, tho origin is the usual) and packetizing in one place (either origin or edge, but origin is usuaul), it should work.

    The configuration and description you posted originally had Transcoding going on origin and edge.

    Richard

  5. #5

    Default

    Thanks for the quick reply.

    Yes.. This is what how I have configured now. I am doing only the transcoding at origin (our local servers), where as edge (EC2 servers) were are only transrating and using the Packetizers.

    But, as we have added the Cupertinopacketizer at edge server..(as you can notice in the Application.xml above), the video are getting freezed after 10 seconds in IOS devices. Whereas, other devices plays it very well.

    Please let me know, if I am missing anything.

    Regards,
    Birendra

  6. #6
    Join Date
    Dec 2007
    Posts
    21,962

    Default

    Birendra,

    How is the edge transrating? If you are using the Transcoder to transrate on the edge, it is the same problem.

    Does freeze happen if you playback directly from origin? If so, let's have a look at the origin cupertino packetizing logs after the stream is started: The codec info, and the logging of the first 10 chunks, which shows a/v/k (audio/video/keyframe) count and duration.

    Richard

  7. #7

    Default

    Hi Richard,

    What do you mean by I am transcoding at the edge. Please see the above post properly, In the Application.xml of Edge Server, you can see

    <!-- To turn on transcoder set to: transcoder -->
    <LiveStreamTranscoder>transcoder</LiveStreamTranscoder>
    <!-- [templatename].xml or ${SourceStreamName}.xml -->
    <Templates>${SourceStreamName}.xml,transrate.xml</Templates>

    It surely does mean I am transrating at EC2.

    Let me know if you need more information.

    Birendra

  8. #8
    Join Date
    Dec 2007
    Posts
    21,962

    Default

    Birendra,

    If the source (720p: passthru) is included in the StreamNameGroup on the edge, try taking it out. It might not be key frame aligned with the renditions. You can replace it with a 720 rendition that is not PassThru.

    I would do all transcoding on the origin. You can still do packetizing on the edge, which does have advantages in some cases. I'm not sure what the benefit of transcoding in two places would be. It's not cost effective.

    Richard

  9. #9
    Join Date
    Dec 2007
    Posts
    21,962

    Default

    Also, take a look at this article on using MediaCache with nDVR to cache nDVR chunks on edge servers. I don't think it will help with this problem (though possible), but it is best practice in production for nDVR and edge servers.

    Richard

Similar Threads

  1. Live Repeater Origin-Edge and HTTP Caching Origin
    By vjagannathan in forum General Forum
    Replies: 3
    Last Post: 06-18-2014, 02:56 AM
  2. Replies: 3
    Last Post: 02-25-2013, 03:37 AM
  3. How do I configure origin/edge live streaming to provide HLS to iOS devices?
    By pobrejuanito in forum Live Streaming and Encoder Discussion
    Replies: 8
    Last Post: 09-27-2012, 03:25 PM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •