Wowza Community

Wowza origin-edge ABR jwplayer stream switching problem

Hi,

I have a simple configuration:

1- An Origin Server that does Transcoding (240p, 360p, …) so all renditions streams are available all the time

2- An Edge Server that pulls from the Origin, so rendition stream is connected when pulled

3- Jwplayer using SMIL to play in ABR mode from the edge

My problem is:

  • When Jwplayer starts playing it pulls from the edge a rendition let’s say the 240p

  • If I change jwplayer size (browser size) I clearly see the higher 360p stream getting called on the Edge Server side:

INFO stream play wowz://X.X.X.X:1935/1234/definst/5678_360p

BUT the “switchPlay” never gets called and jwplayer is stuck on the same rendition and noway to switch it manually to another rendition and a refresh is the solution.

INFO server comment - MediaStreamMediaCasterPlay: switchPlay

  • Now, if I start allover again and pause jwplayer and switch to each rendition manually, then put back jwplayer to auto, then resize jwplayer then everything works fine and I see the expected logs

INFO stream play wowz://X.X.X.X:1935/1234/definst/5678_360p

INFO server comment - MediaStreamMediaCasterPlay: switchPlay

It looks like the first play coming from jwplayer is pulling the stream from the origin to the edge correctly but the one when switching has a problem (that’s why when I kick it manually it works fine)

Any idea what could be the problem?

Thanks

Humam

Hello,

You will need to make sure that the transcoded streams are published (pulled) by the edge server when trying to connect your adaptive streaming playback client. In order to a successful switch between one stream to another, at the time of playback, the streams need to be published on the edge server so that they are properly key frame aligned in order for the switch to work.

Please follow the instructions described in the “How to lock multi-bitrate streams on live stream repeater edge” as it contains detailed information on how to properly configure the workflow you are using.

Zoran

Hi Zoran,

This brings us back to the same question :slight_smile: (read my main question again please)

I’m using (and MUST use) transcoding on the Origin and the clients pull from the Edge “amlst:…/jwplayer.smil” (it makes no sense to make multiple machines redo transcoding of the same stream!)

The problem is that for ABR, JWPlayer cant make the rendition kicks in. The stream is transcoded on the origin by Wowza so all of them are aligned and the proof is that if I kick in the other renditions manually from another browser then the first browser (jwplayer) will be able to switch to the other rendition flawlessly.

If the Origin does not know anything about the edge until it is connected (which makes sense) then once connected it makes no sense that the edge does not know about the renditions of on the Origin for the same stream, make sense?

We are thinking -as a workaround- to connect all the renditions in the stream alias module when the first user connect but then I have to manage when to disconnect when the last user disconnect after a timeout.

Could you validate this workaround with Wowza engineers and tell us if there are any point that we should be aware of or if this will not work at all?

Thanks,

Humam

Any Support on this one Guys :confused:

Thanks,

Humam

Hi,

This will now be handled in the created ticket (126544).

Jason

Hi,

In an origin/edge setup, you can use any of the two option. You can transcode your streams on the origin server and lock the transcoded streams on each of the edge server, as described in the previous message. Please note that between the edge and origin server, there will be only one connection for each of the transocoded outputs, regardless of how many clients are connected to that stream on the edge server.

The second option is to only have one connection between the origin and the edge server and then do the transcoding on the edge server. This will reduce the bandwidth consumption between the origin and the edne, but your edge servers will need to have sufficient CPU resources for transcoding the incoming streams.

You don’t have to manually crate the SMIL files on the edge server. It is possible to programatically generate them using the Media List http provider. This is described in the How to use Java API calls to resolve SMIL file requests (AMLST) forum article.

Zoran

Hi Zoran,

Thanks for the explanation.

I have some concerns about this solution:

  • One of the benefits of ABR is to save bandwidth and the proposed solutions is throwing a lot of bandwidth in the air (we have about 100 streams * 4 transcoders if all are up then at least 50% are thrown away)

  • I think that it is very hard to maintain a large scale deployment and load balancing this way (creating and modifying XML alias files). I think that the PULL pattern of Wowza is intended to remove the dependency down the chain

Could you please consult with Wowza engineers if there is a solution or a workaround with the above configuration? We don’t mind writing all the needed modules but we need some kind of blueprint for the way to go, cause trial and error might take forever and Wowza internal flow is not documented anywhere.

Thanks,

Humam