# HLS Transcoder **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). ## Overview 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. ## Key Features - **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. ## Technologies Used - **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. ## Getting Started 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. ## Example ```rust 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"); } ``` ## License This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for more details. ## Contributing Contributions are welcome! Please feel free to submit issues or pull requests to help improve this library.