gst-flexhlssink-rs/README.md
2021-05-17 21:35:11 +02:00

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.