JWPlayer 6 on all major devices

What is the best way to embed JWPlayer 6 so it works on the desktop, iOS, and android? We have videos in mp4 format and I originally configured the player to use HLS with download fallback, but I ran into a bunch of issues:

  1. Delayed start time, and a few second delay every time you seek

  2. Firefox and IE sometimes shows very pixelated and blocky video. Happens sometimes when you seek or when the video changes key frames.

So then I configured it to use RTMP as the primary, then HLS as secondary, and download fallback. RTMP seeks way faster than HLS and it never gets pixelated or blocky. Why is that? It’s the exact same video. I realize this might be a question for the folks over at JWPlayer, but I thought I’d ask you guys too.

Originally, I wanted to stay away from RTMP if possible because it’s a heavier protocol. Perhaps I’m not embedding the player correctly. Here’s a link to some sample videos: http://loopbacksolutions.com/wp/wowza-jwplayer-examples/

The first video is HLS with download fallback. The second one is RTMP, followed by HLS, with download fallback. First, notice Notice how much faster the RTMP seeks. Also notice that in firefox the HLS gets pixelated and blocky sometimes when you seek.

Any suggestions?

Also, one more thing. If a video hasn’t been watched for 15 or 20 minutes, it takes 15 - 30 seconds to start a video. Once one video has been watched though, any subsequent attempts to watch any video has a much reduced start time. Any ideas how to correct that? We have wowza configured to pull the videos off of a network share and I’m wondering if that plays into this.

Thanks,

Sean

Hi Sean,

The main reason for the differences are in how each of the different methods deliver the video.

HLS delivers the videos in separate chunks or segments that are requested by the player as it needs them. The size of the chunks is determined by the cupertinoChunkDurationTarget property setting (default 10 seconds) and the key frame interval. Chunks are created at key frame boundaries so will be as close to the chunk duration target as the key frames will allow. For the best results, you should use a key frame interval that will multiply evenly to the chunk duration target. You can set the chunk duration target to a different value by setting the following property in the HTTPStreamer / Properties in your Application.xml or in Application > Properties > Custom Properties in the Wowza Streaming Engine Manager.

<Property>
	<Name>cupertinoChunkDurationTarget</Name>
	<Value>10000</Value>
	<Type>Integer</Type>
</Property>

Because of the size of the chunks and the fact that the player needs to request them on demand, the delay that you are seeing is the time taken for this request. If you are close on your bandwidth then you will have to wait longer for the first chunk to be delivered.

In contrast, rtmp playback will start and seek a lot quicker because the player only needs to fill the playback buffer in order to start initially or after a seek request. The default rtmp buffer setting on JW player is 3 seconds and Wowza will send out a complete buffer duration of video as fast as the network connection will allow so it will normally fill in less time. Again, the closer the bandwidth is to the bitrate, the longer this will take.

Once the stream is running, rtmp will push out the stream data at roughly the video bitrate so that the player buffer remains full.

I wouldn’t go as far as saying that rtmp is a heavier protocol than HLS. It is public demand and the fact that iOS devices do not support flash that has made HLS so popular. RTMP is still probably the best option for flash based players or alternatively HDS which is a protocol similar to HLS but is designed around flash.

In an attempt to make player configuration simpler, JW Player has developed their own HLS implementation that will allow the HLS streams to play back in a flash player. As you are finding out, this is not as good as native HLS playback in iOS or Mac safari or RTMP in flash. The problems you are seeing in firefox and explorer are most likely player related as Wowza does not differentiate between players for HLS requests and will do the same thing each time to deliver the chunks.

I would suggest working with the team at JW Player to provide them with as much useful feedback as possible. As I mentioned in your other thread, set the player to use html5 as the primary on your HLS player and compare the results using Safari on a Mac OSX machine.

Lastly, from you description, it does sound like you may be using MediaCache to access your storage from your Wowza server. The old content will be flushed from MediaCache if it hasn’t been viewed for a while. If this is the case, have you tuned the MediaCache Settings or are you using the default settings.

You can adjust the TTL settings so that the content remains in the cache for longer and also the default block size so that you best utilise the network connection between the Wowza server and the storage.

If you are still having issues then please do send a request to Wowza Support where someone will be able to assist.

Roger.

What is the best way to embed JWPlayer 6 so it works on the desktop, iOS, and android? We have videos in mp4 format and I originally configured the player to use HLS with download fallback, but I ran into a bunch of issues:

Sean

Honestly, I do not have any of the issues that you say you have with my VOD streams. That is probably because I use Amazon Cloudfront.

I think it is probably network or server performance that is letting you down.

I’m getting the exact issue (having problem especially while changing the ABR rates). When i change the BitRate, the Video got back to the start for 1~3 second. This is so ugly :eek: The transition is NOT SMOOTH at all. (I also used the original Bigbuckbunny ABR Files).

Please kindly check here: http://122.248.255.215/player/

Regards,

Arkar

Regarding the issue of the slow start. We’re not using MediaCache.

In that case, you should look at integrating MediaCache into your workflow. As I mentioned, it is tunable so you can get the best results from it. It makes requests for content in much larger blocks than with direct access so the OS on both sides do not have to work as hard to service these requests.

What you are probably seeing is the OS level caching of the networked content being flushed.

For Wowza Media Server <= 3.6.4, Mediacache is available as a plugin. For Wowza Streaming Engine, it is built in.

How to scale video on demand streaming with Media Cache

Roger.

Sean.

HLS does not require streaming server like RTMP does. It is just HTTP. HLS via Cloudfront is just like any web server but distributed via edge servers and in my tests was very fast.

What is not mentioned here is that there is a whole lot of work involved in the background to create the HLS playlists and media segments to upload to the web server. Wowza does this automatically on the fly when the mp4 file is read. If you change the mp4 file then everything is updated automatically.

Roger.

Does not go back to start for me. It does go to black screen for a second or two.

As is with the person above, I have perfect harmony with Amazon Cloudfront and JW Player with RTMP + HLS + MP4

I do not really understand why anyone use Wowza for VOD when serving from Cloudfront is way cheaper. ( unless you are self hosting)… live video I understand.

shueardm,

No offense, but you should not reply to posts if you don’t have any useful insight. Since you’re not using wowza for VOD then why are you chiming in? Why are you on the wowza support pages telling people not to use Wowza?

Also, we’re a hosting company that owns our own bandwidth and servers, and each of our streaming clients push several terabytes of data per day, so no, Amazon CloudFront would not be cheaper; in fact it would be insanely freaking expensive.

I’m annoyed that I got online this late to read your useless post.

I am sorry that you misunderstood my post and the quote you pulled from me was not to you anyway

You clearly must be tired and feeling like lashing out at anyone who does not solve your problem.

My point is that when the bandwidth is there, properly encoded video can be very fluidly streamed to JW Player, I have JW Player, I also been using Wowza, I stream VOD and your question was "“What is the best way to embed JWPlayer 6 so it works on the desktop, iOS, and android?”.

So get off your bloody high horse, get some sleep and see that I gave you an idea about why you might have an issue.

Yeah ok, my reply was pretty snarky. I guess I took offense that you questioned our decision (me and the other guy who posted) to use wowza without understanding our situation. Also, you didn’t read my post very thoroughly otherwise you would have seen that I have it working with JWPlayer, and quite nicely too. I even gave a link to an example. My problem is with HLS streaming in certain browsers, and the fact that HLS has slower seek and start times than RTMP. I originally didn’t want to use RTMP, but as I said in my post, I now have it setup to use RTMP as primary, followed by HLS streaming, and then with download as a fallback. My questions revolved around those things.

Anyway, my point is that if you read my post thoroughly you’ll see that network and/or server performance is probably not the issue, and it’s more likely to be an encoding problem.

I apologize for “lashing out”.

Now I’m going to sleep.

Hi Roger,

Thank you for the detailed and thorough response. I all makes a lot more sense now.

Regarding the issue of the slow start. We’re not using MediaCache. I simply pointed the content directory at a network share for that particular application. I’m fairly certain it has something to do with that, but I’m not sure how to fix it. Like I mentioned, the very first request takes 15 - 30 seconds, but then every other request is quick, even for completely different videos that are in different sub-folders within that network share. Then if no video is watched for some time period (greater than 10 minutes but less than 30), it again takes 15 - 30 seconds to start a video… Should I start a new thread for this?

Thank you,

Sean

Shueardm,

how did you test serving the HLS stream using cloudfront? I’m not very familiar with how cloudfront streams media, other than I know you can use various media servers (like wowza) with it…

In that case, you should look at integrating MediaCache into your workflow. As I mentioned, it is tunable so you can get the best results from it. It makes requests for content in much larger blocks than with direct access so the OS on both sides do not have to work as hard to service these requests.

What you are probably seeing is the OS level caching of the networked content being flushed.

For Wowza Media Server <= 3.6.4, Mediacache is available as a plugin. For Wowza Streaming Engine, it is built in.

How to scale video on demand streaming with Media Cache

Roger.

Thanks Roger I will definitely look in to MediaCache!

Sean.

HLS does not require streaming server like RTMP does. It is just HTTP. HLS via Cloudfront is just like any web server but distributed via edge servers and in my tests was very fast.

However, as you recently pointed out, you have all the backend not to require or warrant it.

HLS with JW Player requires Premium edition on desktop in flash, I only have Pro currently but did test the Enterprise edition for 3 weeks and found HLS worked very well. I still deliver HLS to iOS devices because it plays natively and so JW Player switches to HTML 5 mode on iOS. So my setup is RTMP first source, HLS second source, MP4 progressive third source for those bloody android people :slight_smile:

Regs

Ahh yeah, I forgot that HLS just needs a HTTP server… Ok, so our player config is the same then, RTMP->HLS->Progressive. Thanks, this makes me feel better about my configuration. I can live with the 1 - 2 second seek time for iOS devices, so the only thing I really need to solve now is the issue with the first request taking a while.

Appreciate your insight.

Sean

What is not mentioned here is that there is a whole lot of work involved in the background to create the HLS playlists and media segments to upload to the web server. Wowza does this automatically on the fly when the mp4 file is read. If you change the mp4 file then everything is updated automatically.

Roger.

That’s a darn good point Roger…

I’m getting the exact issue (having problem especially while changing the ABR rates). When i change the BitRate, the Video got back to the start for 1~3 second. This is so ugly :eek: The transition is NOT SMOOTH at all. (I also used the original Bigbuckbunny ABR Files).

Please kindly check here: http://122.248.255.215/player/

Regards,

Arkar

Does not go back to start for me. It does go to black screen for a second or two.

As is with the person above, I have perfect harmony with Amazon Cloudfront and JW Player with RTMP + HLS + MP4

I do not really understand why anyone use Wowza for VOD when serving from Cloudfront is way cheaper. ( unless you are self hosting)… live video I understand.

I am sorry that you misunderstood my post and the quote you pulled from me was not to you anyway

You clearly must be tired and feeling like lashing out at anyone who does not solve your problem.

My point is that when the bandwidth is there, properly encoded video can be very fluidly streamed to JW Player, I have JW Player, I also been using Wowza, I stream VOD and your question was "“What is the best way to embed JWPlayer 6 so it works on the desktop, iOS, and android?”.

So get off your bloody high horse, get some sleep and see that I gave you an idea about why you might have an issue.

Ok, lets move past it.

In my own personal tests, I have not run into these problems ( using JW Player and Cloudfront). I do only have a JW Pro lic but I did test for 3 weeks a Enterprise lic, the HLS delayed start and issues you see ( and I see from your samples) were not happening for me.

Your encoder is? I use Sorenson Squeeze 9 Pro, very happy.

This is interesting. However I just want to mention again., when I tested Enterprise Edition JW Player and HLS playback was very smooth and responsive. ( I was using Cloudfront)

also, Roger said "As I mentioned in your other thread, set the player to use html5 as the primary on your HLS player " - unfortunately he can not do this as HLS playback in JW PLayer is only available in Flash mode ( on the desktop)… EDIT. Maybe I am wrong and it will play HTML5 in the Safari on Mac ( didnt read properly again)

Shueardm,

how did you test serving the HLS stream using cloudfront? I’m not very familiar with how cloudfront streams media, other than I know you can use various media servers (like wowza) with it…

Sean.

HLS does not require streaming server like RTMP does. It is just HTTP. HLS via Cloudfront is just like any web server but distributed via edge servers and in my tests was very fast.

However, as you recently pointed out, you have all the backend not to require or warrant it.

HLS with JW Player requires Premium edition on desktop in flash, I only have Pro currently but did test the Enterprise edition for 3 weeks and found HLS worked very well. I still deliver HLS to iOS devices because it plays natively and so JW Player switches to HTML 5 mode on iOS. So my setup is RTMP first source, HLS second source, MP4 progressive third source for those bloody android people :slight_smile:

Regs

What is not mentioned here is that there is a whole lot of work involved in the background to create the HLS playlists and media segments to upload to the web server. Wowza does this automatically on the fly when the mp4 file is read. If you change the mp4 file then everything is updated automatically.

Roger.

I just use Sorenson Squeeze Pro which does that, or do you mean something else