This is a simple Python HTTP Live Streaming Client. It consumes a
list of remote playlists, and saves all needed files to serve the
playlist locally: the key, segments, and a modified m3u8
with paths
normalized.
It also supports backups, i.e., if the same playlist is available on more than one server, it will track each server status and will switch to the backup if needed.
Through the config.ini
it's possible to customize where the files
will be saved and what is the URL that provides servers info via JSON.
The JSON must be something like:
{ "streams": [ "nasa": { "input-path": "/msfc/Edge.m3u8", servers: [ "http://liveips.nasa.gov.edgesuite.net" ] } ] }
hlslcient
can consume multiple playlists and generate a variant playlists grouping then.
To do so, include a bandwidth
for each stream and add an action to combine them in the JSON:
{ "streams": { "Nasa-low": { "input-path": "/msfc/Edge.m3u8", "servers": ["http://liveips.nasa.gov.edgesuite.net"], "bandwidth": 254082 }, "Nasa-medium": { "input-path": "/msfc/3G.m3u8", "servers": ["http://liveips.nasa.gov.edgesuite.net"], "bandwidth": 460658 }, "Nasa-high": { "input-path": "/msfc/Wifi.m3u8", "servers": ["http://liveips.nasa.gov.edgesuite.net"], "bandwidth": 1080434 } }, "actions": [ { "type": "combine", "input": ["Nasa-low", "Nasa-medium", "Nasa-high"], "output": "/msfc/nasa_mbr.m3u8" } ] }
hlsclient
is also able to create an audio only track from a video stream using FFMPEG.
To do so, add a transcode
action an include the new stream on a combine action:
"actions": [ { "type": "combine", "input": ["Nasa-audio-only", "Nasa-low", "Nasa-medium", "Nasa-high"], "output": "/msfc/nasa_mbr.m3u8" }, { "type": "transcode", "input": "Nasa-low", "output": { "audio": { "Nasa-audio-only": { "path": "Nasa-audio-only.m3u8", "audio-bitrate": 64000, "bitrate": 65000 } } } } ]
If you set encryption=true
in the config file, hlsclient
will
automatically encrypt all streams with a random AES-128 cipher.
To run the client, simply run:
$ python -m hlsclient
You will need ffmpeg and mediainfo installed.
$ ./runtests
In order to use the current version of hlsclient with transcoding support, you must have ffmpeg installed with libaac and libx264. Download them and compile FFfmpeg like this:
libaac:
./configure && make && sudo make install
libx264:
./configure --enable-shared && make && sudo make install
FFmpeg:
./configure --enable-libx264 --enable-gpl --enable-libfaac --enable-nonfree --enable-shared && make && sudo make install
The tested versions were:
- libaac: faac-1.28
- libx264: x264-snapshot-20121030-2245
- FFmpeg: N-46213-g976175f