HTTP 503 on ABR requests using nginx-vod-module

Hi there!

I’m having an issue that have not managed to solve reading the forum and the github project.

I have installed a all in one RPM based installation. All is working, so I can ingest and encode content. Created a new player and I can play content using progressive download.
The issue is when I used HLS or DASH, where I get an HTTP 503 error. looking in the nginx logs, I find this:

{…} *1570 media_set_parse_json: failed to parse json -1: expected digit got 0x0 while sending to client, {…}

Any clue?

Thanks for the help!

Hi @NAmorim1,

More info is needed.
Please follow my last reply here:


where I explain exactly how it should work. The conf samples in that thread refer to both Apache and Nginx working over SSL because that’s what the original poster wanted to accomplish but if you’re operating over HTTP instead, the configuration will still be very similar.

Also see my explanation here about how to debug the issue by looking at the requests being made during playback:

Lastly, make sure internal_ip_range in /opt/kaltura/app/configurations/local.ini is set correctly.
You can try:
internal_ip_range = 0.0.0.0-255.255.255.255
which basically means allow from anywhere in order to test.
After modifying the value, do not forget to reload the Apache.

Hi @jess,

Many thanks for the reply. I checked those replies and went through them to no avail.

I have tried to change the internal ip range to the proposed one and indeed it worked. The strange thing is that my internal network is 10.0.1.0/24 and I had configured “internal_ip_range = 10.0.1.0-10.0.1.255”. So probably it’s not using the internal network and going through the public one. Will double check that.

On a side note, what are the valid values for “default_delivery_type” in /opt/kaltura/app/configurations/base.ini? Are the ones in the streamer_type column in the delivery_profile table?

Cheers

Hi @NAmorim1,

Yes, if you have several network interfaces, I suspect that is the reason.
The code that handles it is here:
/opt/kaltura/app/alpha/apps/kaltura/lib/request/kIpAddressUtils.php
I suggest you add some debug prints to it to confirm.

As for default_delivery_type, see some details here:

However, since player version 2.48, the default playback method is always HLS, using the HLS.JS lib, unless, the video is shorter than short_entries_max_duration as set in /opt/kaltura/app/configurations/base.ini [300 seconds by default], in which case, the playback method will be progressive [HTTP] since for short videos, using adaptive bitrate algorithms provides no added value.

If you do not wish HLS to be the default, that can be disabled by setting disableHLSOnJs = true in the player’s config [UI conf] under KMC->Studio under the UI vars section.

Hi @jess,

Those instructions are a bit confusing.
On one side there’s the reference to the streamer_type column, with three values ‘applehttp’,‘mpegdash’,‘hdnetworkmanifest’.
In the next example the value ‘default_delivery_type = http’ is changed to ‘default_delivery_type = hds’. Which is it?

I want to use mpeg-dash. So I changed ‘default_delivery_type = mpegdash’ and added the UI conf setting ‘disableHLSOnJs = true’. It does progressive download.

Hello,

I agree with you that it is a bit confusing…

Let me explain. First, make sure you’re using version 2.48.1 of kaltura-html5lib. You didn’t mention which CE version you have installed but 12.3.0 [latest stable] is the one you want.

To check the player’s version, run:
# rpm -q kaltura-html5lib
or:
# dpkg -l kaltura-html5lib
Depending on whether you’re using a deb or RPM based distro.

The player’s version is also logged to the JS console so you can see it using the browser’s devtools when loading a page that has the player embedded to it.

Once that’s confirmed, in KMC->Studio->Plugins

  • Under the “UI variables” section, add:
    dash.plugin: true
    disableHLSOnJs: true

To confirm DASH playback, check the requests made by the player, you should find one similar to:
/playManifest/entryId/0_t05wzliz/flavorIds/0_jh97oj1v,0_p5l8fqrs,0_gat2m6g0/format/mpegdash/protocol/https/a.mpd

Followed by:
serveFlavor/entryId/0_t05wzliz/v/12/flavorId/0_,jh97oj1v,p5l8fqrs,gat2m6g0,/forceproxy/true/name/a.mp4.urlset/manifest.mpd

If you open manifest.mpd you should see a DASH manifest.

As for the default_delivery_type directive in base.ini, no need to touch it when making the player configuration changes listed above but in general, the options there are ‘hds’, ‘hls’ and ‘dash’.

Hi @jess,

That was the missing bit on this, the Universal DRM. It worked even without the “dash: true” variable.

Great, now off to DRM activation. Thanks for the help.

Great, glad to hear we’re good.

After looking into it a bit further, it seems if you set the following UI vars:
dash.plugin: true
disableHLSOnJs: true

You do not have to enable the “Universal DRM” plugin in order to get playback in DASH format.
I updated my original answer accordingly for the benefit of future visitors.