Search code examples
jwplayerwowzaplaylistsadaptive-bitrate

jwplayer adaptive bit rate for ipad using playlists


I am trying to setup ABR with JWplayer 6.9 (Wowza 4.0.3 is the streaming server).

Wowza Transcoder AddOn is disabled. That means that if we call wowza to get a playlist for a certain video file, it automatically returns a m3u8 format with only that file, but not all existing streams for that file. see how to do it, for smil files is fine but not for playlist (https requests, for Ipad)

By default, for only one stream, jwplayer request:

https://wowza-test/vod/sample-a.mp4/playlist.m3u8

Returns:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2046111,CODECS="avc1.77.31, mp4a.40.2",RESOLUTION=960x540
chunklist_w1793638657.m3u8

which works.

I am trying to setup this in JWplayer so it gets a playlist file like the above but with multiple streams and then shows the icon to change between streams.

First atempt(playlist.m3u8):

Changes in jwplayer: 'sources':[{ file: "/files/playlist.m3u8" }],

playlist.m3u8 file:

#EXTM3U
#EXT-X-VERSION:3

#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2046111,CODECS="avc1.77.31,mp4a.40.2",RESOLUTION=960x540
https://wowza-test/vod/sample-a.mp4?id=489gde9-a33z400

#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1023055,CODECS="avc1.77.31,mp4a.40.2",RESOLUTION=480x270
https://wowza-test/vod/sample-b.mp4?id=489gde9-a33z400

===============================================================

Second attempt: (changed jwplayer code: file: "/files/video.smil")

Changes in jwplayer: 'sources':[{ file: "/files/video.smil" }],

Smil File(/files/video.smil):

<smil>
    <head><meta base="https://wowza-test/vod/" /></head>
    <body>
    <switch>
        <video src="mp4:sample-a.mp4/playlist.m3u8" system-bitrate="2046111" width="960" height="540" />
        <video src="mp4:sample-b.mp4/playlist.m3u8" system-bitrate="1023055" width="480" height="270" />
    </switch>
    </body>
</smil>

None of the options above will make a successfull request to Wowza... How can I send different streams in jwplayer using playlists?


Solution

  • As a server-side solution this has worked

    JWplayer changes:

     'sources':[{ file: "**https://wowza-test/smil:sample.smil/playlist.m3u8**" }]
    

    Wowza changse: Created SMIL file. When receiving an http request to that SMIL file, Wowza sends a response with the playlist file as this is the format send in the request ("/playlist.m3u8")

    SMIL FILE:

    Play list sent back to jwplayer:

    #EXTM3U
    #EXT-X-VERSION:3
    #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2046111,RESOLUTION=960x540
    chunklist_w1569082401_b6064000_sleng.m3u8
    #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1023055,RESOLUTION=480x270
    chunklist_w1569082401_b6064000_sleng.m3u8
    

    NOTE: Ipad will still "work" with this request, but it won't display the icon to change between bitrate (HTML5 limitation with tag). - Normal browsers using Flash will display the bitrate selection icon -.

    Thanks to Ethan from JWplayer for his help.