Introduction

This is a simple rtmp library for easy use and reading, you can build your own single rtmp server or a cluster .

Examples

Client

You can use this library to push or pull RTMP streams , refer to the pprtmp example from xiu/application/pprtmp.

Single Server

```rust use rtmp::channels::ChannelsManager; use rtmp::rtmp::RtmpServer;

[tokio::main]

async fn main() -> anyhow::Result<()> { let mut channel = ChannelsManager::new(None); let producer = channel.getchannelevent_producer();

let listen_port = 1935;
let address = format!("0.0.0.0:{port}", port = listen_port);

let mut rtmp_server = RtmpServer::new(address, producer);
tokio::spawn(async move {
    if let Err(err) = rtmp_server.run().await {
        log::error!("rtmp server error: {}\n", err);
    }
});

tokio::spawn(async move { channel.run().await });

tokio::signal::ctrl_c().await?;
Ok(())

} ```

Cluster

```rust use rtmp::channels::ChannelsManager; use rtmp::relay::{pullclient::PullClient, pushclient::PushClient}; use rtmp::rtmp::RtmpServer;

[tokio::main]

async fn main() -> anyhow::Result<()> { let mut channel = ChannelsManager::new(None); let producer = channel.getchannelevent_producer();

// push the rtmp stream from local to 192.168.0.2:1935
let address = format!("{ip}:{port}", ip = "192.168.0.2", port = 1935);

let mut push_client = PushClient::new(
    address,
    channel.get_client_event_consumer(),
    producer.clone(),
);
tokio::spawn(async move {
    if let Err(err) = push_client.run().await {
        log::error!("push client error {}\n", err);
    }
});
channel.set_rtmp_push_enabled(true);

//pull the rtmp stream from 192.168.0.3:1935 to local
let address = format!("{ip}:{port}", ip = "192.168.0.3", port = "1935");
log::info!("start rtmp pull client from address: {}", address);
let mut pull_client = PullClient::new(
    address,
    channel.get_client_event_consumer(),
    producer.clone(),
);

tokio::spawn(async move {
    if let Err(err) = pull_client.run().await {
        log::error!("pull client error {}\n", err);
    }
});
channel.set_rtmp_pull_enabled(true);

// the local rtmp server
let listen_port = 1935;
let address = format!("0.0.0.0:{port}", port = listen_port);

let mut rtmp_server = RtmpServer::new(address, producer.clone());
tokio::spawn(async move {
    if let Err(err) = rtmp_server.run().await {
        log::error!("rtmp server error: {}\n", err);
    }
});

tokio::spawn(async move { channel.run().await });

tokio::signal::ctrl_c().await?;
Ok(())

} ```

For more detailed implementation please reference to xiu server

Version History

v0.0.1