This guide provides troubleshooting techniques for Apple HTTP Live Streaming (HLS) from Wowza Streaming Engine™ media server software to iOS devices and devices using Android 4.0 or later.
Overview of HLS playback
This section briefly describes device capabilities and supported streaming protocols.
macOS and iOS
macOS, iPhone, and iPad devices have built-in support for HLS. When using Safari on these devices, you can enter an HLS playback URL and stream content without additional configuration.
Apple TV
HLS playback is supported. You can ingest AC-3 passthrough to stream to Apple TVs 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.
Android
Use Android OS 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 players such as VideoLAN VLC for Android.
Roku
HLS playback is supported. If you're using AC-3 passthrough to stream to Roku, ensure that your Roku audio settings are set to Auto mode, 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 can decode this format.
Other devices
Most other mobile devices such as Nokia, Samsung, Sony Ericsson, Blackberry, and Windows Phone, as well as desktop operating systems such as Windows and Linux, support HLS playback through players such as VideoLAN VLC.
You can use the Wowza Test Players webpage to test your streaming applications.Edit advanced properties
You can edit properties in Wowza Streaming Engine Manager to enable additional HLS functionality.
- Click Applications in the menu bar and then select your live application in the contents panel.
- Click the Properties tab, and in the Quick Links bar, click HTTP Streamers Cupertino Settings to control HLS playlist compatibility and features, or click Cupertino Streaming Packetizer to control how the HLS (cupertino) packetizer segments incoming live streams.
Note: Access to the Properties tab is limited to administrators with advanced permissions. For more information, see Manage credentials.
- In the HTTP Streamers Cupertino Settings or Cupertino Streaming Packetizer section, click Edit.
- Enable the property you wish to edit and enter a Value.
- Click Save, and then restart the application to apply the changes.
Alternatively, you can edit HLS packetizer and HTTP streamer properties in XML:
- Use a text editor to open the [install-dir]/conf/[application-name]/Application.xml file for your live or vod application
- 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 in the file.
- Restart the application to apply the changes.
Optimize encoding
For mobile streaming, it's best to encode streams using a low bitrate, frame rate, and low encoding complexity. A total bitrate of 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.
Test UDP ports
You don't need to open any outgoing UDP ports for HLS streaming. On the incoming side, Wowza Streaming Engine tries to use ports 6970 to 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 Wowza Streaming Engine.
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 About deploying Wowza Streaming Engine on Amazon.
Configure the TCP port
Open the TCP streaming port that you have designated for Wowza Streaming Engine. The default port is 1935. To enable Wowza Streaming Engine to use a different TCP port for HLS streaming do the following:
- In Wowza Streaming Engine Manager, click the Server tab, and then click Virtual Host Setup in the contents panel.
- In the Virtual Host Setup page, click Edit in the Basic tab.
- Scroll down to the Host Ports section of the page and click Edit (pencil icon) for the Default Streaming item.
- Add your desired port number to the comma-separated Port(s) list (for example, 1935,80), and then click Apply.
- Click Save, and then restart the application to apply the changes.
For more information, see Configuring streaming ports.
Alternatively, configure Wowza Streaming Engine to use a different TCP port for HLS streaming in XM::
- 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>
- Restart Wowza Streaming Engine 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 the port forwarding rules on your router don't affect your streaming ports.
Add HLS debug logging
You can log extra debug information to verify that the HLS implementation in Wowza Streaming Engine is running correctly. HLS debug messages are logged in the [install-dir]/logs/wowzastreamingengine_access.log file.
To configure Wowza Streaming Engine to add HLS debug information to the log file, do the following:
- In Wowza Streaming Engine Manager, click the Server tab, and then click Virtual Host Setup.
- 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.
- In the Custom section, click Edit.
- 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.
- Path - Select /Root/VHost.
- Click Save, and then restart the application when prompted to apply the changes.
Alternatively, configure Wowza Streaming Engine to add extra HLS debug information to the log file using XML:
- 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 in the file.
<Property> <Name>cupertinoAdapterDebugLog</Name> <Value>true</Value> <Type>Boolean</Type> </Property>
- Restart Wowza Streaming Engine 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_
Tip: To enable the extra HTTP Adapter logging for all protocols, repeat the steps above but use httpAdapterDebugLog as the custom property.
Add chunk logging
Enable additional chunk logging using the maxChunkLogCount property.
To configure Wowza Streaming Engine to use the maxChunkLogCount, do the following:
- In Wowza Streaming Engine Manager, click the Applications tab, and then select your application on the content menu.
- 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.
- In the Custom section, click Edit.
- 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.
- Path - Select /Root/Application/LiveStreamPacketizer.
- Click Save, and then restart the application to apply the changes.
Alternatively, configure Wowza Streaming Engine to use the maxChunkLogCount using XML:
- Use a text editor to open the [install-dir]/conf/[application-name]/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 in the file.
<Property> <Name>maxChunkLogCount</Name> <Value>0</Value> <Type>Integer</Type> </Property>
A value of 0 logs all TS chunks created. A value greater than 0 (n) logs the first n chunks created.
- Restart Wowza Streaming Engine to apply the changes.
Note: For help debugging time drift issues or audio/video out-of-sync issues, see Debug AAC or MP3 timecode issues with HLS packetization in Wowza Streaming Engine.
Review logs
Review log messages to monitor the HLS implementation in Wowza Streaming Engine. 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.
It's a good idea to review log files frequently and regularly to identify potential issues before they escalate.
The following are typical log messages for an HLS playback session using a Wirecast encoder for the source stream:
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 -
Improve HLS playback on Android devices
Android OS 4.0 or later supports HLS, but playback may not be smooth. Use the cupertinoOnChunkStartResetCounter custom property to try to improve playback on Android.
To reset the chunk counter in Wowza Streaming Engine Manager:
- Click the Applications tab and then click the name of your application.
- 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.
- In the Custom section, click Edit.
- Click Add Custom Property, specify the following settings in the Add Custom Property dialog box, and then click Add:
For a Live applicationFor a VOD application- 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.
- Path - Select /Root/Application/LiveStreamPacketizer.
- Click Save, and then restart the application to apply the changes.
Alternatively, reset the chunk counter in XML:
- 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 in the file.
<Property> <Name>cupertinoOnChunkStartResetCounter</Name> <Value>false</Value> <Type>Boolean</Type> </Property>
- Restart Wowza Streaming Engine to apply the changes.
Follow the client/server communications flow
A typical HLS streaming session uses the following exchanges.
The client initiates streaming by sending an HTTP GET request to the server.
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 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 Cache-Control: no-cache Date: Thu, 02 Apr 2015 17:01:00 GMT Content-Type: application/vnd.apple.mpegurl Content-Length: 137
The server sends the client a chunklist, which is 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 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 Cache-Control: no-cache Date: Thu, 02 Apr 2015 17:01:01 GMT Content-Type: application/vnd.apple.mpegurl Content-Length: 2247
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 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 Cache-Control: no-cache Date: Thu, 02 Apr 2015 17:01:01 GMT Content-Type: video/MP2T Content-Length: 905032
Before the client reaches the end of the chunklist, another request is issued for the next chunklist. Since this is a new request, the server can respond with a chunklist of media files with a different bitrate, resulting in dynamic, adaptive bitrate switching between different renditions 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 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
Fix 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 corrupted. You can configure Wowza Streaming Engine to ignore the profile-level-id value in the SDP data and instead derive this value from the sprop-parameter-sets value.
To derive an ID value from sprop-parameter-sets in Wowza Streaming Engine Manager:
- Click the Applications tab and select your application in the contents panel.
- 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. - In the Custom section, click Edit.
- 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.
- Click Save, and then restart the application when prompted to apply the changes.
Alternatively, set the custom property in XML:
- Use a text editor to open the [install-dir]/conf/[application-name]/Application.xml file for your live application and add the following property to the RTP/Properties container. Be sure to add the properties to the correct <Properties> container in Application.xml, as there are several in the file.
<Property> <Name>rtpIgnoreProfileLevelId</Name> <Value>true</span><span class="tag"></Value> <Type>Boolean</span><span class="tag"></Type> </Property>
- Restart Wowza Streaming Engine to apply the changes.
Use Apple troubleshooting tools
Apple provides its own tools for troubleshooting HLS playback, including the Media Streaming Validator tool. For information, see About Apple's HTTP Live Streaming Tools on the Apple Developer website.
Test stream URLs
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 About deploying Wowza Streaming Engine on Amazon.
You may also use our H.264 test stream, which is a H.264 test VOD clip.
More resources
- Understanding protocols and output formats supported by Wowza Streaming Engine
- Players and playback
- Configure HLS packetization in Wowza Streaming Engine
- Turn off data event processing for HLS streams in Wowza Streaming Engine
- Debug AAC or MP3 timecode issues with HLS packetization in Wowza Streaming Engine
- Configure Wowza Streaming Engine to packetize HLS audio using TS chunks
- Improve playback of lower-latency HLS streams from Wowza Streaming Engine
- Add RTSP debug logging