资讯动态

基于WSL2搭建低延迟直播:RTMP推流与HTTP-FLV播放实践

发布时间:2026/10/21 12:13:21 来源:尧图企业网站定制
低延迟直播这四个字做过流媒体的同学应该都有体会传统 HLS 方案动辄 5~10 秒的延迟做互动类直播根本没法用而商业直播服务又贵又封闭想在本地验证一个想法很别扭。这次我直接在自己电脑上用 Windows WSL2 搭了一条完整收流、分发链路Android 手机负责实时推流浏览器打开一个网页就能在 1 秒左右看到画面全程不依赖任何商业直播平台。这篇文章我就把这次实践从头到尾拆开讲从方案选型、环境搭建、推流配置、服务端优化到播放页面每一步都给出可复制的命令和参数并解释背后为什么这么做。适合想本地快速验证直播功能、研究低延迟方案或者给智能硬件/移动端做配套直播服务的人参考。1. 项目整体设计与方案选型1.1 低延迟直播的核心链路先把整条链路想清楚直播本质上就是“推流 - 服务端 - 拉流”三段。推流端Android 手机采集摄像头/屏幕通过 RTMP 协议把音视频数据推到服务端。服务端跑在 WSL2 里的流媒体服务器接收 RTMP 流同时对外提供低延迟的 HTTP-FLV 分发。播放端浏览器通过 MSEMedia Source Extensions播放器拉取 HTTP-FLV 流实现秒开。为什么推流用 RTMP 而不是更现代的 WebRTC原因很简单Android 生态里 RTMP 推流支持最普遍从 FFmpeg 命令行到各种推流 SDK 都能稳定处理 RTMP而服务端把 RTMP 转成 HTTP-FLV 几乎没有额外转换成本HTTP-FLV 的延迟和 RTMP 基本一致又能让浏览器通过 HTTP 直接访问。这条组合是目前低成本低延迟直播最成熟的一条路。为什么不直接用 HLS很多人习惯性用 HLS觉得它兼容性好其实 HLS 延迟高是协议本身决定的。HLS 会把流切成一个个几秒长的 ts 分片播放器必须先下载完一个分片才开始播放所以端到端延迟最低也要一个分片长度加一个分片缓冲通常在 5~15 秒。你在浏览器里看到的是切片式回放根本不是真正的直播。交互场景下一旦延迟超过 3 秒用户就没法和画面里的内容进行实时互动了。HTTP-FLV 和 HLS 的本质区别在于HTTP-FLV 是边收边放服务器收到推流端的每一帧视频数据后立刻通过网络发给播放器播放器拿到 FLV 封装头和数据帧后马上渲染。所以它的延迟只取决于网络传输时间和播放器缓冲做到 1 秒以内很正常。这也是整个方案的核心设计思路。1.2 为什么非要用 WSL2 来跑服务端可能有人会问我 Windows 上就不能直接跑流媒体服务器吗能跑但不是自找麻烦吗市面上主流的开源流媒体服务器几乎都是为 Linux 设计的。拿我这次选用的 SRS 来说官方文档默认就是 Linux 编译部署虽然也能折腾到 Windows 上但你要处理编译链、环境变量、动态库依赖这些额外问题稍微有点版本差异就会卡半天。而 WSL2 本质是一个轻量级虚拟机底层是完整的 Linux 内核你在 Ubuntu 里能跑的东西在 WSL2 里基本都能跑编译部署流程和真实服务器完全一致。还有一个重要原因可迁移性。我在 WSL2 里把服务调通后把同样的步骤搬到一台云服务器或者机房里的 Linux 主机上几乎不需要改配置。如果直接在 Windows 原生环境里做那套方案基本搬不走。对于要长期维护的项目来说开发环境和生产环境保持一致能省掉大量隐蔽问题。和传统虚拟机相比WSL2 的资源开销小很多Windows 和 Linux 文件系统还能互相访问开发调试都方便。不过它有一个需要特别注意的点WSL2 网络默认走 NAT相当于 Windows 主机给 WSL2 虚拟了一张内部网卡两者能互通但局域网里的其它设备访问 WSL2 里的服务就需要做端口转发。这个我在第 4 章专门处理。1.3 流媒体服务端选型SRS 与 ZLMediaKit 怎么选开源流媒体服务里最常见的是 SRS 和 ZLMediaKit另外还有老的 Nginx-RTMP 模块。我对比一下各家取舍。对比项SRSZLMediaKitNginx-RTMP协议支持RTMP / HTTP-FLV / HLS / WebRTCRTMP / HTTP-FLV / HLS / WebRTC / GB28181RTMP 为主延迟优化低延迟配置成熟流媒体能力均衡依赖外部插件编译难度低一条命令搞定中需要处理依赖需编译 Nginx 加模块文档与社区中文文档完善上手快文档偏工程化资料多但偏老适合场景直播点播入门、互动直播安防、多协议接入简单转发、内部实验我最后选了 SRS。原因一是编译极其简单源码拉下来 configure 加 make 就能产出二进制二是它对 HTTP-FLV 和后续想尝试的 WebRTC 支持都很好不需要换服务。Nginx-RTMP 虽然经典但它默认只做 RTMP 转发要做 HTTP-FLV 得额外装第三方模块做 WebRTC 基本不可能不适合想深入玩低延迟的人。这里做个提示选型不要只看“好不好”要看“改起来麻不麻烦”。服务端是整条直播链路的咽喉你要在上面调延迟、做鉴权、可能还要加录制所以一定选一个配置结构清晰、支持二次开发的。SRS 的配置是声明式 vhost 体系逻辑直观动手改起来心理负担小很多。2. 环境准备与基础安装2.1 Windows 上启用 WSL2Windows 打开 WSL2 现在已经是轻量操作了前提是系统版本别太老Windows 10 2004 及以上或者 Windows 11 都可以。我用的是 Windows 11打开管理员 PowerShell执行wsl --install这条命令会把 WSL 功能、虚拟化平台都装好默认安装 Ubuntu 发行版。装完按要求重启重启后再执行wsl -l -v能看到Ubuntu版本号前面带个星号的就是默认发行版。这时候还要确认一件事版本必须是 2。如果显示的是 1用这条命令手动转换wsl --set-version Ubuntu 2注意 BIOS 里的 CPU 虚拟化要开启就是 Intel VT-x 或者 AMD-V 那个选项。大多数情况下现代电脑默认开着如果启动 WSL2 时报“请启用虚拟机平台”去 BIOS 看一眼就行。还有个小技巧为了避免在 Windows 和 WSL2 之间反复切换目录导致路径混乱我建议直接在 WSL2 内部维护项目文件。Windows 的 C 盘在 WSL2 里挂在 /mnt/c虽然可以访问但跨文件系统的速度损耗比较大编译大项目时尤其明显。把所有流媒体相关文件都放在 WSL2 自己的文件系统比如 ~/srs里读写效率高权限问题也少。2.2 WSL2 系统初始化与依赖工具进入 WSL2 终端先把软件源和基础工具链准备好。Ubuntu 发行版通常自带一部分工具但还是建议完整走一遍sudo apt update sudo apt upgrade -y sudo apt install -y build-essential git unzip pkg-config perl libssl-devSRS 编译的时候需要 gcc、g、make、perl 和 openssl 开发库上面这条命令已经覆盖。build-essential 是一整套编译工具链装了它基本就不会遇到“缺 gcc”这种问题。我刚开始踩过一个小坑直接 clone 官方仓库时网络偶尔会超时。后来统一用国内镜像源码仓库速度快很多。命令git clone -b develop https://gitee.com/ossrs/srs.git cd srs/trunk有一点值得说明SRS 的代码仓库里trunk 目录才是真正的工程目录很多新手第一次 clone 后找不到编译入口其实就是没进这个子目录。分支建议用 develop虽然名字听起来像开发版但它的新特性最全WebRTC 相关的支持也都在里面。生产环境反而更推荐固定 release 版本以追求稳定自己实验项目用 develop 更顺手。2.3 获取并编译 SRS进入 SRS 的 trunk 目录后执行./configure --with-http-server --with-http-api --with-http-callback make -j$(nproc)编译时间取决于机器性能4 核 CPU 大约几分钟内存建议至少 4GB。如果编译中途被 killed一般是内存不足可以先加 swap 或者减少并行编译核数比如改用make -j2编译完检查产物./objs/srs -v能看到版本号就说明二进制没问题。首次启动前先看一下默认配置文件长什么样./objs/srs -c conf/srs.confSRS 默认监听 1935 端口跑 RTMP并自带一个简单的 HTTP 服务在 8080 端口。默认配置能跑起来但离“低延迟”还有一段距离。低延迟相关配置我会在第 4 章细聊先别急着改先把推流推通再说。3. Android 推流端配置3.1 推流方式怎么选Android 端推流有三条路径按复杂度排列应用商店里找 RTMP 推流类工具。这类 App 最省事输入推流地址、设置分辨率码率就能推。适合先验证链路是否通。Termux 终端装 FFmpeg命令行推流。适合喜欢可控性、需要精确调节编码参数的场景。Termux 是 Android 上的 Linux 模拟终端没有 root 也能用。Android Studio 写一个自定义推流 App集成摄像头采集、编码、RTMP 发包。这是产品化路径适合要长期迭代的人但工作量明显大。如果你是第一次玩我建议先用方案 1 把链路跑通确认服务器没问题后再切换到方案 2 用 FFmpeg 调参数你会对直播延迟的产生机制有非常直观的认识。本文重点讲方案 2因为它能让你看到每一帧是怎么被编码、怎么被发的。3.2 FFmpeg 推流命令逐参数拆解安装 Termux 后先装 FFmpegpkg install ffmpeg我先用一个测试视频源来推这样不需要摄像头也能在电脑上看到画面。命令行如下ffmpeg -f lavfi -i testsrcsize1280x720:rate30 \ -c:v libx264 -preset ultrafast -tune zerolatency \ -b:v 1500k -g 60 -pix_fmt yuv420p \ -f flv rtmp://服务端IP/live/screen拆开看每个参数在干什么-f lavfi -i testsrcsize1280x720:rate30FFmpeg 内部生成一个测试画面1280x720 分辨率30 帧每秒。用这个当视频源就不用纠结手机摄像头权限问题。-preset ultrafastx264 编码器预设。x264 为了在不同场景下平衡画质和速度提供了若干预设。ultrafast 表示压缩速度最快牺牲部分压缩率换来的编码延迟极低。直播场景对快速响应比文件体积更敏感所以首选它。-tune zerolatency同样是 x264 的优化开关专门为低延迟场景设计让编码器尽量少缓冲。直播只要不追求超高画质这个参数基本是必需品。-b:v 1500k视频码率 1500kbps。720p 30 帧的画面这个码率在普通网络下很稳。-g 60关键帧间隔为 60 帧也就是每 2 秒一个关键帧。这个值对播放端秒开影响很大后文细说。-f flv rtmp://服务端IP/live/screen输出协议用 FLV 封装推到 RTMP 地址。SRS 默认的应用名是 livestream 名是 screen具体名字可以自己起前后端对应就行。如果你真要用手机摄像头推Termux 相关操作会因为 Android 的摄像头权限机制变得麻烦所以想推摄像头画面的朋友直接去用推流 App设置界面里一般都有 RTMP 地址栏填上同一个地址就行。3.3 先做连通性验证推流命令执行后终端会开始滚动输出编码日志出现Press [q] to stop说明正在推流。这时候去服务端看一眼确认流是否真正到达# 在 WSL2 的 SRS 目录下 ./objs/srs -c conf/srs.conf启动日志里看到类似rtmp server listen on 0.0.0.0:1935的话再观察有没有连接信息。SRS 收到推流后默认会把流信息打印到日志。你还能通过 SRS 自带 API 查到所有活跃流curl http://127.0.0.1:8080/api/v1/streams返回的 JSON 里能找到screen这条流就说明推流端和服务端已经打通。这一步验证很重要它把“编码问题”和“网络问题”区分开了。如果这里查不到流问题在推流端或网络查得到但浏览器打不开问题才在播放端或分发配置。4. 服务端配置与低延迟优化4.1 面向低延迟的 SRS 配置解析SRS 默认配置能跑但延迟表现一般。我这里直接给一份能支撑低延迟直播的配置文件并逐项讲清楚为什么这么写。在 SRS 的 conf 目录下新建 low_latency.conflisten 1935; http_server { enabled on; listen 8080; dir ./objs/nginx/html; } vhost __defaultVhost__ { http_remux { enabled on; mount [vhost]/[app]/[stream].flv; } play { gop_cache off; } }三个关键配置第一listen 1935是 RTMP 入口推流端往 1935 端口打。第二http_server里的listen 8080是提供 HTTP-FLV 访问的端口。http_remux段开启 RTMP 流到 HTTP-FLV 的实时转封装mount [vhost]/[app]/[stream].flv规定了访问路径格式。比如推流地址是rtmp://IP/live/screen那么对应的 HTTP-FLV 拉流地址就是http://IP:8080/live/screen.flv第三play段里gop_cache off是延迟秒开的核心。GOP Cache 是 SRS 为每个流保留最近一段视频关键帧供新播放器快速接入的功能。开着它播放器一进来立刻能从缓存的 GOP 开始播放体验上“秒开”但它会让画面对应的时间往回跳实际延迟被拉高关闭它播放器必须等到下一个关键帧到来才能出画面但出画面之后就是实时画面。对于互动直播画面完整性不那么重要实时性才重要所以我选择关掉。如果后续想让网络差的新播放器更好连上可以适当打开 GOP Cache但要接受延迟增加。延迟优化本身就是一个取舍问题没有绝对正确的配置。4.2 用端口转发让局域网设备访问 WSL2配置好 SRS 之后先在本机验证Windows 浏览器访问http://127.0.0.1:8080能看到 SRS 测试页。但要真正让 Android 手机或者局域网内别的电脑访问到 WSL2 里的服务必须解决网络互通问题。WSL2 每次启动可能拿不同的内部 IP。查看当前 WSL2 的 IPip addr show eth0通常得到的地址形如172.x.x.x这是 Windows 主机通过虚拟交换机分配给 WSL2 的私有地址。Android 手机不在同一个内网网段直接访问这个地址肯定不通。解决办法是用 Windows 的端口转发能力把 Windows 的 1935 和 8080 端口上的流量转发到 WSL2 对应端口。管理员权限打开 PowerShellnetsh interface portproxy add v4tov4 listenport1935 listenaddress0.0.0.0 connectport1935 connectaddress172.x.x.x netsh interface portproxy add v4tov4 listenport8080 listenaddress0.0.0.0 connectport8080 connectaddress172.x.x.x这里的172.x.x.x换成查到的 WSL2 实际 IP。执行完以后局域网设备访问 Windows 主机 IP 的 1935/8080 端口Windows 会把请求转发给 WSL2。同时还要在 Windows 防火墙里放行这两个端口否则外部流量会被拦下。管理员 PowerShellnetsh advfirewall firewall add rule nameSRS-RTMP dirin actionallow protocolTCP localport1935 netsh advfirewall firewall add rule nameSRS-HTTP dirin actionallow protocolTCP localport8080这里有个现实问题WSL2 每次重启 IP 都会变portproxy 里写死的旧 IP 会失效。解决办法是做一个一键脚本启动时自动查询 WSL2 IP 并重建转发。脚本内容很简单先用wsl -e ip addr show eth0拿到 IP再调用 netsh 删除旧规则添加新规则。4.3 延迟怎么测、怎么看配置完成后真的把画面端到端跑起来怎么量延迟最笨也最可靠的办法是“时钟对比法”在推流端显示一个正在跳动的秒表播放端同时打开同一个秒表网页然后拍一张照片两个表盘读数之差就是端到端延迟。注意测量时推流端和播放端不能共用同一个画面源否则你比不出差别。我通常是推流端播一个系统时钟播放页面里也放一个统一时间源截图之后一减就知道当前延迟。在实际操作中我看到的效果是本地局域网内从手机推流到浏览器播放延迟基本稳定在 800ms 到 1.2 秒之间。这个数据已经足够支撑在线互动、远程演示、设备监控这类应用。5. 浏览器秒开播放实现5.1 播放内核flv.js 与 mpegts.js浏览器不能直接播放 FLV 文件因为 HTML5 的 video 标签只认 MP4/WebM 这些格式。于是社区引入了 MSE它允许 JavaScript 把媒体数据分块喂给 video 元素。主流的两个库是 flv.js 和 mpegts.js。flv.js 是 Bilibili 开源的老牌播放器当年让无数浏览器实现了 FLV 直播播放。但它的维护已经慢下来一些浏览器新限制处理不及时。mpegts.js 可以视为 flv.js 的延续和维护分支支持 TV 等更多封装格式修复了很多库体积和兼容性问题API 和 flv.js 几乎一致。所以我更推荐直接用 mpegts.js。为什么不直接上 WebRTCWebRTC 确实能做到 300~500ms 的超低延迟但它需要服务端和浏览器双方做 SDP 协商播放器实现复杂度显著提高对物联网、监控这类播放端未必需要极致延迟的场景来说HTTP-FLV 的简单可靠更为重要。记住一个原则延迟够用就好稳定和链路长度一样重要。5.2 一个可直接复用的播放页面下面这个页面是我实际跑通的版本保存为 index.html放到任何能访问到服务端口的地方就可以。!DOCTYPE html html head meta charsetutf-8 title低延迟直播播放/title meta nameviewport contentwidthdevice-width, initial-scale1 /head body video idplayer controls muted autoplay playsinline stylewidth:100%;/video script srchttps://cdn.jsdelivr.net/npm/mpegts.js/script script const video document.getElementById(player); if (mpegts.getFeatureList().mseLivePlayback) { const flvPlayer mpegts.createPlayer({ type: flv, isLive: true, control: { enableStashBuffer: false, autoCleanupSourceBuffer: true, liveBufferLatencyChasing: true }, url: http://服务端IP:8080/live/screen.flv }); flvPlayer.attachMediaElement(video); flvPlayer.load(); flvPlayer.play(); } else { alert(当前浏览器不支持 MSE 播放 FLV请使用最新版浏览器); } /script /body /html几个关键点muted autoplay playsinline浏览器自动播放策略比较严格默认带声音的视频不允许自动播。静音是为了让 autoplay 顺利通过用户可以手动点声音。enableStashBuffer: false关闭播放器的内部缓冲。默认播放器为了平滑播放会攒一些数据再播这会让延迟增大。实时场景直接关掉让数据边到边放。liveBufferLatencyChasing: true允许播放器在延迟累积过大时主动追帧丢一点数据也要回到实时。autoCleanupSourceBuffer自动清理陈旧缓冲防止拉流时间久了内存膨胀。播放地址里的服务端IP就是局域网中 Windows 主机的 IP注意不是 WSL2 的 IP。因为端口转发已经把 Windows 的 8080 转发给 WSL2 了播放端走 Windows IP 就好。5.3 “秒开”背后的原理与调优很多新手有个误解以为“秒开”是优化出来的黑科技。其实它是协议和配置共同的产物。HTTP-FLV 能秒开是因为服务器收到 RTMP 推流后立刻把流重新封装成 FLV 的 header然后通过 HTTP 响应头Content-Type: video/x-flv持续推送数据。播放器拿到 FLV header 后只要等来第一个可解码视频帧关键帧就能完成初始化并开始渲染画面。所以影响开播速度的因素很清晰第一关键帧间隔-g。我把间隔设置为 2 秒播放器最坏情况等 2 秒才开始出画面。如果你把-g改成 30即每秒一个关键帧最坏等待时间就缩短到 1 秒但坏处是同等码率下画质略降因为更多数据量被分给关键帧了。第二GOP Cache 开关。前面说了关掉它新播放器会等下一个关键帧开它则直接回到之前任一 GOP 起点。第三播放器缓冲。enableStashBuffer关闭后数据不积压出画即实时。实际调整的时候不要同时动很多个参数每次改一个然后用 4.3 里说的方法量一次延迟形成记录。这样你才知道究竟是哪个参数真正起作用。6. 常见问题排查与避坑指南6.1 SRS 编译与启动常见报错编译期遇到最多的是内存不足导致被 killed。解决方法临时创建 swap比如在 WSL2 里分配 2GB 交换文件。sudo fallocate -l 2G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile另外警告大家不要直接改默认配置文件然后启动容易越改越乱。我给个稳妥流程把你的实验配置放单独文件启动时用-c指定这样比较有利于回退排查。比如./objs/srs -c conf/low_latency.conf启动报错还可能是端口被占。用以下命令查看netstat -tlnp | grep 1935有残留的 SRS 进程就 kill 掉再启动。6.2 局域网内访问不了的排查思路这类问题九成出在网络转发而不是服务本身。排查顺序在 Windows 本机确认端口通不通浏览器访问http://127.0.0.1:8080。在 WSL2 里确认服务监听地址是0.0.0.0不是127.0.0.1。listen 默认 0.0.0.0 一般没问题。用手机访问http://Windows IP:8080不通就检查 portproxy 规则和防火墙。查看 portproxy 规则netsh interface portproxy show v4tov4看到 connectaddress 还是旧 WSL2 IP 的话删掉重建。还有一点容易忽略手机和电脑必须在同一个局域网网段。你要是手机在 4G 网络里当然访问不到电脑。6.3 播放黑屏、一直加载如果拉流地址正确但画面不出来按这个顺序排查先确认服务端看得到流。执行curl http://127.0.0.1:8080/api/v1/streams返回空数组说明没有推流在服务端去查推流端。确认播放页脚本有没有报错。F12 打开控制台看 mpegts.js 是否加载成功。确认跨域问题。播放页面如果和流地址不同源HTTP 请求会带上 OriginSRS 默认可能没返回 CORS 头。简单处理把播放页面放在 SRS 自带 HTTP 服务的 web 目录下或给静态服务器添加 CORS 响应头。确认编码参数。如果推流端用了浏览器不支持的编码格式比如部分 Android 摄像头输出的是 HEVC而播放页只声明 FLV 没指定 codec也会黑屏。可以用 FFmpeg 强制libx264编码推流来排除。6.4 延迟高、越看越慢表现为最开始还能接受看一会儿延迟越来越大。通常有两个原因一是浏览器切后台导致渲染暂停但网络缓冲还在持续积累。这个可以用 5.2 里liveBufferLatencyChasing缓解。二是服务端 GOP Cache 没关干净。SRS 有些配置层级会继承默认值如果你的 vhost 里没有明确写gop_cache off可能实际开着。用 API 查看当前流的延迟状态或者直接确认配置里有没有这个字段。还有一个常见误区视频流路径上的 TCP 传输不会有太大延迟真正积压时间的是播放器缓冲区。所以测试的时候不要让播放页一直在后台不动影响结果。7. 进阶扩展方向7.1 把延迟压到几百毫秒WebRTC 方案HTTP-FLV 能到 1 秒左右但真要做到音视频互动级别的低延迟还需要 WebRTC。SRS 在较新版本里集成了 WebRTC 接入能力配置很简单webrtc { enabled on; listen 8000; } vhost __defaultVhost__ { rtc { enabled on; rtc_to_rtmp on; rtmp_to_rtc on; } }启用后推流端可以走 WebRTC 推到 SRS播放端也可以直接用 WebRTC 拉流。在局域网里实测延迟能压到 300ms 以内。代价是播放端要处理更复杂的信令交互而且需要服务端能协商 ICE/STUN部署复杂度明显上升。我的建议是先把 HTTP-FLV 链路跑熟再根据业务需求决定是否上 WebRTC。7.2 推流鉴权、多路接入、录制回放生产环境里不可能让任何人都往你的服务器推流。SRS 提供回调机制可以在推流开始前请求你的鉴权接口。在配置里加上vhost __defaultVhost__ { http_hooks { on_publish http://127.0.0.1:8080/api/auth/publish; } }这个接口返回 200 就允许推流返回非 200 就拒绝。这就把推流权限控制收口到自己的业务逻辑里了。多路接入更好办RTMP 地址的 stream 名不同就是不同流。比如/live/camera1和/live/camera2播放端分别拉对应.flv地址即可。录制回放则是打开 SRS 的 DVR 模块vhost __defaultVhost__ { dvr { enabled on; dvr_path ./objs/nginx/html/record/[app]/[stream].[timestamp].flv; dvr_plan seg; dvr_duration 30; } }这样每 30 秒生成一个切片文件配合播放器就能做回看功能。对于做监控、巡检、远程指导这类需求非常实用。7.3 从本地实验到正式环境的注意点本地跑通只是开始真要部署到远程服务器有几个细节要提前想好。第一是防火墙规则重新配置云端主机一般自带安全组要把 1935 和 8080 端口放行。第二是带宽评估一个 720p 30 帧 1.5Mbps 的流如果同时有 10 个播放端出口带宽就要预留至少 15Mbps这里没有计算代码紧凑度只看码率和并发数。第三是播放页要加 HTTPS浏览器自动播放策略在 HTTPS 下更宽松否则一些用户代理会限制音视频播放。另外SRS 发布新版本时配置文件字段可能会有调整升级前先备份 conf 目录。我在一次升级版本时踩过配置字段不兼容的坑服务启动不了最后对照新旧配置逐项 diff 才解决。所以那之后我都会把线上配置放到版本管理里跟踪。我个人在实际操作中的体会是低延迟直播系统最麻烦的不是某一台设备怎么配而是整条链路的时序关系。推流编码、服务转发、播放缓冲每一层都会往总延迟里加一点你必须每一层都有关闭多余缓冲的意识才能把延迟压下来。这个环境在本地验证项目时真的很值以后做智能设备预览、远程无人值守、线上实时教学这类需求直接把里面的套路搬过去就行。最后分享一个小技巧把第 2 章到第 5 章的命令整理成一个部署脚本从零搭建一套环境只需要十几分钟比手工敲省心太多。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑