#video-streaming #rtmp #streaming #hls #audio-video #http-flv

no-std bin+lib xiu

由 Rust 编写的强大直播服务器

31 个版本 (13 个重大变更)

1.0.0 2023 年 1 月 21 日
0.13.0 2024 年 8 月 11 日
0.12.7 2024 年 5 月 17 日
0.12.5 2024 年 3 月 15 日
0.0.5 2021 年 9 月 5 日

29视频

Download history 2/week @ 2024-04-29 144/week @ 2024-05-13 50/week @ 2024-05-20 7/week @ 2024-05-27 16/week @ 2024-06-03 5/week @ 2024-06-10 3/week @ 2024-07-08 8/week @ 2024-07-22 26/week @ 2024-07-29 102/week @ 2024-08-05 59/week @ 2024-08-12

195 每月下载

MIT 许可证

785KB
代码行数,不包括注释 SLoC

XIUcrates.io crates.io RTMPcrates.io crates.io RTSPcrates.io crates.io WEBRTCcrates.io crates.io HTTPFLVcrates.io crates.io HLScrates.io crates.io FLVcrates.io crates.io MPEGTScrates.io crates.io wechat

中文文档

Xiu 是一个简单、高性能且安全的直播服务器,用纯 Rust 编写,现在支持流行的直播协议如 RTMP[集群]/RTSP/WebRTCWhip/Whep/HLS/HTTP-FLV。

特性

  • 支持多个平台(Linux/MacOS/Windows)。
  • 支持 RTMP。
    • 支持发布或订阅 H.264/AAC 流。
    • 支持 GOP 缓存,可配置。
    • 支持从 RTMP 转换为 HTTP-FLV/HLS。
    • 支持集群。
  • 支持 RTSP。
    • 支持发布或订阅 H.265/H.264/AAC 流,通过 TCP(交织)和 UDP。
    • 支持从 RTSP 转换为 RTMP/HLS。
  • 支持 WebRTC(Whip/Whep)。
    • 支持使用 Whip 发布 rtc 流。
    • 支持使用 Whep 订阅 rtc 流。
  • 支持 HTTP-FLV/HLS 协议(从 RTMP/RTSP 转换)。
  • 支持使用命令行或配置文件配置服务。
  • 支持 HTTP API/通知。
    • 支持查询流信息。
    • 支持流状态通知。
  • 支持令牌认证。
  • 支持将直播流录制到 HLS 文件(m3u8+ts)。

准备

安装 Rust 和 Cargo

文档

安装并运行

安装 xiu 有两种方式

  • 使用 cargo 安装
  • 从源码构建

使用 cargo 安装

运行以下命令安装 xiu

cargo install xiu

使用以下命令启动服务并获取帮助

xiu -h
A secure and easy to use live media server, hope you love it!!!

Usage: xiu [OPTIONS] 

Options:
  -c, --config <path>   Specify the xiu server configuration file path.
  -r, --rtmp <port>     Specify the RTMP listening port(e.g.:1935).
  -t, --rtsp <port>     Specify the rtsp listening port.(e.g.:5544).
  -w, --webrtc <port>   Specify the whip/whep listening port.(e.g.:8900).
  -f, --httpflv <port>  Specify the HTTP-FLV listening port(e.g.:8080).
  -s, --hls <port>      Specify the HLS listening port(e.g.:8081).
  -l, --log <level>     Specify the log level. [possible values: trace, debug, info, warn, error, debug]
  -h, --help            Print help.
  -V, --version         Print version.

从源码构建

克隆 Xiu

git clone https://github.com/harlanc/xiu.git

使用 master 分支

构建

我们使用 makefile 构建 xiu 及相关库。

  • 使用 make local 构建 xiu 及本地源码。

      make local && make build
    
  • 使用 make online 拉取在线 crate 代码并构建

      make online && make build 
    

运行

cd ./xiu/target/release or ./xiu/target/debug
./xiu -h

CLI

说明

您可以使用命令行轻松配置 xiu 服务器。您可以通过配置文件或命令行参数进行配置。

使用文件配置
xiu -c configuration_file_path
使用命令行配置
xiu -r 1935 -t 5544 -f 8080 -s 8081 -l info

如何配置配置文件

RTMP
[rtmp]
enabled = true
port = 1935

# pull streams from other server node.
[rtmp.pull]
enabled = false
address = "192.168.0.1"
port = 1935

# push streams to other server node.
[[rtmp.push]]
enabled = true
address = "localhost"
port = 1936
[[rtmp.push]]
enabled = true
address = "192.168.0.3"
port = 1935
RTSP
[rtsp]
enabled = false
port = 5544
WebRTC(Whip/Whep)
[webrtc]
enabled = false
port = 8900
HTTPFLV
[httpflv]
# true or false to enable or disable the feature
enabled = true
# listening port
port = 8080
HLS
[hls]
# true or false to enable or disable the feature
enabled = true
# listening port
port = 8081
# need record the live stream or not
need_record = true
日志
[log]
level = "info"
[log.file]
# write log to file or not(Writing logs to file or console cannot be satisfied at the same time).
enabled = true
# set the rotate
rotate = "hour" #[day,hour,minute]
# set the path where the logs are saved
path = "./logs"

配置示例

我在以下路径下编辑了一些配置文件,可以直接使用:

xiu/application/xiu/src/config

它包含以下4个文件

config_rtmp.toml //enable rtmp only
config_rtmp_hls.toml //enable rtmp and hls
config_rtmp_httpflv.toml //enable rtmp and httpflv
config_rtmp_httpflv_hls.toml //enable all the 3 protocols

场景

推送
推送RTMP

您可以使用两种方式

  • 使用OBS推送直播RTMP流

  • 或使用FFmpeg推送RTMP流

      ffmpeg -re -stream_loop -1 -i test.mp4 -c:a copy -c:v copy -f flv -flvflags no_duration_filesize rtmp://127.0.0.1:1935/live/test
    
推送RTSP
  • 通过TCP(交织模式)

      ffmpeg -re -stream_loop -1  -i test.mp4 -c:v copy  -c:a copy  -rtsp_transport tcp   -f rtsp rtsp://127.0.0.1:5544/live/test
    
  • 通过UDP

      ffmpeg -re -stream_loop -1  -i test.mp4 -c:v copy  -c:a copy     -f rtsp rtsp://127.0.0.1:5544/live/test
    
推送RTC(Whip)

现在OBS(版本3.0或更高)支持Whip输出。配置如下

播放

使用ffplay播放rtmp/rtsp/httpflv/hls直播流

ffplay -i rtmp://localhost:1935/live/test
ffplay -i rtsp://127.0.0.1:5544/live/test
ffplay -rtsp_transport tcp -i rtsp://127.0.0.1:5544/live/test
ffplay -i http://localhost:8080/live/test.flv
ffplay -i http://localhost:8081/live/test/test.m3u8
  • 如何播放WebRTC流*(Whep)

    1. 将xiu/protocol/webrtc/src/clients/文件夹下的文件复制到xiu可执行文件的同一级目录。
    2. 在浏览器中打开地址https://127.0.0.1:8900
    3. 输入对应于OBS whip发布地址的应用程序名称和流名称。
    4. 点击启动WHEP(在OBS发布后)来播放RTC流。

image

中继 - 静态推送

配置文件如下

名为config.toml的服务1配置文件

[rtmp]
enabled = true
port = 1935
[[rtmp.push]]
enabled = true
address = "localhost"
port = 1936

名为config_push.toml的服务2配置文件

[rtmp]
enabled = true
port = 1936

运行2个服务

./xiu config.toml
./xiu config_push.toml

使用上述方法将RTMP直播流推送到服务1,然后该流可以自动推送到服务2,您可以从两个服务中播放相同的直播流

ffplay -i rtmp://localhost:1935/live/test
ffplay -i rtmp://localhost:1936/live/test
中继 - 静态拉取

配置文件如下

名为config.toml的服务1配置文件

[rtmp]
enabled = true
port = 1935

名为config_pull.toml的服务2配置文件

[rtmp]
enabled = true
port = 1936
[rtmp.pull]
enabled = false
address = "localhost"
port = 1935

运行2个服务

./xiu config.toml
./xiu config_pull.toml

使用上述方法将直播流推送到服务1,当您从服务2播放流时,它将从中继服务1拉取流

ffplay -i rtmp://localhost:1935/live/test
ffplay -i rtmp://localhost:1936/live/test

星历史

Star History Chart

感谢

其他

如果您有任何问题,请打开问题。欢迎Star和拉取请求。您的Star可以让这个项目发展得更快、更远。

依赖项

~48–66MB
~1.5M SLoC