#data-channel #web-rtc #p2p #signaling-server #sockets

bin+lib ezrtc

使用数据通道和简单的信令服务器实现跨平台的WebRTC通信

4个版本 (破坏性更新)

0.4.0 2024年6月18日
0.3.0 2024年6月17日
0.2.0 2024年6月17日
0.1.0 2024年6月7日

#9#signaling-server

Download history 96/week @ 2024-06-01 53/week @ 2024-06-08 418/week @ 2024-06-15 20/week @ 2024-06-22 1/week @ 2024-06-29 4/week @ 2024-07-06

每月下载量 146次
用于 ezrtc-server

MIT 许可证

30KB
504

ezrtc

  • 使用数据通道和简单的信令服务器实现跨平台的WebRTC通信。

用法

use ezrtc::{host::EzRTCHost, socket::DataChannelHandler};
use log::{info, warn, LevelFilter};
use simplelog::{ColorChoice, TermLogger, TerminalMode};
use std::sync::Arc;
use webrtc::ice_transport::ice_server::RTCIceServer;

#[tokio::main]
pub async fn main() {
    TermLogger::init(LevelFilter::Info, Default::default(), TerminalMode::Mixed, ColorChoice::Auto).unwrap();

    // Define your STUN and TURN servers here
    let ice_servers = vec![RTCIceServer {
        urls: vec!["stun:stun.cloudflare.com:3478".to_owned()],
        ..Default::default()
    }];

    // Define your data channel handler
    struct MyDataChannelHandler {}

    impl DataChannelHandler for MyDataChannelHandler {
        fn handle_data_channel_open(&self) {
            warn!("Data channel opened!");
        }

        fn handle_data_channel_message(&self, message: String) {
            warn!("Data channel message received: {:?}", message);
        }
    }

    // Start the connection
    let host = EzRTCHost::new(
        "wss://your-signaling-server.com/one-to-many".to_string(),
        "random_session_id".to_string(),
        ice_servers,
        Arc::new(Box::new(MyDataChannelHandler {})),
    )
    .await;

    // Log connected clients number every 5 seconds
    loop {
        info!("Connected clients: {:?}", host.peer_connections.lock().unwrap().len());

        tokio::time::sleep(std::time::Duration::from_secs(5)).await;
    }
}

依赖项

~33–47MB
~888K SLoC