当前位置:首页 > 云服务器 > 正文

linux rtsp服务器搭建

Linux上可用开源项目ZLMediaKit搭建 RTSP 服务器,支持推流与拉流功能

准备工作

硬件/网络环境要求

组件 最低配置建议 说明
CPU 双核以上 支持多流并发编码
内存 ≥2GB 避免OOM杀手终止进程
网卡 千兆以太网接口 确保RTSP传输带宽充足
IP地址 静态内网/公网IP 动态DNS或端口映射需额外配置

软件依赖包安装

通过apt(Debian/Ubuntu)或yum(CentOS)安装基础工具链:

# Ubuntu示例 sudo apt update && sudo apt install build-essential libssl-dev zlib1g-dev gstreamer1.0-tools gstreamer1.0-plugins-base gstreamer1.0-plugins-good

注意:若使用旧版系统,可能需要替换为对应版本的GStreamer插件包。

linux rtsp服务器搭建 第1张


主流方案对比与选择

方案名称 特点 适用场景 缺点
GStreamer+RTSP插件 灵活自定义管道,支持H.264/AAC编码 快速原型开发、轻量级部署 需手动编写Launch脚本
FFmpeg直转推流 单命令行完成音视频采集到RTSP输出 临时测试、简单直播需求 稳定性较差,无会话管理
Nginx-rtmp模块 Web服务器集成RTMP/RTSP双协议支持 生产环境长期运行 配置复杂,依赖Nginx生态
专用工具如VLC 图形化界面操作,跨平台兼容性强 桌面端调试、教学演示 资源占用较高

推荐新手从GStreamer方案入手,因其模块化设计便于理解数据流向。


基于GStreamer的详细搭建步骤

创建测试用的MP4文件(可选)

如果已有现成视频文件可跳过此步,生成一个包含音频轨道的示例视频:

ffmpeg -f lavfi -i testsrc=sine=frequency=440:duration=10 -ac 2 output_audio.wav ffmpeg -f lavfi -i testsrc=gradient=r=random -frames:v=30 output_video.mp4 ffmpeg -i output_video.mp4 -i output_audio.wav -c copy combined.mp4

编写GStreamer管道命令

以下命令将本地文件转换为RTSP流并发布到554端口:

gst-launch-1.0 filesrc location=combined.mp4 ! qtdemux name=demux demux.audio_0 ! queue ! faaddec ! audioconvert ! avgdec ! audioresample ! autoaudiosink demux.video_0 ! queue ! h264parse ! h264dec ! videoconvert ! autovideosink demux. ! tee name=t t. ! queue ! rtpjitterbuffer latency=300 ! udpsink host=127.0.0.1 port=5004 sync=false t. ! queue ! rtpjitterbuffer latency=300 ! udpsink host=127.0.0.1 port=5006 sync=false

关键参数解释

  • udpsink指定目标IP和端口(默认本机)
  • latency=300设置抖动缓冲区时长(毫秒级)
  • sync=false禁用音视频同步校验以提高兼容性

持久化运行配置

编辑/etc/systemd/system/rtsp-server.service文件:

linux rtsp服务器搭建 第2张

[Unit] Description=GStreamer RTSP Streaming Service After=network.target [Service] ExecStart=/usr/bin/gst-launch-1.0 filesrc location=/path/to/your/file.mp4 ! ... [完整管道命令] Restart=always User=nobody Group=nogroup [Install] WantedBy=multi-user.target

启用并启动服务:

sudo systemctl daemon-reload sudo systemctl enable --now rtsp-server


客户端验证方法

工具类型 推荐软件 连接示例 预期效果
VLC播放器 VideoLAN Client rtsp://<服务器IP>:554/stream 实时播放视频画面
FFplay命令行 ffplay rtsp://... 终端直接渲染 调试时查看日志输出
Wireshark抓包 过滤tcp.port==554 分析RTP/RTCP协议交互过程 诊断网络层丢包问题


常见问题排查指南

现象 可能原因 解决方案
“Connection refused” 防火墙阻止了RTSP端口 sudo ufw allow <PORT>
花屏/绿屏显示 解码器不匹配或码率过高 降低输入源分辨率,添加videorate限速节点
延迟超过2秒以上 网络带宽不足或缓冲区过大 减小jitterbuffer的latency值
音频超前于视频 时钟同步未对齐 在管道中插入sync元素强制同步


相关问题与解答

Q1: 如何修改RTSP服务的默认端口?

A: 在GStreamer命令中修改udpsink后的port参数值,例如改为8554:

... ! udpsink host=0.0.0.0 port=8554 ...

同时确保防火墙放行新端口:sudo ufw allow 8554/udp。

Q2: 为什么VLC无法播放我的RTSP流?

A: 常见原因包括:①URL格式错误(正确应为rtsp://ip:port/path);②编解码器缺失(安装gstreamer1.0-libav包);③NAT类型严格(尝试在路由器设置UPnP或手动端口映射),可通过VLC的“媒体信息

linux rtsp服务器搭建 第3张

0