How to access a stream via JavaScript?

Added by M F 10 months ago

Hi all,

I am trying to write a HTML/JS-based app to play a channel from TVHeadend via the browser.
After much fiddling I have managed to use digest authentication and I can retrieve the channel list via this TVH api URI:

This returns - among other things - the UUID of each channel.
Now in order to play a channel I wanted to assign the URL as video source in HTML5 where UUID is the actual UUID.
However this will not play. Is this the correct way to accomplish what I am trying to do? I have tried different profile values and skipping the profile parameter altogether - without success.

When I check the TVH admin interface and I click the "play" link of any channel there, I get a link of the following syntax:

Now I am wondering if I can create the ticket value via the API and then build my link correctly? Is there a way to do this? I have searched the web for literally days but I cannot find an answer.
If not, then what else can I do to get a stream after having authenticated successfully via digest authentication?

Best regards

Edit: Just saw the "how to ask a good question" topic, so here we go:

Version of TVHeadend? 4.3~9ed76c0
Running on what OS and version? Synology NAS on DSM Manager 6
Package that came with the OS or something you compiled yourself? Came with the Synology Package Manager
Adapter/tuner chipset or make/model? Triax TSS 400 MKII SAT>IP Converter

Replies (3)

RE: How to access a stream via JavaScript? - Added by Dave Pickles 10 months ago

Your first example works for me with wget, however I'm using TVH with user authentication effectively turned off (the "*" user can do anything provided he's on the local subnet).

One quirk in the code I've spotted: if the streaming profile specified doesn't exist or is invalid or not allowed, the htsp profile is used instead. Only if htsp can't be used do you get an error.

RE: How to access a stream via JavaScript? - Added by M F 10 months ago

The channelid URL never starts playing in the JS video element. That's why I was wondering if I can use the stream/channel URL with a ticket parameter instead.
But I am just as happy if I can get the channelid URL to work instead.
Maybe I am wrong about trying to set the channelid URL to a Javascript element. I am not sure if that is possible.
My code is as follows:

function addSourceToVideo(element, src, type) {
    var source = document.createElement('source');

    source.src = src;
    source.type = type;

addSourceToVideo(document.getElementById('vid'), '', 'video/webm');

I have checked different values for the type attribute, but no luck.
The "vid" element is a video tag inside my webpage:

<video id="vid">

The code gets executed without any JS errors (I can check that via the Debug Console), but nothing happens in the video element on the page and I do also not see any traffic about it in the network tab of the Debug Console.

I wonder if this can even work as I am simply using the plain URL without any token from the digest authorization. I more or less expected to get a 401/unauthorized response from TVH but instead I don't see anything.

The video element on the webpage stays dark and nothing happens even if I click the "play" button manually.

RE: How to access a stream via JavaScript? - Added by Dave Pickles 10 months ago

I've never used HTML5 video so can't help there. However you could narrow down the search for the problem by first copying part of the stream to a local file and then trying to view that through your JS.