HLS Transcoder is a high-performance Rust library designed for building GStreamer-based pipelines that transcode media files into HLS (HTTP Live Streaming) format. It supports both hardware and software video encoding, making it versatile for a wide range of use cases, including live streaming and video on demand (VoD).
The main goal of this library is to simplify the creation of GStreamer pipelines for HLS transcoding. It provides a comprehensive API for configuring various elements, such as file sources, decoders, encoders, muxers, and sinks, along with support for both NVIDIA NVENC hardware acceleration and software-based x264 encoding.
- GStreamer Integration: The library leverages GStreamer, a powerful multimedia framework, to build complex pipelines for video and audio processing.
- HLS Output: Outputs media in HLS format, making it compatible with many video players and streaming platforms.
- Hardware & Software Encoding: Supports NVIDIA NVENC for hardware-accelerated encoding and x264 for software-based encoding.
- Audio and Video Support: Allows simultaneous handling of both audio and video streams, providing full HLS packaging.
- Modular Pipeline Construction: Uses a builder pattern to easily create and configure pipeline elements with optimal settings.
- Rust: Safe and fast programming language used to build the core library.
- GStreamer: Multimedia framework for building media processing pipelines.
- NVIDIA NVENC: Hardware-accelerated video encoding for high performance.
- x264: Software-based H.264 video encoding.
- MPEG-TS Muxing: Efficient packaging of audio and video streams for streaming.
- HLS (HTTP Live Streaming): Apple’s streaming protocol for delivering video over HTTP.
To use this library, ensure that you have Rust and GStreamer installed on your system. You can create a new transcoding pipeline by configuring various elements and linking them together using the builder pattern provided by the library.
use hls_transcoder::PipelineBuilder;
fn main() {
let pipeline = PipelineBuilder::new(
"input.mp4".to_string(),
"output".to_string(),
"variant".to_string(),
1280, 720, 2_000_000, true,
)
.build()
.expect("Failed to build pipeline");
pipeline.set_state(gst::State::Playing).expect("Failed to set pipeline to playing state");
}
This project is licensed under the MIT License. See the LICENSE file for more details.
Contributions are welcome! Please feel free to submit issues or pull requests to help improve this library.