#hls #live-streaming #streaming #server #live

hls_audio_server

A hassle free way to serve audio over HLS

2 releases

0.1.1 Sep 23, 2023
0.1.0 Sep 21, 2023

#855 in Audio

MIT/Apache

15KB
217 lines

HLS Audio Server

A hassle free way to serve audio over HLS.


docs.rs Crates.io

Crates.io


lib.rs:

A hassle free way to serve audio over HLS.

Example:

use hls_audio_server::m3u8::{HLSConfig, Playlist};
use hls_audio_server::server::HLSServer;
use std::net::SocketAddr;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let hls_config = HLSConfig {
        segments_to_keep: 10,
        segment_duration: 8.0,
        uri: "http://localhost:3000/".into(),
        file_extension: ".aac".into(),
    };

    let hls_playback = Playlist::new(hls_config);

    let addr = SocketAddr::from(([0, 0, 0, 0], 3000));
    let hls_server = HLSServer::new(addr, hls_playback).await?;

    hls_server
        .serve_data(move || {
            // Serve your encoded audio here
            Vec::new()
        })
        .await?;
    Ok(())
}

The playlist will be available at http://localhost:3000/stream.m3u8 in this case.

It is the user's responsibility to encode audio in the format compatible with RFC: 8216 section 3.4. The appropriate ID3 tag is automatically added, so the encoded audio must have no ID3 tags.

But do not worry! You can find a complete example that uses AAC LC coding to serve a .wav file in the project repository in case you do not want to mess with different codecs.

Dependencies

~6–16MB
~186K SLoC