45 lines
1.7 KiB
Markdown
45 lines
1.7 KiB
Markdown
# GStreamer HTTP Live Streaming Plugin
|
|
A highly configurable GStreamer HLS sink plugin. Based on the [`hlssink2`](https://gstreamer.freedesktop.org/documentation/hls/hlssink2.html?gi-language=c) element. The `flexhlssink` is written in Rust and has various options to configure the HLS output playlist generation.
|
|
|
|
## Development status
|
|
|
|
The plugin is in **active development**. The first release objective is to have full feature parity with the `hlssink2` plugin.
|
|
|
|
Progress:
|
|
- [x] Support all properties exposed by the `hlssink2` plugin;
|
|
- [x] Write TS content to fragment stream (defaults to filesystem);
|
|
- [x] Write HLS playlist m3u8 file;
|
|
- [x] Delete old fragments;
|
|
- [x] Signal to acquire fragment stream;
|
|
- [x] Signal to acquire HLS playlist stream;
|
|
- [x] Signal to delete a fragment file;
|
|
|
|
## Example Usage
|
|
|
|
After [installing GStreamer](https://gitlab.freedesktop.org/gstreamer/gstreamer-rs#installation)
|
|
, it is possible to compile and run the `flexhlsplugin`.
|
|
|
|
```bash
|
|
cargo build --release
|
|
```
|
|
|
|
On MacOS it might be necessary to set the `PKG_CONFIG_PATH` environment variable:
|
|
```bash
|
|
export PKG_CONFIG_PATH="/Library/Frameworks/GStreamer.framework/Versions/Current/lib/pkgconfig${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH}"
|
|
```
|
|
|
|
An example pipeline:
|
|
```bash
|
|
export PROJECT_DIR=`pwd`
|
|
gst-launch-1.0 videotestsrc is-live=true ! \
|
|
x264enc ! h264parse ! flexhlssink target-duration=4 \
|
|
--gst-plugin-load=${PROJECT_DIR}/target/release/libflexhlssink.dylib
|
|
```
|
|
|
|
In another terminal run a simple HTTP server:
|
|
```bash
|
|
cd $PROJECT_DIR
|
|
python simple_http.py
|
|
```
|
|
|
|
Open the example player site https://hls-js.netlify.app/demo/ and play the `http://localhost:8000/playlist.m3u8` playback URL.
|