Wowza Community

iPhone App Rejected -- M3U8 File is invalid

Hi there,

I’m having trouble submitting my app to the AppStore.

Apple is telling me that I need a baseline stream of 64k in order for my app to be approved for both WiFi and the cellular network (3G, Edge).

They told me to download the mediastreamvalidator tool (mac only) to run tests against my streams. To download, go to connect.apple.com, click “Downloads”, click “iPhone”, and click “HTTP Live Streaming Tools (Disk Image)”.

In bash, I’m running the following:

mediastreamvalidator validate --platform=iphone --os=3.1 http://stream2.xyzmp3.com/spirit1_iphone/stream.sdp/playlist.m3u8

Here are the results:

Validating http://stream2.xyzmp3.com/spirit1_iphone/stream.sdp/playlist.m3u8 against iPhone OS 3.1.0
Validating child playlist http://stream2.xyzmp3.com/spirit1_iphone/stream.sdp/playlist.m3u8?wowzasessionid=1407131978 [100.00 kbit/s]
ERROR: Child playlist is invalid. A detailed report for the playlist follows this report.
http://stream2.xyzmp3.com/spirit1_iphone/stream.sdp/playlist.m3u8?wowzasessionid=1407131978
WARNING: The playlist should use relative URIs to reduce its size.
WARNING: Playlist Content-Type is 'application/x-mpegurl', but should be one of 'application/vnd.apple.mpegurl', 'audio/x-mpegurl' or 'audio/mpegurl'.
-----------------------------------------------------------------------------------------------------------------------
REPORT FOR CHILD PLAYLIST 'http://stream2.xyzmp3.com/spirit1_iphone/stream.sdp/playlist.m3u8?wowzasessionid=1407131978'
-----------------------------------------------------------------------------------------------------------------------
WARNING: INF tag with duration 2 seconds above the playlist's target duration (5.000 seconds).
5:    #EXTINF:20,
              ~~ 
WARNING: INF tag with duration 2 seconds above the playlist's target duration (5.000 seconds).
7:    #EXTINF:20,
              ~~ 
WARNING: Playlist Content-Type is 'application/x-mpegurl', but should be one of 'application/vnd.apple.mpegurl', 'audio/x-mpegurl' or 'audio/mpegurl'.
ERROR: Invalid response from the validator helper: a track is missing the 'type' property.
6:    http://stream2.xyzmp3.com/spirit1_iphone/_definst_/stream.sdp/media_4299.ts?wowzasessionid=1407131978
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
WARNING: Media segment bitrate outside of target playlist bitrate by 75.285 % (24715 vs. 100000 bps, limit is 10 %).
6:    http://stream2.xyzmp3.com/spirit1_iphone/_definst_/stream.sdp/media_4299.ts?wowzasessionid=1407131978
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ERROR: Invalid response from the validator helper: a track is missing the 'type' property.
8:    http://stream2.xyzmp3.com/spirit1_iphone/_definst_/stream.sdp/media_4300.ts?wowzasessionid=1407131978
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
WARNING: Media segment bitrate outside of target playlist bitrate by 74.897 % (25102 vs. 100000 bps, limit is 10 %).
8:    http://stream2.xyzmp3.com/spirit1_iphone/_definst_/stream.sdp/media_4300.ts?wowzasessionid=1407131978
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ERROR: Playlist must have at least 3 media URIs if it does not have an ENDLIST tag.
Average segment duration: 19.47 seconds
Playlist target bitrate: 100.00 kbit/s
Average segment bitrate: 24.91 kbit/s (-301.46 % of target)
Video codec: avc1
Video resolution: 320x240 pixels
Video frame rate: 7.44, 7.46 fps
H.264 profile: Baseline
H.264 level: 3.0

Is there anyway to modify the M3U8 files?

Apparently, I need to change “EXTINF:20” to “EXTINF:5”, change the Content-Type from “application/x-mpegurl” to “audio/x-mpegurl”, and add “ENDLIST” to the end of the file.

Thanks for your help in advance!

Install this patch. It should clear up these issues (be sure to update files in conf folder of patch as well):

WowzaMediaServer2.0.0-patch9.zip

Charlie

Are any of the streams video only or audio only? I fixed the an audio only problem but there might a problem with video only streams. I don’t think I can fix. I think this is a problem with their tool.

Charlie

I will check on the video only issue. There may be a way to make this work.

Charlie

I have a question into Apple. I played around with their segmenter and it does look like video-only is an option. It almost looks like they create a fake audio stream that is empty. I will see what they respond with.

Charlie

Thanks for the info.

Charlie

Download and install this patch:

WowzaMediaServer2.0.0-patch9.zip

Charlie

Install patch11:

http://www.wowza.com/devbuild.html

I fixed this issue.

Charlie

Install this patch (be sure to update the config files in the conf folder of the patch):

WowzaMediaServer2.0.0-patch9.zip

Charlie

OK, let’s back up. Describe in detail your setup. what are you trying to do? What type of content are you trying to stream. What is the whole story?

Charlie

Again, as noted on the support email, you have to supply a 64bit version. Take a look at the multi-bitrate Video On Demand sections of these guides:

Video on Demand

http://www.wowza.com/community/t/-/64

Live Streaming

https://www.wowza.com/docs/how-to-set-up-live-streaming-using-an-rtmp-based-encoder

And apply the latest patch in any case.

Richard

Okay. I suggest you apply the latest patch, and supply a 64kbs version, then see if that gets accepted.

Richard

As far as I know, you should be referencing a smil file following the guide:

https://www.wowza.com/docs/how-to-set-up-live-streaming-using-an-rtmp-based-encoder

I add a 64kbs option:

<smil>
	<head>
	</head>
	<body>
		<switch>
			<video src="myStream_700" system-bitrate="700000"/>
			<video src="myStream_350" system-bitrate="350000"/>
			<video src="myStream_200" system-bitrate="200000"/>
			<video src="myStream_64" system-bitrate="64000"/>
		</switch>
	</body>
</smil>

That would seem to take care of the warning:

WARNING: The playlist should use relative URIs to reduce its size.

Richard

As far as I know you can do both. Serve a smil file with playlist.m3u8 like this:

http://[wowza-address]:1935/[appName]/smil:yourSmil.smil/playlist.m3u8

Where “yourSmil.smil” is a smil file in the Wowza content folder along-side the videos.

Richard

We cleared up the error

ERROR: Playlist must have at least 3 media URIs if it does not have an ENDLIST tag.

by changing the value of chunk count from 2 to 3 in the Application.xml

(LiveStreamPacketizer/Properties/Property/playlistChunkCount)

From Figmented’s report:

ERROR: Invalid response from the validator helper: a track is missing the ‘type’ property.

6: media_22.ts?wowzasessionid=1357219487

According to Apple’s HTTP Live Streaming Overview pdf, page 12, it says the m3u8 files should be ‘application/x-mpegURL or vnd.apple.mpegURL’

Figmented’s report says it should be either ‘application/vnd.apple.mpegurl’, ‘audio/x-mpegurl’ or ‘audio/mpegurl’

I’ve patched my 2.0 installation with patch9, and when I wget -S the m3u8 files with a wowzasessionid and without I get the following:

HTTP request sent, awaiting response…

HTTP/1.0 200 OK

Date: Wed, 03 Mar 2010 22:03:10 GMT

Content-Type: application/vnd.apple.mpegurl

Server: FlashCom/3.5.2

Cache-Control: no-cache

Content-Length: 146

Length: 146 [application/vnd.apple.mpegurl]

I’ve patched up to patch9 but there is the lingering ‘type’ error.

Ah, my apologies. I’m a coworker with Figmented. We’re trying to get an iphone app passed that has live streaming video.

We had the app rejected with vague details on what didn’t pass inspection. From what we could tell it’s the video part that’s holding it up.

We’re using Wowza 2.0 (patched today to patch9). One of the techs pointed us out to the stream validator program. Its output is a little vague but we believe that there were two problems:

  • Our Application.xml had a chunk count of 2 but Apple wants 3 (or more) for live streaming.
  • It said we needed a baseline stream of 64k +/- 10%. This is to accommodate both wifi and 3G connectivity.
  • It says the ‘type’ of the media_XXX.ts chunk is missing or invalid. According to the docs, it needs to be application/vnd.apple.mpegURL or similar. According to wget -S the mime type should work

I think you hit the nail on the head. We re-enabled audio and that ‘type’ problem of the .ts files goes away.

While we were initially trying to troubleshoot the problem we limited bandwidth to 60k, then 32k, then 48k. To get the best video quality we disabled audio.

It turns out to pass inspection from the mediastreamvalidator program with a live feed you need audio or audio+video at 64k and a chunk count of 3.

Wow, a total of 64k for audio & video? That’s gotta look & sound just wonderful. :slight_smile:

I wonder how many people actually continue to run that rate after getting in the appstore? :slight_smile:

–Chris

Well in the documentation, Apple says you can have multiple feeds each at a different bitrate. But it’s mandatory that you have at least an audio, audio+video, or audio+image feed at 64kbps for 3G users.