31 个版本 (13 个重大变更)
1.0.0 |
|
---|---|
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 在 视频
195 每月下载
785KB
代码行数,不包括注释 SLoC
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)
- 将xiu/protocol/webrtc/src/clients/文件夹下的文件复制到xiu可执行文件的同一级目录。
- 在浏览器中打开地址https://127.0.0.1:8900。
- 输入对应于OBS whip发布地址的应用程序名称和流名称。
- 点击启动WHEP(在OBS发布后)来播放RTC流。
中继 - 静态推送
配置文件如下
名为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和拉取请求。您的Star可以让这个项目发展得更快、更远。
依赖项
~48–66MB
~1.5M SLoC