• How to troubleshoot Apple HLS playback

    This mobile streaming troubleshooting guide covers Apple HTTP Live Streaming (HLS/Cupertino) out to iOS devices and devices using Android version 4.0 or later. It doesn't cover streaming to RTSP/RTP clients such as Blackberry, Android versions earlier than 4.0, and other mobile phones.

    Contents


    Overview of device capabilities
    Configuration
    Optional Configuration Items
    HLS Playback URL Syntax
    Troubleshooting
    More resources

    Overview of device capabilities


    This section briefly describes device capabilities and supported streaming protocols.

    • OS X/iOS: OS X, iPhone, iPad, and iPod touch devices have built-in support for Apple HTTP Live Streaming. When using Safari on these devices, you can enter an HLS playback URL and stream content without additional configuration.

    • Android: Use Android OS version 4.0 or later for HLS native support on Android devices, though playback may not be completely smooth. Alternatively, you can play HLS streams using third-party apps such as VLC for Android, or flash-based web applications such as JW Player (with Flash installed).

    • Windows Phone: Support for HLS playback on Windows Phone requires third-party applications such as JW Player.

    • Apple TV: Apple HLS playback is supported. You can ingest AC-3 passthrough to stream to Apple TV devices by creating an app using the Apple TV SDK. The device that your Apple TV is connected to should also be able to play AC-3.

    • Roku: Apple HLS playback is supported. If you are using AC-3 passthrough to stream to Roku devices, ensure that your Roku audio settings are set to Auto mode and not Stereo. The device that your Roku is connected to should be able to play AC-3. If there is a (DD) or (DD+) next to the Auto setting, the HDMI device the Roku is connected to is capable of decoding this format.

    • Other devices: Most other mobile devices such as Nokia, Samsung, Sony Ericsson, Blackberry, etc. and other desktop operating systems such as Windows and Linux support HLS playback through Flash-based web applications such as JW Player, and through third-party apps such as VLC.

    You can also use the Wowza Test Players webpage to test your streaming applications. (The Test Players are provided for testing purposes only.)

    Configuration


    Tutorials are available to help you set up an application for video on demand or live streaming.

    Video on demand

    To set up an application to stream video on demand (VOD), see How to set up video on demand streaming.

    Note: The Wowza Streaming Engine™ media server software installation provides a preconfigured application named vod.
    Live

    To set up an application for live streaming, see one of the following tutorials (based on encoder type):


    Optional Configuration Items


    This section explains how to add properties in Wowza Streaming Engine Manager for additional Cupertino/Apple HLS functionality.

    Wowza Streaming Engine Manager configuration


    1. In Wowza Streaming Engine Manager, click the Applications tab, and then click the name of your live application (such as live) in the contents panel.

    2. In the Quick Links bar of the details page Properties tab, click HTTP Streamers Cupertino Settings for controlling Apple HLS playlist compatibility and features or Cupertino Streaming Packetizer for controlling how the the Apple HLS (cupertino) segmenter segments incoming live streams.

      Note: Access to the Properties tab is limited to administrators with advanced permissions. For more information, see Manage credentials.
    3. In the HTTP Streamers Cupertino Settings or Cupertino Streaming Packetizer section, click Edit.

    4. Enable the property you wish to edit and enter a Value.

    5. Click Save, and then restart the application to apply the changes.

    XML configuration


    1. Use a text editor to open the [install-dir]/conf/[application]/Application.xml file for your live or vod application and add the property you wish to change to the HTTPStreamer/Properties or to the LiveStreamPacketizer/Properties container. Be sure to add the property to the correct <Properties> container in Application.xml as there are several such containers in the file.

    2. Restart the application to apply the changes.
    Note: Use the tooltips in the Wowza Streaming Manager properties pages for more information on each application property.

    HLS Playback URL Syntax


    To play Cupertino/Apple HLS streams, use the following URL syntax:
    http://[wowza-ip-address]:1935/vod/mp4:sample.mp4/playlist.m3u8
    With port 80 enabled, this can be changed to:
    http://[wowza-ip-address]/vod/mp4:sample.mp4/playlist.m3u8
    You can also see How to play video on Apple iOS devices (Cupertino/Apple HLS).

    For problems with non-iOS-based players that support Apple HTTP Live Streaming (HLS) streams, see How to turn off data event processing for Apple HLS streams.

    Troubleshooting


    Encoding

    It's best to encode the video using a low bitrate, frame rate, and low encoding complexity. For mobile streaming, a total bitrate between 64Kbps and 250Kbps is best. Many mobile devices may not be able to handle a full 30 frames per second (fps). A frame rate between 15fps and 24fps may be best for mobile. It's best to encode to a lower H.264 complexity. Most mobile devices only support H.264 Baseline Profile. Encoder complexity and level are discussed in this Wikipedia article.

    Networking (UDP and TCP setup)

    You can log extra debug information about the RTSP handshake between the Wowza media server instance and the RTSP/RTP source.

    UDP

    You do not need to open any outgoing UDP ports for HLS streaming. On the incoming side, the Wowza media server software tries to use ports in the range 6970-9999. Setting up UDP networking correctly is sometimes difficult and depends on your router and firewall configuration. If behind NAT (network address translation), it's important that all UDP ports are mapped to the server running the Wowza media server software.

    Wowza provides a RTSP/RTP test stream running on Amazon EC2, which seems to work on most mobile networks/devices. Amazon EC2 is a great place to experiment with RTSP/RTP streaming. For more information, see Wowza for Amazon EC2.

    TCP

    Open the TCP streaming port that you have designated in your Streaming Engine Manager (the default port is 1935).

    Wowza Streaming Engine Manager configuration


    To enable the Wowza Streaming Engine instance to use a different port for HLS streaming:

    1. In Wowza Streaming Engine Manager, click the Server tab, and then click Virtual Host Setup in the contents pane.

    2. In the Virtual Host Setup page, click Edit in the Basic tab.

    3. Scroll down to the Host Ports section of the page and click Edit (pencil icon) for the Default Streaming item.

    4. Add your desired port number to the comma-separated Port(s) list (for example, 1935,80), and then click Apply.

    5. Click Save, and then restart the application when prompted to apply the changes.

    For more information, see Configuring streaming ports.

    XML configuration


    To enable the Wowza media server to use a different port for HLS streaming:

    1. Use a text editor to open the [install-dir]/conf/VHost.xml file and add your desired port number to the HostPort/Ports list:
      <Port>1935,80</Port>
    2. Restart the Wowza media server software to apply the changes.
    Note: Make sure that another service isn't running on the same computer that uses your configured streaming ports and check that all port forwarding rules on your router will not affect your streaming ports.

    Reviewing logging for HLS debugging

    You can review log information to monitor the Cupertino/HLS implementation in Wowza Streaming Engine software. Wowza media server log messages are written to the [install-dir]/logs/wowzastreamingengine_access.log file and error log messages are written to [install-dir]/logs/wowzastreamingengine_error.log file by default. We recommend reviewing these files on a weekly basis in order to find any potential issues before they escalate.

    The following are typical log messages for an HLS/Cupertino playback session using a Wirecast encoder for the source stream and JW Player for playback:
    app-start	application	INFO	200	_definst_	live/_definst_	-	-	-	76247.994	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-
    connect-pending	session	INFO	100	127.0.0.1	-	_defaultVHost_	live	_definst_	0.047	[any]	1935	rtmp://localhost:1935/live	127.0.0.1	rtmp	-	Wirecast/FM 1.0 (compatible; MSS/1.0)	1026716875	3270	3073	-	-	-	-	-	-	-	-	-	-	-	-	-	rtmp://localhost:1935/live	-
    connect	session	INFO	200	127.0.0.1	-	_defaultVHost_	live	_definst_	0.047	[any]	1935	rtmp://localhost:1935/live	127.0.0.1	rtmp	-	Wirecast/FM 1.0 (compatible; MSS/1.0)	1026716875	3270	3073	-	-	-	-	-	-	-	-	-	-	-	-	-	rtmp://localhost:1935/live	-
    create	stream	INFO	200	-	-	_defaultVHost_	live	_definst_	0	[any]	1935	rtmp://localhost:1935/live	127.0.0.1	rtmp	-	Wirecast/FM 1.0 (compatible; MSS/1.0)	1026716875	3401	3565	1	0	0	0	-	-	-	-	-	-	rtmp://localhost:1935/live	rtmp://localhost:1935/live	-	rtmp://localhost:1935/live	-
    publish	stream	INFO	200	myStream	-	_defaultVHost_	live	_definst_	0.014	[any]	1935	rtmp://localhost:1935/live	127.0.0.1	rtmp	-	Wirecast/FM 1.0 (compatible; MSS/1.0)	1026716875	3451	3606	1	0	0	0	myStream	-	-	-	-	-	rtmp://localhost:1935/live/myStream	rtmp://localhost:1935/live/myStream	-	rtmp://localhost:1935/live	-
    comment	server	INFO	200	-	LiveStreamPacketizerCupertino.init[live/_definst_/myStream]: chunkDurationTarget: 10000	-	-	-	76249.408	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-
    comment	server	INFO	200	-	LiveStreamPacketizerCupertino.init[live/_definst_/myStream]: audioGroupCount: 3	-	-	-	76249.409	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-
    comment	server	INFO	200	-	LiveStreamPacketizerCupertino.init[live/_definst_/myStream]: playlistChunkCount:3	-	-	-	76249.409	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-
    comment	server	INFO	200	-	MediaStreamMap.getLiveStreamPacketizer[live/_definst_/myStream]: Create live stream packetizer: cupertinostreamingpacketizer:myStream	-	-	-	76249.409	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-
    comment	server	INFO	200	-	CupertinoPacketHandler.startStream[live/_definst_/myStream]	-	-	-	76249.41	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-
    comment	server	INFO	200	-	LiveStreamPacketizerCupertino.handlePacket[live/_definst_/myStream]: Video codec:H264 isCompatible:true	-	-	-	76249.412	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-
    comment	server	INFO	200	-	LiveStreamPacketizerCupertino.handlePacket[live/_definst_/myStream][avc1.77.31]: H.264 Video info: {H264CodecConfigInfo: codec:H264, profile:Main, level:3.1, frameSize:1280x720, displaySize:1280x720, frameRate:3000.0, PAR:1:1}	-	-	-	76249.412	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-
    comment	server	INFO	200	-	LiveStreamPacketizerCupertino.handlePacket[live/_definst_/myStream]: Audio codec:AAC isCompatible:true	-	-	-	76251.093	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-
    comment	server	INFO	200	-	LiveStreamPacketizerCupertino.handlePacket[live/_definst_/myStream][mp4a.40.2]: AAC Audio info: {AACFrame: codec:AAC, channels:2, frequency:44100, samplesPerFrame:1024, objectType:LC}	-	-	-	76251.094	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-
    comment	server	INFO	200	-	LiveStreamPacketizerCupertino.endChunkTS[live/_definst_/myStream]: Add chunk: id:1 mode:TS[H264,AAC] a/v/k:220/265/2 duration:16200	-	-	-	76265.913	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-
    comment	server	INFO	200	-	LiveStreamPacketizerCupertino.endChunkTS[live/_definst_/myStream]: Add chunk: id:2 mode:TS[H264,AAC] a/v/k:115/170/1 duration:8000	-	-	-	76273.77	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-
    connect	cupertino	INFO	200	269353695	-	_defaultVHost_	live	_definst_	30.378	localhost	1935	http://localhost:1935/live/myStream/playlist.m3u8	127.0.0.1	http (cupertino)	http://localhost/jwenterprise/index.asp	Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36	269353695	0	0	-	0	-	-	myStream	-	-	-	-	-	http://localhost:1935/live/myStream/playlist.m3u8	http://localhost:1935/live/myStream/playlist.m3u8	-	http://localhost:1935/live/myStream/playlist.m3u8	-
    create	stream	INFO	200	myStream	-	_defaultVHost_	live	_definst_	0.001	localhost	1935	http://localhost:1935/live/myStream/playlist.m3u8	127.0.0.1	http (cupertino)	http://localhost/jwenterprise/index.asp	Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36	269353695	0	0	1	0	0	0	myStream	-	-	-	-	-	http://localhost:1935/live/myStream/playlist.m3u8	http://localhost:1935/live/myStream/playlist.m3u8	-	http://localhost:1935/live/myStream/playlist.m3u8	-
    play	stream	INFO	200	myStream	-	_defaultVHost_	live	_definst_	0.178	localhost	1935	http://localhost:1935/live/myStream/playlist.m3u8	127.0.0.1	http (cupertino)	http://localhost/jwenterprise/index.asp	Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36	269353695	0	718	1	16200	0	0	myStream	-	-	-	-	-	http://localhost:1935/live/myStream/playlist.m3u8	http://localhost:1935/live/myStream/playlist.m3u8	-	http://localhost:1935/live/myStream/playlist.m3u8	-
    comment	server	INFO	200	-	LiveStreamPacketizerCupertino.endChunkTS[live/_definst_/myStream]: Add chunk: id:3 mode:TS[H264,AAC] a/v/k:114/132/1 duration:8000	-	-	-	76282.355	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-
    comment	server	INFO	200	-	LiveStreamPacketizerCupertino.endChunkTS[live/_definst_/myStream]: Add chunk: id:4 mode:TS[H264,AAC] a/v/k:115/131/1 duration:8000	-	-	-	76290.165	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-
    unpublish	stream	INFO	200	myStream	-	_defaultVHost_	live	_definst_	47.15	[any]	1935	rtmp://localhost:1935/live	127.0.0.1	rtmp	-	Wirecast/FM 1.0 (compatible; MSS/1.0)	1026716875	7629644	3956	1	0	7620391	0	myStream	-	-	-	-	-	rtmp://localhost:1935/live/myStream	rtmp://localhost:1935/live/myStream	-	rtmp://localhost:1935/live	-
    destroy	stream	INFO	200	myStream	-	_defaultVHost_	live	_definst_	48.161	[any]	1935	rtmp://localhost:1935/live	127.0.0.1	rtmp	-	Wirecast/FM 1.0 (compatible; MSS/1.0)	1026716875	7629644	4104	1	0	7620391	0	myStream	-	-	-	-	-	rtmp://localhost:1935/live/myStream	rtmp://localhost:1935/live/myStream	-	rtmp://localhost:1935/live	-
    disconnect	session	INFO	200	1026716875	-	_defaultVHost_	live	_definst_	48.224	[any]	1935	rtmp://localhost:1935/live	127.0.0.1	rtmp	-	Wirecast/FM 1.0 (compatible; MSS/1.0)	1026716875	7629644	4104	-	-	-	-	-	-	-	-	-	-	-	-	-	rtmp://localhost:1935/live	-

    Adding additional logging for HLS debugging

    You can log extra debug information to verify that the Cupertino/HLS implementation in Wowza Streaming Engine software is running correctly. Configure the properties described in this section to record log messages to the [install-dir]/logs/wowzastreamingengine_access.log file.

    Wowza Streaming Engine Manager configuration


    To add extra Cupertino/HLS debug information to the log file:

    1. In Wowza Streaming Engine Manager, click the Server tab, and then click Virtual Host Setup.

    2. In the Virtual Host Setup page, click the Properties tab and then click Custom in the Quick Links bar.

      Note: Access to the Properties tab is limited to administrators with advanced permissions. For more information, see Manage credentials.
    3. In the Custom section, click Edit.

    4. Click Add Custom Property, specify the following settings in the Add Custom Property dialog box, and then click Add:

      • Path - Select /Root/VHost.

      • Name - Enter cupertinoAdapterDebugLog.

      • Type - Select Boolean.

      • Value - Enter true.

    5. Click Save, and then restart the application when prompted to apply the changes.

    XML configuration


    To add extra Cupertino/HLS debug information to the log file:

    1. Use a text editor to open the [install-dir]/conf/VHost.xml file and add the following property to the VHost/Properties container. Be sure to add the property to the correct <Properties> container in VHost.xml as there are several such containers in the file.
      <Property>
          <Name>cupertinoAdapterDebugLog</Name>
          <Value>true</Value>
          <Type>Boolean</Type>
      </Property>
    2. Restart the Wowza media server software to apply the changes.

    Setting cupertinoAdapterDebugLog to true yields log messages similar to the following:
    comment	server	INFO	200	-	HTTPStreamerAdapterCupertinoStreamer.onPlaylist: vod/mp4:sample.mp4/playlist.m3u8
    comment	server	INFO	200	-	MediaCasterStreamValidator.init[vod/_definst_]: Started
    app-start	application	INFO	200	_definst_	vod/_definst_
    connect	cupertino	INFO	200	1529581895	-
    create	stream	INFO	200	sample.mp4	-
    comment	server	INFO	200	-	MediaReaderH264Cupertino.indexFile[vod/_definst_/sample.mp4][mp4a.40.2]: AAC Audio info: {MediaCodecInfoAudio: codec:AAC, channels:2, frequency:48000, samplesPerFrame:1024, objectType:LC}
    comment	server	INFO	200	-	MediaReaderH264Cupertino.indexFile[vod/_definst_/sample.mp4][avc1.66.30]: H.264 Video info: {MediaCodecInfoVideo: codec:H264, profile:Baseline, level:3.0, frameSize:424x240, displaySize:424x240, frameRate:24.000000}
    comment	server	INFO	200	-	HTTPStreamerAdapterCupertinoStreamer.onPlaylist: vod/mp4:sample.mp4/chunklist_w1529581895.m3u8
    comment	server	INFO	200	-	HTTPStreamerAdapterCupertinoStreamer.onMediaFile: vod/mp4:sample.mp4/media_w1529581895_0.ts
    play	stream	INFO	200	sample.mp4	-
    comment	server	INFO	200	-	HTTPStreamerAdapterCupertinoStreamer.onMediaFile: contentLength:905032
    comment	server	INFO	200	-	HTTPStreamerAdapterCupertinoStreamer.onMediaFile: vod/mp4:sample.mp4/media_w1529581895_1.ts
    comment	server	INFO	200	-	HTTPStreamerAdapterCupertinoStreamer.onMediaFile: contentLength:708384
    comment	server	INFO	200	-	HTTPStreamerAdapterCupertinoStreamer.onMediaFile: vod/mp4:sample.mp4/media_w1529581895_2.ts
    comment	server	INFO	200	-	HTTPStreamerAdapterCupertinoStreamer.onMediaFile: contentLength:1157892
    comment	server	INFO	200	-	HTTPStreamerAdapterCupertinoStreamer.onMediaFile: vod/mp4:sample.mp4/media_w1529581895_3.ts
    comment	server	INFO	200	-	HTTPStreamerAdapterCupertinoStreamer.onMediaFile: contentLength:664392
    comment	server	INFO	200	-	HTTPStreamerAdapterCupertinoStreamer.onMediaFile: vod/mp4:sample.mp4/media_w1529581895_4.ts
    comment	server	INFO	200	-	HTTPStreamerAdapterCupertinoStreamer.onMediaFile: contentLength:673792
    comment	server	INFO	200	-	HTTPStreamerAdapterCupertinoStreamer.onMediaFile: vod/mp4:sample.mp4/media_w1529581895_5.ts
    comment	server	INFO	200	-	HTTPStreamerAdapterCupertinoStreamer.onMediaFile: contentLength:532792
    comment	server	INFO	200	-	HTTPStreamerAdapterCupertinoStreamer.onMediaFile: vod/mp4:sample.mp4/media_w1529581895_6.ts
    comment	server	INFO	200	-	HTTPStreamerAdapterCupertinoStreamer.onMediaFile: contentLength:820056
    stop	stream	INFO	200	sample.mp4	-
    destroy	stream	INFO	200	sample.mp4	-
    disconnect	cupertino	INFO	200	1529581895	-
    app-stop	application	INFO	200	_definst_	vod/_definst_
    To enable the extra HTTP Adapter logging for all protocols, repeat the steps above but enter httpAdapterDebugLog as the custom property name.

    Additional chunk logging

    To enable additional chunk logging using maxChunkLogCount:

    Wowza Streaming Engine Manager configuration


    1. In Wowza Streaming Engine Manager, click the Applications tab, and then select your application on the content menu.

    2. In the application setup page, click the Properties tab and then click Custom in the Quick Links bar.

      Note: Access to the Properties tab is limited to administrators with advanced permissions. For more information, see Manage credentials.
    3. In the Custom section, click Edit.

    4. Click Add Custom Property, specify the following settings in the Add Custom Property dialog box, and then click Add:

      • Path - Select /Root/Application/LiveStreamPacketizer.

      • Name - Enter maxChunkLogCount.

      • Type - Select Integer.

      • Value - Enter 0.

    5. Click Save, and then restart the application when prompted to apply the changes.

    XML configuration


    1. Use a text editor to open the [install-dir]/conf/[appName]/Application.xml file and add the following property to the Root/Application/LiveStreamPacketizer/Properties container. Be sure to add the property to the correct <Properties> container in Application.xml as there are several such containers in the file.
      <Property>
          <Name>maxChunkLogCount</Name>
          <Value>0</Value>
          <Type>Integer</Type>
      </Property>
    2. Restart the Wowza media server software to apply the changes.

    A value of 0 will log all TS chunks created. A value greater than 0 (n) will log the first n chunks created.

    If you experience time drift issues or audio/video out of sync issues, you can enable the debug logging for how Wowza media server software uses AAC and MP3 timecodes.

    Improving performance on Android devices

    HLS is supported on Android OS version 4.0 or later, but playback may not be smooth. You can use the cupertinoOnChunkStartResetCounter custom property to possibly improve playback on Android.

    Wowza Streaming Engine Manager configuration


    To reset the chunk counter to improve playback on Android:

    1. In Wowza Streaming Engine Manager, click the Applications tab and then click the name of your application.

    2. On the application page Properties tab, click Custom in the Quick Links bar.

      Note: Access to the Properties tab is limited to administrators with advanced permissions. For more information, see Manage credentials.
    3. In the Custom section, click Edit.

    4. Click Add Custom Property, specify the following settings in the Add Custom Property dialog box, and then click Add:

      For Live Applications
      For VOD Applications
      • Path - Select /Root/Application/LiveStreamPacketizer.

      • Name - Enter cupertinoOnChunkStartResetCounter.

      • Type - Select Boolean.

      • Value - Enter false.
      • Path - Select /Root/Application/HTTPStreamer.

      • Name - Enter cupertinoOnChunkStartResetCounter.

      • Type - Select Boolean.

      • Value - Enter false.

    5. Click Save, and then restart the application when prompted to apply the changes.

    XML configuration


    To reset the chunk counter to improve playback on Android:

    1. Use a text editor to open the [install-dir]/conf/Application.xml file and add the following property. For live applications, add the property to the <LiveStreamPacketizer>/<Properties> container. For VOD applications, add the property to the <HTTPStreamer>/<Properties> container. Be sure to add the property to the correct <Properties> container in Application.xml as there are several such containers in the file.
      <Property>
          <Name>cupertinoOnChunkStartResetCounter</Name>
          <Value>false</Value>
          <Type>Boolean</Type>
      </Property>
    2. Restart the Wowza media server software to apply the changes.

    Cupertino/HLS call-flow

    A typical Cupertino/HLS streaming session uses a workflow described in the following client-to-server and server-to-client message exchanges:

    1. The client initiates streaming by sending an HTTP GET request to the server.

    2. The server creates a playlist in an Extended M3U file encoded in UTF-8 (.m3u8). This playlist (index) is a manifest file that includes a set of URLs to media files (.ts segments) with their bitrates and sequence numbers.
      GET /vod/mp4:sample.mp4/playlist.m3u8 HTTP/1.1
      Host: localhost:1935
      Connection: keep-alive
      X-Requested-With: ShockwaveFlash/17.0.0.134
      User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36
      Accept: */*
      Referer: http://localhost/jwenterprise/index.asp
      Accept-Encoding: gzip, deflate, sdch
      Accept-Language: en-US,en;q=0.8
      Cookie: ASPSESSIONIDCQBSBCRR=IAKNOGHCJMDALEDFLDFFNDJH; ASPSESSIONIDASASBDQQ=CKDJNKHCFFKAMNNFJDFPKOHC; DoNotShowFTU=true; ASPSESSIONIDASDRDASR=LEDFLOEAJNIHIGOADDIBHBHD; ASPSESSIONIDAQCTCDRR=IKNPGEPAOANIIPNALACLPAAD; jwplayer.volume=90; jwplayer.mute=false; ASPSESSIONIDCSATDASR=GNLNCBGAGFHHCEOBNFOJJHCC; ASPSESSIONIDAQBTDBSQ=HFFHCHLBBEGPKMHCOKMPNHMJ; ASPSESSIONIDAQAQCBSR=JGMFMLNAMFDJGMDDPOODGLBJ; ASPSESSIONIDAQBTCCRR=GHNFNAOAEHMBONHLCMFBNPOD; ASPSESSIONIDAQAQCASQ=FFONELHBJKLDKODLKLGOJICP; ASPSESSIONIDAQBQDBTQ=AHOJKDLBOEBGPPCANNMDMBKF; ASPSESSIONIDASARDDSR=MBDJOHNAAADKBOJGAODPCLAD; ASPSESSIONIDCQCSDCRR=PPLJLLNADCCAGEIOGEMFOFEA; ASPSESSIONIDAQCRDDTR=DJNDDLHBCOMLONODBMOLGKMD; ASPSESSIONIDAQDQCBRT=GLFFFFECGAFKDOMKGKBMABEN; lastMediaCacheSource=amazons3; ASPSESSIONIDAQCTCCSQ=EEAPGCPCAIHKHHAIJMIIJNFG; lastTemplateApp=; lastTemplateEncodeApp=; ASPSESSIONIDSSQDQQDT=GDNFIPOACECEJKNIEFPKPGNF; jwplayer.qualityLabel=160p; ASPSESSIONIDSQSDQSDS=HAPDCKIBEPCIACFHGKAILPLP; incomingStreamViewByStream=true; lastMangerHost=http%3A//localhost%3A8087; showRightRail=true; lastTab=Basic; ASPSESSIONIDQQTDSTDS=IFEHEILCAJJFFKHKAKIKKKIK
      
      HTTP/1.1 200 OK
      Accept-Ranges: bytes
      Server: WowzaStreamingEngine/4.1.2
      Cache-Control: no-cache
      Date: Thu, 02 Apr 2015 17:01:00 GMT
      Content-Type: application/vnd.apple.mpegurl
      Content-Length: 137
    3. The server sends the client a chunklist (a subset of the files in the playlist).
      GET /vod/mp4:sample.mp4/chunklist_w1556499301.m3u8 HTTP/1.1
      Host: localhost:1935
      Connection: keep-alive
      X-Requested-With: ShockwaveFlash/17.0.0.134
      User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36
      Accept: */*
      Referer: http://localhost/jwenterprise/index.asp
      Accept-Encoding: gzip, deflate, sdch
      Accept-Language: en-US,en;q=0.8
      Cookie: ASPSESSIONIDCQBSBCRR=IAKNOGHCJMDALEDFLDFFNDJH; ASPSESSIONIDASASBDQQ=CKDJNKHCFFKAMNNFJDFPKOHC; DoNotShowFTU=true; ASPSESSIONIDASDRDASR=LEDFLOEAJNIHIGOADDIBHBHD; ASPSESSIONIDAQCTCDRR=IKNPGEPAOANIIPNALACLPAAD; jwplayer.volume=90; jwplayer.mute=false; ASPSESSIONIDCSATDASR=GNLNCBGAGFHHCEOBNFOJJHCC; ASPSESSIONIDAQBTDBSQ=HFFHCHLBBEGPKMHCOKMPNHMJ; ASPSESSIONIDAQAQCBSR=JGMFMLNAMFDJGMDDPOODGLBJ; ASPSESSIONIDAQBTCCRR=GHNFNAOAEHMBONHLCMFBNPOD; ASPSESSIONIDAQAQCASQ=FFONELHBJKLDKODLKLGOJICP; ASPSESSIONIDAQBQDBTQ=AHOJKDLBOEBGPPCANNMDMBKF; ASPSESSIONIDASARDDSR=MBDJOHNAAADKBOJGAODPCLAD; ASPSESSIONIDCQCSDCRR=PPLJLLNADCCAGEIOGEMFOFEA; ASPSESSIONIDAQCRDDTR=DJNDDLHBCOMLONODBMOLGKMD; ASPSESSIONIDAQDQCBRT=GLFFFFECGAFKDOMKGKBMABEN; lastMediaCacheSource=amazons3; ASPSESSIONIDAQCTCCSQ=EEAPGCPCAIHKHHAIJMIIJNFG; lastTemplateApp=; lastTemplateEncodeApp=; ASPSESSIONIDSSQDQQDT=GDNFIPOACECEJKNIEFPKPGNF; jwplayer.qualityLabel=160p; ASPSESSIONIDSQSDQSDS=HAPDCKIBEPCIACFHGKAILPLP; incomingStreamViewByStream=true; lastMangerHost=http%3A//localhost%3A8087; showRightRail=true; lastTab=Basic; ASPSESSIONIDQQTDSTDS=IFEHEILCAJJFFKHKAKIKKKIK
      
      HTTP/1.1 200 OK
      Accept-Ranges: bytes
      Server: WowzaStreamingEngine/4.1.2
      Cache-Control: no-cache
      Date: Thu, 02 Apr 2015 17:01:01 GMT
      Content-Type: application/vnd.apple.mpegurl
      Content-Length: 2247
    4. The client accesses the segmented (.ts) media files in the chunklist with an established bitrate via an HTTP request, and then plays the .ts files.
      GET /vod/mp4:sample.mp4/media_w1556499301_0.ts HTTP/1.1
      Host: localhost:1935
      Connection: keep-alive
      X-Requested-With: ShockwaveFlash/17.0.0.134
      User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36
      Accept: */*
      Referer: http://localhost/jwenterprise/index.asp
      Accept-Encoding: gzip, deflate, sdch
      Accept-Language: en-US,en;q=0.8
      Cookie: ASPSESSIONIDCQBSBCRR=IAKNOGHCJMDALEDFLDFFNDJH; ASPSESSIONIDASASBDQQ=CKDJNKHCFFKAMNNFJDFPKOHC; DoNotShowFTU=true; ASPSESSIONIDASDRDASR=LEDFLOEAJNIHIGOADDIBHBHD; ASPSESSIONIDAQCTCDRR=IKNPGEPAOANIIPNALACLPAAD; jwplayer.volume=90; jwplayer.mute=false; ASPSESSIONIDCSATDASR=GNLNCBGAGFHHCEOBNFOJJHCC; ASPSESSIONIDAQBTDBSQ=HFFHCHLBBEGPKMHCOKMPNHMJ; ASPSESSIONIDAQAQCBSR=JGMFMLNAMFDJGMDDPOODGLBJ; ASPSESSIONIDAQBTCCRR=GHNFNAOAEHMBONHLCMFBNPOD; ASPSESSIONIDAQAQCASQ=FFONELHBJKLDKODLKLGOJICP; ASPSESSIONIDAQBQDBTQ=AHOJKDLBOEBGPPCANNMDMBKF; ASPSESSIONIDASARDDSR=MBDJOHNAAADKBOJGAODPCLAD; ASPSESSIONIDCQCSDCRR=PPLJLLNADCCAGEIOGEMFOFEA; ASPSESSIONIDAQCRDDTR=DJNDDLHBCOMLONODBMOLGKMD; ASPSESSIONIDAQDQCBRT=GLFFFFECGAFKDOMKGKBMABEN; lastMediaCacheSource=amazons3; ASPSESSIONIDAQCTCCSQ=EEAPGCPCAIHKHHAIJMIIJNFG; lastTemplateApp=; lastTemplateEncodeApp=; ASPSESSIONIDSSQDQQDT=GDNFIPOACECEJKNIEFPKPGNF; jwplayer.qualityLabel=160p; ASPSESSIONIDSQSDQSDS=HAPDCKIBEPCIACFHGKAILPLP; incomingStreamViewByStream=true; lastMangerHost=http%3A//localhost%3A8087; showRightRail=true; lastTab=Basic; ASPSESSIONIDQQTDSTDS=IFEHEILCAJJFFKHKAKIKKKIK
      
      HTTP/1.1 200 OK
      Accept-Ranges: bytes
      Server: WowzaStreamingEngine/4.1.2
      Cache-Control: no-cache
      Date: Thu, 02 Apr 2015 17:01:01 GMT
      Content-Type: video/MP2T
      Content-Length: 905032
    5. Before the client reaches the end of the chunklist, another request is issued for the next chunklist. Since this is a new HTTP request, the server can respond with a chunklist of media files with a different bitrate, resulting in dynamic, adaptive switching between different bitrates as required by network performance.
      #EXTM3U
      #EXT-X-STREAM-INF:PROGRAM-ID = 1,BANDWIDTH = 1280000
      http://localhost/low.m3u8
      #EXT-X-STREAM-INF:PROGRAM-ID = 1,BANDWIDTH = 2560000
      http://localhost/mid.m3u8
      #EXT-X-STREAM-INF:PROGRAM-ID = 1,BANDWIDTH = 7680000
      http://localhost/hi.m3u8

    Note: A chunklist must have a minimum of a few seconds of program segments (chunks) so there's an inherent latency when accessing the server.
    #EXTM3U
    #EXT-X-VERSION:3
    #EXT-X-ALLOW-CACHE:NO
    #EXT-X-TARGETDURATION:11
    #EXT-X-MEDIA-SEQUENCE:5
    #EXTINF:10.016,
    media_w333646421_5.ts
    #EXTINF:10.016,
    media_w333646421_6.ts
    #EXTINF:10.016,
    media_w333646421_7.ts
    To minimize this latency, see How to achieve the lowest latency from capture to playback.

    Problematic SDP files

    Many RTSP sources, especially IP cameras, incorrectly publish the H.264 profile-level-id value in the Session Description Protocol (SDP) message. This can cause the video to be either blank or corrupt. You can configure the Wowza media server software to ignore the profile-level-id value in the SDP data and instead derive this value from the sprop-parameter-sets value.

    Wowza Streaming Engine Manager configuration


    To derive an ID value from sprop-parameter-sets:

    1. In Wowza Streaming Engine Manager, click the Applications tab and select your application in the contents pane.

    2. In the details page, click the Properties tab, and then click Custom in the Quick Links bar.

      Note: Access to the Properties tab is limited to administrators with advanced permissions. For more information, see Manage credentials.
    3. In the Custom section, click Edit.

    4. Click Add Custom Property, specify the following settings in the Add Custom Property dialog box, and then click Add:

      • Path - Select /Root/Application/RTP.

      • Name - Enter rtpIgnoreProfileLevelId.

      • Type - Select Boolean.

      • Value - Enter true.

    5. Click Save, and then restart the application when prompted to apply the changes.

    XML configuration


    To derive an ID value from sprop-parameter-sets:

    1. Use a text editor to open the [install-dir]/conf/[application]/Application.xml file for your live application and add the following property to the RTP/Properties container. Be sure to add the property to the correct <Properties> container in Application.xml as there are several such containers in the file.
      <Property>
       <Name>rtpIgnoreProfileLevelId</Name>
       <Value>true</Value>
       <Type>Boolean</Type>
      </Property>
    2. Restart the Wowza media server software to apply the changes.

    Test Stream URLs


    More resources




    Originally Published: For Wowza Streaming Engine on 09-15-2015.

    If you're having problems or want to discuss this article, post in our forum.