平沙 發表於 2025-12-26 00:00:00

如何在Ubuntu系统中搭建RTSP服务器?Ubuntu搭建RTSP服务器的详细流程

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li>一、为什么需要单独搭建 RTSP 服务器?</li><li>二、准备工作<ul class="second_class_ul"><li>环境要求</li></ul></li><li>三、详细步骤<ul class="second_class_ul"><li>步骤 1:安装 FFmpeg(视频处理工具)</li><li>步骤 2:搭建 RTSP 服务器(rtsp-simple-server)</li><li>步骤 3:用 FFmpeg 推送本地视频到 RTSP 服务器</li><li>步骤 4:获取 Ubuntu 服务器的局域网 IP</li><li>步骤 5:在 Windows 电脑上访问 RTSP 流</li></ul></li><li>四、常见问题与解决方案<ul class="second_class_ul"><li>1. RTSP 服务器启动失败(端口被占用)</li><li>2. Windows 无法连接 RTSP 流(Connection refused)</li><li>3. 视频卡顿或无法播放</li></ul></li><li>五、总结<ul class="second_class_ul"></ul></li><li>RTSP服务器连接教程<ul class="second_class_ul"><li>一、软件安装</li><li>二、RTSP服务连接</li></ul></li></ul></div><p>在开发或测试中,经常需要将本地视频文件以 RTSP 流的形式共享,方便局域网内其他设备(如 Windows 电脑、手机)访问。本文将详细介绍如何在 Ubuntu 系统中搭建 RTSP 服务器,并用 FFmpeg 推送本地视频流,最后在 Windows 上通过 VLC 播放,全程实操无坑,新手也能轻松上手。</p>
<p class="maodian"></p><h2>一、为什么需要单独搭建 RTSP 服务器?</h2>
<p>很多人尝试用&nbsp;ffmpeg -f rtsp&nbsp;直接推流时会遇到&nbsp;Connection refused&nbsp;错误,原因是:<strong>FFmpeg 本身不自带完整的 RTSP 服务器功能</strong>,它更擅长处理音视频编码 / 推流,而 RTSP 服务器需要专门的程序来实现会话管理、协议交互等功能。</p>
<p>因此,我们需要:</p>
<p>搭建一个独立的 RTSP 服务器(推荐轻量级的&nbsp;rtsp-simple-server) 用 FFmpeg 将本地视频推送到该服务器 局域网内的设备通过服务器 IP 访问 RTSP 流</p>
<p class="maodian"></p><h2>二、准备工作</h2>
<p class="maodian"></p><h3>环境要求</h3>
<p>操作系统:Ubuntu 20.04/22.04(其他版本类似) 本地视频文件:如&nbsp;test.mp4(建议放在容易访问的路径,如&nbsp;~/videos/) 工具:ffmpeg(处理视频流)、rtsp-simple-server(RTSP 服务器) 局域网环境:Ubuntu 服务器和 Windows 客户端需在同一网段</p>
<p class="maodian"></p><h2>三、详细步骤</h2>
<p class="maodian"></p><h3>步骤 1:安装 FFmpeg(视频处理工具)</h3>
<p>FFmpeg 用于读取本地视频并推送到 RTSP 服务器,先确保已安装:</p>
<div class="dxycode"><pre class="brush:bash;"># 更新软件源
sudo apt update
# 安装 FFmpeg
sudo apt install ffmpeg -y
# 验证安装(输出版本信息即成功)
ffmpeg -version</pre></div>
<p class="maodian"></p><h3>步骤 2:搭建 RTSP 服务器(rtsp-simple-server)</h3>
<p>rtsp-simple-server&nbsp;是一款轻量级、配置简单的 RTSP 服务器,支持 Linux、Windows 等多平台,非常适合新手。</p>
<p>2.1 下载服务器程序</p>
<p>打开 Ubuntu 终端,执行以下命令下载适合 Linux 的 64 位版本(版本号可根据最新发布调整):</p>
<div class="dxycode"><pre class="brush:bash;"># 下载压缩包(如果下载慢,可手动到 GitHub 下载)
wget https://github.com/aler9/rtsp-simple-server/releases/download/v0.21.6/rtsp-simple-server_v0.21.6_linux_amd64.tar.gz</pre></div>
<p>手动下载地址:rtsp-simple-server GitHub Releases,选择&nbsp;linux_amd64&nbsp;版本。</p>
<p>2.2 解压并启动服务器</p>
<div class="dxycode"><pre class="brush:bash;"># 解压压缩包
tar -zxvf rtsp-simple-server_v0.21.6_linux_amd64.tar.gz
# 进入解压后的目录
cd rtsp-simple-server_v0.21.6_linux_amd64
# 启动 RTSP 服务器(默认配置,监听 8554 端口)
./rtsp-simple-server</pre></div>
<p>启动成功后,终端会显示:</p>
<div class="dxycode"><pre class="brush:plain;">2025/10/30 16:00:00 I rtsp-simple-server v0.21.6
2025/10/30 16:00:00 I listener opened on :8554 (TCP), :8000 (UDP/RTP), :8001 (UDP/RTCP)
2025/10/30 16:00:00 I server is ready
</pre></div>
<p>注意:保持此终端<strong>开启</strong>,关闭终端会导致服务器停止运行。</p>
<p><strong>&nbsp;示例如下:</strong></p>
<p><img alt="步骤 2:搭建 RTSP 服务器(rtsp-simple-server)" src="https://zhuji.jb51.net/uploads/allimg/20251226/2-2512261149545Q.png" /></p>
<p class="maodian"></p><h3>步骤 3:用 FFmpeg 推送本地视频到 RTSP 服务器</h3>
<p>打开<strong>新的终端</strong>(不要关闭服务器终端),执行以下命令推送视频流:</p>
<p>3.1 基础推流命令(推荐)</p>
<div class="dxycode"><pre class="brush:plain;"># 替换为你的视频文件路径(绝对路径或相对路径均可)
VIDEO_PATH="./20250912_wangjing.mp4"

# 推流命令
ffmpeg -re-stream_loop -1-i ./20250912_wangjing.mp4 \
-c:v copy -c:a copy \
-f rtsp -rtsp_transport tcp \
rtsp://127.0.0.1:8554/mystream


</pre></div>
<p>示例如下:</p>
<p><img alt="Ubuntu 搭建 RTSP 服务器:本地视频推流实战(附局域网访问教程)" src="https://zhuji.jb51.net/uploads/allimg/20251226/2-251226114954231.png" /></p>
<p>命令参数说明:</p>
<ul><li>-re:按视频实际帧率读取(避免一次性读完文件)</li><li>-i &quot;$VIDEO_PATH&quot;:输入本地视频文件路径</li><li>-c:v copy -c:a copy:直接复制视频和音频流(不重新编码,节省性能)</li><li>-f rtsp:输出格式为 RTSP</li><li>-rtsp_transport tcp:使用 TCP 传输(局域网内更稳定,避免 UDP 丢包)</li><li>rtsp://127.0.0.1:8554/mystream:推流目标地址(127.0.0.1&nbsp;是本地服务器,mystream&nbsp;是自定义流名称)</li><li><strong>-stream_loop -1</strong>:<ul><li>stream_loop&nbsp;是 FFmpeg 用于设置输入文件循环次数的参数。<ul><li>-1&nbsp;表示<strong>无限循环</strong>(视频播放结束后立即重新开始);</li><li><strong>循环 1 遍</strong>:输入文件播放 1 次后停止,参数设为0(默认不循环就是播放 1 遍)。</li></ul></li></ul></li></ul>
<div class="dxycode"><pre class="brush:plain;"> -re -stream_loop 0</pre></div>
<p><strong>循环 2 遍</strong>:输入文件播放 2 次后停止,参数设为1</p>
<div class="dxycode"><pre class="brush:plain;"> -re -stream_loop 1</pre></div>
<p>(注意:次数是 &ldquo;循环次数&rdquo;,即 &ldquo;播放次数 - 1&rdquo;)。 <strong>循环 20 遍</strong>:输入文件播放 20 次后停止,参数设为19。</p>
<div class="dxycode"><pre class="brush:plain;"> -re -stream_loop 19</pre></div>
<p><strong>无数遍(无限循环)</strong>:输入文件持续循环播放,参数设为-1。</p>
<div class="dxycode"><pre class="brush:plain;"> -re -stream_loop -1</pre></div>
<p>注意:该参数必须放在&nbsp;-i(输入文件)<strong>之前</strong>,否则无效。 3.2 推流成功的标志</p>
<p>终端会持续输出视频帧信息,类似:</p>
<div class="dxycode"><pre class="brush:plain;">frame=250 fps= 25 q=-1.0 Lsize=N/A time=00:00:10.00 bitrate=N/A speed=1.01x   
</pre></div>
<p><strong>示例如下:</strong></p>
<p><img alt="步骤 3:用 FFmpeg 推送本地视频到 RTSP 服务器" src="https://zhuji.jb51.net/uploads/allimg/20251226/2-251226114954444.png" /></p>
<p>表示视频正在以 25fps 的速度推送,推流成功。</p>
<p>3.3 特殊情况处理(视频编码不兼容)</p>
<p>如果视频编码不被 RTSP 支持(如某些特殊编码的 MP4),推送可能失败,此时需要重新编码:</p>
<div class="dxycode"><pre class="brush:plain;">ffmpeg -re -i "$VIDEO_PATH" \
-c:v libx264 -preset ultrafast -crf 25 \# 视频重新编码为 H.264
-c:a aac -b:a 128k \                      # 音频重新编码为 AAC
-f rtsp -rtsp_transport tcp \
rtsp://127.0.0.1:8554/mystream
</pre></div>
<p class="maodian"></p><h3>步骤 4:获取 Ubuntu 服务器的局域网 IP</h3>
<p>Windows 电脑需要通过 Ubuntu 的 IP 访问 RTSP 流,先在 Ubuntu 终端中查询 IP:</p>
<div class="dxycode"><pre class="brush:plain;">ip addr show
</pre></div>
<p>在输出中找到局域网 IP(通常在&nbsp;wlan0&nbsp;或&nbsp;eth0&nbsp;下的&nbsp;inet&nbsp;字段),例如:192.168.2.18(本文以此为例,实际以你的 IP 为准)。</p>
<p class="maodian"></p><h3>步骤 5:在 Windows 电脑上访问 RTSP 流</h3>
<p>局域网内的 Windows 电脑需使用支持 RTSP 协议的播放器,推荐免费的&nbsp;<strong>VLC 播放器</strong>。</p>
<p>5.1 安装 VLC 播放器</p>
<ul><li>下载地址:VLC 官网</li><li>选择 Windows 版本,按提示安装即可。</li></ul>
<p>5.2 播放 RTSP 流</p>
<p>打开 VLC 播放器,点击菜单栏&nbsp;<strong>媒体 &rarr; 打开网络串流</strong>(或按快捷键&nbsp;Ctrl+N)。</p>
<p><img alt="步骤 5:在 Windows 电脑上访问 RTSP 流" src="https://zhuji.jb51.net/uploads/allimg/20251226/2-2512261149553V.png" /></p>
<p><img alt="步骤 5:在 Windows 电脑上访问 RTSP 流_图2" src="https://zhuji.jb51.net/uploads/allimg/20251226/2-251226114955529.png" /></p>
<p>在 &ldquo;网络 URL&rdquo; 输入框中填写 RTSP 流地址,格式为:</p>
<div class="dxycode"><pre class="brush:plain;">rtsp://:8554/mystream
</pre></div>
<p>例如:rtsp://192.168.2.18:8554/mystream(替换为你的 Ubuntu IP)。 点击 &ldquo;播放&rdquo;,等待 1-2 秒,即可看到 Ubuntu 推送的视频画面。</p>
<p class="maodian"></p><h2>四、常见问题与解决方案</h2>
<p class="maodian"></p><h3>1. RTSP 服务器启动失败(端口被占用)</h3>
<p>错误表现:终端显示&nbsp;address already in use 解决: 查看占用 8554 端口的进程:</p>
<div class="dxycode"><pre class="brush:plain;">sudo lsof -i :8554
</pre></div>
<p>杀死对应进程(替换&nbsp;PID&nbsp;为实际进程号):</p>
<div class="dxycode"><pre class="brush:plain;">sudo kill -9 PID
</pre></div>
<p>若无法 kill,可修改服务器端口:编辑&nbsp;rtsp-simple-server&nbsp;目录下的&nbsp;rtsp-simple-server.yml,将&nbsp;rtspPort: 8554&nbsp;改为&nbsp;8555,重启服务器后,推流和访问地址也需改为&nbsp;8555&nbsp;端口。</p>
<p class="maodian"></p><h3>2. Windows 无法连接 RTSP 流(Connection refused)</h3>
<p>检查网络连通性:在 Windows cmd 中执行&nbsp;ping 192.168.2.18,确保能 ping 通 Ubuntu。 开放 Ubuntu 防火墙端口(以 8554 为例):</p>
<div class="dxycode"><pre class="brush:plain;">sudo ufw allow 8554/tcp
</pre></div>
<p>确认推流地址和访问地址的端口、流名称一致(如都是&nbsp;8554&nbsp;和&nbsp;mystream)。</p>
<p class="maodian"></p><h3>3. 视频卡顿或无法播放</h3>
<p>尝试将推流命令中的&nbsp;tcp&nbsp;改为&nbsp;udp(适合网络稳定的局域网):</p>
<div class="dxycode"><pre class="brush:plain;">ffmpeg -re -i 视频路径 -c:v copy -c:a copy -f rtsp -rtsp_transport udp rtsp://127.0.0.1:8554/mystream
</pre></div>
<p>若视频分辨率过高(如 4K),可降低分辨率后推送:</p>
<div class="dxycode"><pre class="brush:plain;">ffmpeg -re -i 视频路径 -s 1280x720 -c:v libx264 -c:a aac -f rtsp -rtsp_transport tcp rtsp://127.0.0.1:8554/mystream
</pre></div>
<p class="maodian"></p><h2>五、总结</h2>
<p>本文通过&nbsp;rtsp-simple-server&nbsp;搭建 RTSP 服务器,结合 FFmpeg 推送本地视频流,实现了局域网内的 RTSP 视频共享。核心步骤如下:</p>
<p>安装 FFmpeg 和 rtsp-simple-server 启动 RTSP 服务器(监听 8554 端口) 用 FFmpeg 将本地视频推送到服务器 Windows 客户端通过 VLC 访问 RTSP 流</p>
<p>这种方法稳定可靠,适用于大多数 Ubuntu 版本,且配置简单,非常适合新手快速上手。如果需要推送实时摄像头画面,只需将 FFmpeg 的输入源(-i)改为摄像头设备(如&nbsp;/dev/video0)即可,原理相同。</p>
<p class="maodian"></p><h2>RTSP服务器连接教程</h2>
<p class="maodian"></p><h3>一、软件安装</h3>
<p>1.1 ffmpeg介绍</p>
<p>FFmpeg 是一个开源的音视频处理工具包,广泛应用于数字音视频的录制、转换、以及流媒体功能的实现。无论是技术开发者还是普通用户,FFmpeg 都能帮助您轻松实现音视频相关的需求。</p>
<p>FFmpeg 主要由三个部分组成:</p>
<p>ffmpeg.exe: 负责音视频的格式转换与转码。<br />ffplay.exe: 提供简单的音视频播放功能。<br />ffprobe.exe: 用于分析多媒体码流,方便获取视频或音频文件的详细信息。<br />除了这些工具,FFmpeg 还提供了丰富的开发库,供专业用户开发自己的音视频处理程序。</p>
<p>2. ffmpeg下载</p>
<p>要开始使用FFmpeg,您需要从 FFmpeg官网 下载软件。请按照以下步骤操作:</p>
<ul><li><strong>打开FFmpeg官网。</strong></li><li><strong>点击页面上的 Windows 图标,选择适合您的 Windows 系统的安装包。</strong></li><li><strong>在&ldquo;Windows EXE Files&rdquo;下选择合适版本进行下载。</strong></li></ul>
<p><strong>下载后解压安装包,您会看到三个可执行程序:ffmpeg.exe、ffplay.exe 和 ffprobe.exe。</strong></p>
<p><img alt="" src="https://zhuji.jb51.net/uploads/allimg/20251226/2-2512261149552M.png" /></p>
<p><strong>3&nbsp;环境配置</strong></p>
<p><strong>为了让系统能够识别并使用FFmpeg的命令,您需要将其路径添加到系统的环境变量中。以下是操作步骤:</strong></p>
<ul><li><strong>打开&ldquo;控制面板&rdquo;并进入 系统和安全,然后点击 系统。</strong></li><li><strong>选择 高级系统设置,然后点击 环境变量。</strong></li><li><strong>在系统变量中找到 Path,点击 编辑,将解压的FFmpeg目录下的 bin 文件夹路径添加到Path中。</strong></li><li><strong>点击 确定 保存更改</strong></li></ul>
<p><img alt="" src="https://zhuji.jb51.net/uploads/allimg/20251226/2-251226114955123.png" /></p>
<p><strong>4&nbsp;安装测试</strong></p>
<p><strong>完成环境变量配置后,您可以测试是否安装成功:</strong></p>
<ul><li><strong>打开 命令提示符(CMD)。</strong></li><li><strong>输入 ffmpeg -version。</strong></li><li><strong>如果出现FFmpeg的版本信息,则说明安装成功。</strong></li></ul>
<p class="maodian"></p><h3>二、RTSP服务连接</h3>
<p>2.1 RTSP概念</p>
<p>RTSP (Real-Time Streaming Protocol) 是一种应用层协议,主要用于控制音视频流媒体的传输。通过 RTSP,用户可以通过网络播放实时的音视频内容,这种协议广泛应用于监控摄像头、网络摄像头和直播服务等场景。</p>
<p>RTSP 允许客户端控制流媒体的播放(例如开始、暂停、停止),并支持多种流媒体格式的传输。</p>
<p>2.2 RTSP流转发</p>
<p>使用 FFmpeg,您可以将来自摄像头或其他源的 RTSP 流转发到另一个服务器。下面是 RTSP 流转发的具体步骤。</p>
<p>步骤 1:命令介绍</p>
<div class="dxycode"><pre class="brush:bash;">ffmpeg -i rtsp://admin:password@192.XXX.1.XX:XXX/h264/ch1/main/av_stream -c copy -f rtsp rtsp://47.XXX.XXX.XXX:20014/h264/ch3/main/av_stream</pre></div>
<p>步骤 2:参数详解</p>
<p>-i:指定输入流。该参数后面跟的是输入 RTSP 流的地址,即来自摄像头或其他设备的视频流源。</p>
<p>例如:rtsp://admin:password@192.168.1.62:554/h264/ch1/main/av_stream。</p>
<p>-c copy:表示不对视频或音频进行重新编码,而是直接复制原始流。这可以提高效率,避免额外的编码步骤。</p>
<p>-f rtsp:指定输出格式为 RTSP。</p>
<p>rtsp://47.XXX.XXX.XXX:20014/h264/ch3/main/av_stream:这是输出的目标 RTSP 流地址,FFmpeg 会将从源摄像头接收到的流转发到该地址。</p>
<p>2.3 RTSP流模拟</p>
<p>FFmpeg 还可以通过播放本地的视频文件(如 .mp4)来模拟 RTSP 流,并将其推送到 RTSP 服务器。以下是具体操作步骤。</p>
<p>步骤 1:命令介绍</p>
<div class="dxycode"><pre class="brush:bash;">ffmpeg -re -stream_loop -1 -i test.mp4 -c:v libx264 -preset ultrafast -c:a aac -f rtsp rtsp://47.XXX.XXX.XXX:20014/h264/ch1/main/av_stream</pre></div>
<p>步骤 2:参数详解</p>
<p>-re:该选项告诉 FFmpeg 以本地播放速度读取输入文件,对于实时输出非常有用。它会模拟视频的实时播放,而不是尽可能快地进行输出。</p>
<p>-stream_loop -1:无限循环播放输入流。-1 表示无限循环。</p>
<p>-i test.mp4:指定输入文件 test.mp4,您可以将其替换为其他本地视频文件。</p>
<p>-c:v libx264:指定视频编码器为 libx264,这是 H.264 的视频编码标准,广泛应用于流媒体处理。</p>
<p>-preset ultrafast:选择编码预设,ultrafast 是速度最快的选项,适合实时推流。</p>
<p>-c:a aac:指定音频编码器为 AAC,这是一种常见的音频格式,适合流媒体传输。</p>
<p>-f rtsp:指定输出格式为 RTSP。</p>
<p>rtsp://47.XXX.XXX.XXX:20014/h264/ch1/main/av_stream:这是将模拟的 RTSP 流推送到的目标地址</p>
<p>2.4 &nbsp;RTSP流常见问题排查</p>
<p>无法连接 RTSP 流:请检查以下事项:<br />RTSP 地址是否正确。</p>
<p>网络连接是否正常。</p>
<p>检查防火墙设置,确保 RTSP 协议所用的端口(通常是 554)未被阻止。</p>
<p>视频卡顿或延迟:<br />网络带宽不足可能导致流播放卡顿或延迟。您可以尝试降低视频的分辨率或码率,改善播放流畅度。</p>
<p>使用 -b:v 参数设置视频码率,例如:-b:v 800k。</p>
<p>音视频不同步:可以尝试使用以下参数进行同步调整:<br />-vsync 1:同步视频。</p>
<p>-async 1:同步音频。</p>
<p>以上就是如何在Ubuntu系统中搭建RTSP服务器?Ubuntu搭建RTSP服务器的详细内容,更多相关资料请阅读琼殿技术社区其它文章!</p>
頁: [1]
查看完整版本: 如何在Ubuntu系统中搭建RTSP服务器?Ubuntu搭建RTSP服务器的详细流程