Using streams
Streams can sometimes be quite picky on how they can be used. So here is a guide on how to use them.
Essentials
All streams have the same common parameters:
Stream.type
: The type of stream. Eitherhls
orfile
Stream.id
: The id of this stream, unique per scraper output.Stream.flags
: A list of flags that apply to this stream. Most people won't need to use it.Stream.captions
: A list of captions/subtitles for this stream.Stream.headers
: Either undefined or a key value object of headers you must set to use the stream.Stream.preferredHeaders
: Either undefined or a key value object of headers you may want to set if you want optimal playback - but not required.
Now let's delve deeper into how to watch these streams!
Streams with type hls
HLS streams can be tough to watch. They're not normal files you can just use.
These streams have an extra property Stream.playlist
which contains the m3u8 playlist.
Here is a code sample of how to use HLS streams in web context using hls.js
<script src="https://cdn.jsdelivr.net/npm/hls.js@1"></script>
<video id="video"></video>
<script>
const stream = null; // add your stream here
if (Hls.isSupported()) {
var video = document.getElementById('video');
var hls = new Hls();
hls.loadSource(stream.playlist);
hls.attachMedia(video);
}
</script>
Streams with type file
File streams are quite easy to use, they just return a new property: Stream.qualities
.
This property is a map of quality and a stream file. So if you want to get 1080p quality you do stream["1080"]
to get your stream file. It will return undefined if that quality is absent.
The possibly qualities are: unknown
, 360
, 480
, 720
, 1080
, 4k
.
File based streams are always guaranteed to have one quality.
Once you get a streamfile, you have the following parameters:
StreamFile.type
: Right now it can only bemp4
.StreamFile.url
: The URL linking to the video file.
Here is a code sample of how to watch a file based stream in a browser:
<video id="video"></video>
<script>
const stream = null; // add your stream here
const video = document.getElementById('video');
const qualityEntries = Object.keys(stream.qualities);
const firstQuality = qualityEntries[0];
video.src = firstQuality.url;
</script>
Streams with headers
Streams have both a Stream.headers
and a Stream.preferredHeaders
.
The difference between the two is that Stream.headers
must be set in order for the stream to work. While the other is optional, and enhances the quality or performance.
If your target is set to BROWSER
, headers will never be required, as it's not possible to do.
Using captions/subtitles
All streams have a list of captions at Stream.captions
. The structure looks like this:
type Caption = {
type: CaptionType; // Language type, either "srt" or "vtt"
id: string; // Unique per stream
url: string; // The URL pointing to the subtitle file
hasCorsRestrictions: boolean; // If true, you will need to proxy it if you're running in a browser
language: string; // Language code of the caption
};