
家里那台接了电视和音响的旧笔记本硬盘里塞满了片源人一旦躺到沙发上就再也不想起来——想切下一集、想调音量、想跳到片尾都得爬起来摸键盘。这个场景下最省事的做法并不是装一整套远程桌面软件而是把 VLC 播放器自带的 HTTP 控制接口打开。只要手机和这台电脑在同一个局域网里浏览器敲一个网址就能实现对 VLC 的远程控制暂停、切集、调音量、拖进度、指定文件播放一个都不少。很多人用了十几年 VLC都不知道它内置了一个可远程访问的 Web 控制台和一套 JSON 接口——默认是关闭的藏得比较深但一旦打开局域网内的任何设备都能当遥控器用连脚本都能直接调它。这篇文章会把这套控制链路完整拆开VLC 的两个控制接口分别适合什么场景怎么在图形界面和命令行里打开浏览器和脚本怎么发指令手机怎么变遥控器以及连不上时该按什么顺序排查。桌面端 3.0.x 的操作路径为主同时标注不同版本、不同系统上的差异。刚接触 VLC 的人可以照着抄作业已经在用的可以重点看后面的排查清单和脚本玩法。1. 先搞清楚 VLC 内置控制接口到底能干什么1.1 为什么这个场景不该上远程桌面想在另一台设备上控制播放第一反应往往是装个远程桌面类工具把整个屏幕画面投过来再点鼠标。这个思路能work但代价不小整屏画面持续编码传输对 CPU、显卡和无线带宽都是持续压力而且远程会话本身会介入图形子系统的渲染流程在某些机器上会直接把硬件解码的路径打断本地画质跟着掉。更现实的问题是这类工具几乎都要在控制端也装一个客户端临时借朋友的手机用一下就很难受。VLC 自带的控制接口走的是完全不同的路子它只传控制指令和播放状态一秒钟几百字节的流量都不到。控制端只要有浏览器就行不用装任何东西延迟是网络往返级别家用局域网里基本感觉不到。代价是它只能控制播放控制不了其他软件——如果你还想顺手操作浏览器或文件管理器那还是得回到远程桌面。判断标准很简单只为了看片用 VLC 自己的接口需要操作整台机器才考虑别的方案。1.2 HTTP 接口和 RC 接口一个管浏览器一个管终端VLC 提供两个主要的外部控制通道很多人把它们混在一起结果配置时找不到对应项。HTTP 接口模块名 httpLua 写的 Web 控制台默认端口 8080自带一个网页界面同时暴露/requests/status.json这类 JSON 接口。适合手机浏览器、平板、另一台电脑也适合用 curl 直接发指令。这是最通用的一条路。RC 接口Remote Control纯文本命令行通过 telnet 或 nc 连上去敲pause、next、volume 256这样的命令。它没有网页但胜在轻——适合老设备、纯终端环境、以及那些不想让浏览器掺和进来的自动化脚本。两个接口可以同时开用冒号分隔即可--extraintfhttp:rc。另外还有一个容易被忽略的点--intf和--extraintf是两回事。--intfhttp表示整个 VLC 不显示图形界面只跑 Web 控制台适合没有显示器的机器--extraintfhttp是在保留正常窗口的基础上额外挂一个 Web 控制台。想要后台常驻、随时接受遥控前者更干净想要我自己也能在电脑上操作后者更方便。1.3 打开接口之后你能控制哪些东西心里有个功能清单配置的时候就知道哪些参数必须填对操作HTTP 命令RC 命令备注播放/暂停切换commandpl_pausepause是切换不是设置强制播放/强制暂停pl_forceresume/pl_forcepauseplay/pause多客户端控制时更可靠上一条/下一条pl_previous/pl_nextprev/next播放列表为空时无反应调音量volumeval256volume 256取值 0–512256 即 100%跳转seekval30Sseek 30支持30S、-10S、25%播放指定文件/流in_playinputURIadd URIURI 需要转义追加到播放列表in_enqueueinputURIenqueue URI适合整季批量加读取当前状态/requests/status.jsonstatus进度、时长、音量、标题切换全屏fullscreenf部分版本需要窗口焦点这张表里的命令建议直接存成便签。实际用起来最频繁的其实就四条暂停、下一集、音量、后退十秒。2. 打开 HTTP 控制台图形界面、命令行、配置文件三条路2.1 Windows 图形界面的完整点击路径先打开 VLC点菜单里的工具进偏好设置。这个窗口左下角有个显示设置的简/全部切换默认是简单必须切到全部否则看不到接口相关的树形结构这一步卡住过很多人。切到全部之后在左侧树里找接口展开后点主接口右侧会列出所有可选的接口模块。找到Web把前面的复选框勾上——注意这里勾的就是那个 Lua 写的 Web 控制台。接着在左侧继续展开接口 → 主接口 → Lua点Lua HTTP右边会出现几个关键字段Lua HTTP 密码、Lua HTTP 端口、源目录。三个字段的填写原则密码一定要设空密码意味着局域网内任何人打开网址就能控制你的播放器测试阶段无所谓长期运行不要省这一步端口默认 8080 可以先不动遇到冲突再换源目录保持默认即可那是网页界面文件所在的位置后面想放自定义控制页会用到它。点保存之后有一件事必须做完全退出 VLC 再重新启动。偏好设置里的接口配置只在进程启动时读取一次保存后直接点右上角叉掉是没用的。Windows 上很多人习惯点关闭按钮如果开了托盘图标那个按钮只是最小化窗口进程还在配置依然没生效。稳妥做法是从托盘图标右键选退出或者用任务管理器确认 vlc.exe 已经不在了。2.2 命令行启动一条命令顶十次点击图形界面的问题是不方便重复部署换台机器、换套系统又得点一遍。命令行反而更清楚参数写在那一眼就知道开了什么。Windows 上的写法注意引号路径带空格必须包起来C:\Program Files\VideoLAN\VLC\vlc.exe --extraintfhttp --http-host0.0.0.0 --http-port8080 --http-passwordmysecret D:\影片\playlist.m3uLinux 和 macOS 上同理参数名完全一致vlc --extraintfhttp --http-host0.0.0.0 --http-port8080 --http-passwordmysecret ~/Movies/playlist.m3u如果这台机器是专门用来放片的没有显示器、也不需要在本地操作可以把主界面换成空实现让它纯后台跑vlc --intfdummy --extraintfhttp --http-host0.0.0.0 --http-port8080 --http-passwordmysecret /data/movies/playlist.m3u--intfdummy表示不创建任何界面模块进程安安静静待在后台。用 systemd 的用户级服务把它挂起来开机自动拉起、崩了自动重启这套组合在没有桌面环境的小主机上非常好用[Unit] DescriptionVLC Web Control Afternetwork.target [Service] ExecStart/usr/bin/vlc --intfdummy --extraintfhttp --http-host0.0.0.0 --http-port8080 --http-passwordmysecret /data/movies/playlist.m3u Restartalways RestartSec5 [Install] WantedBydefault.target存到~/.config/systemd/user/vlc-web.service然后systemctl --user enable --now vlc-web。想让它不登录也运行再开一下loginctl enable-linger 你的用户名。2.3 三个参数怎么取舍绑定地址、端口、密码--http-host值得单独说。默认情况下 VLC 会监听所有网络接口用netstat -ano | findstr 8080Windows或ss -ltnp | grep 8080Linux能看到它绑在0.0.0.0:8080。这在多数家庭网络里没问题但如果这台机器上装了虚拟机、容器或者同时插着有线和无线两张网卡那么所有接口里就包含了一些你并不想暴露的地址。更隐蔽的一种情况是它绑到了127.0.0.1:8080——这时候你在本机浏览器里打开一切正常换手机就怎么都连不上排查半天找不到原因就是因为从来没看过监听地址。碰到多网卡的机器直接把--http-host写成本机的局域网 IP例如192.168.1.20问题一次性消除。--http-port的坑是端口冲突。8080 是 Web 服务最爱用的端口之一开发机上经常已经被别的进程占了。冲突时的表现很有迷惑性VLC 正常启动浏览器也能打开 8080但返回的是另一个服务的页面你会以为是 VLC 配置错了。启动前先netstat -ano | findstr :8080确认一下被占就换成 8090 之类的冷门端口。密码这块VLC 的 Web 接口用的是 HTTP Basic 认证也就是说密码是明文附在请求头里的没有加密。局域网可信环境里这样用没问题但由此能推出两条纪律第一密码只用 ASCII 字符别用中文或特殊符号否则后面自己写脚本做认证转换会踩编码的坑第二这个端口只在家庭/办公局域网内使用不要以任何形式开放到局域网之外它本来就不是为公网设计的。3. 用浏览器和 curl 验证控制链路是否打通3.1 先读 status.json看清它返回了什么配置完别急着开一堆页面先用命令行确认接口活着。最直接的一条curl -u :mysecret http://192.168.1.20:8080/requests/status.json注意-u后面那个冒号冒号前面是空的——VLC 的用户名是空的密码写在冒号后面。这是很多人第一次用 curl 时会卡的地方写成-u mysecret会被当成用户名 mysecret、密码为空然后拿到 401。如果确实返回 401加个-v看请求里到底有没有带Authorization头。返回的 JSON 里几个字段最有用state是playing、paused或stopped可以据此判断当前到底在干什么time和length是当前播放位置和总时长单位秒volume的取值范围是 0 到 512也就是 256 代表 100% 音量某些版本能拉到 512 实现 200% 的增益position是一个 0 到 1 的小数做进度条最方便information.category.meta里面通常有title、artist、filename手机上想显示正在播放什么就取这里。写脚本的时候有个小习惯很省事不要解析整个 JSON只取需要的字段。命令行下可以用jqcurl -s -u :mysecret http://192.168.1.20:8080/requests/status.json | jq -r .state, .time, .length, .volume3.2 常用控制命令和参数格式把状态读通之后发控制命令就是同一套路只是多一个command参数curl -s -u :mysecret http://192.168.1.20:8080/requests/status.json?commandpl_pause curl -s -u :mysecret http://192.168.1.20:8080/requests/status.json?commandpl_next curl -s -u :mysecret http://192.168.1.20:8080/requests/status.json?commandvolumeval300 curl -s -u :mysecret http://192.168.1.20:8080/requests/status.json?commandseekval-10S有两点必须提前知道否则一定会撞上。第一pl_pause是切换语义不是设置为暂停。如果你手机上点了暂停然后又用脚本发了一次pl_pause播放会重新开始。多个控制端同时操作时这种感觉非常混乱。可靠做法是先用status.json读state再根据状态发pl_forcepause或pl_forceresume这两个命令是设置而非切换重复发也不会互相打架。第二seekval30S里那个加号在 URL 查询串里会被解析成空格结果 VLC 收到的参数变成30S行为不可预期。正确写法是把加号转义成%2B也就是seekval%2B30S减号没有这个问题-10S可以照写。自己拼 URL 的时候这一步特别容易漏。播放指定文件的时候input参数必须是 URI而且要做百分号编码。Windows 本地路径要转成file:///D:/videos/a.mkv这种形式中文和空格都得编码。手工编码太痛苦用 curl 的-G加--data-urlencode一步到位curl -s -u :mysecret -G http://192.168.1.20:8080/requests/status.json \ --data-urlencode commandin_play \ --data-urlencode inputfile:///D:/影片/第一集.mkv网络共享上的文件建议先用系统把共享目录映射成盘符再传file:///Z:/a.mkv。直接写 UNC 路径那种file://///服务器/共享/文件.mkv的斜杠数量经常数错不同系统上的解析结果也不一致踩一次坑就明白了。还有一种更省事的做法把一整个 m3u 播放列表扔给in_playVLC 会把它展开成列表一次调用等于排好整季的片单。3.3 两个可以直接抄的最小控制脚本bash 版本定义个函数就能在终端里当遥控器用#!/usr/bin/env bash VLChttp://192.168.1.20:8080 AUTH:mysecret v() { curl -s -u $AUTH $VLC/requests/status.json?command$1 /dev/null; } vmsg() { curl -s -u $AUTH $VLC/requests/status.json?command$1$2 /dev/null; } v pl_pause vmsg volume val320 vmsg seek val-10SPowerShell 版本稍微绕一点因为Invoke-RestMethod的-Credential想要一个完整的凭据对象而 VLC 只需要空用户名加密码手工拼 Basic 头反而更简单$base http://192.168.1.20:8080 $raw : mysecret $b64 [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes($raw)) $hdr { Authorization Basic $b64 } Invoke-RestMethod $base/requests/status.json?commandpl_next -Headers $hdr Invoke-RestMethod $base/requests/status.json?commandvolumeval320 -Headers $hdr顺便说一句这里也能看出为什么前面强调密码只用 ASCII上面这段 base64 是基于 ASCII 编码做的密码里一旦出现非 ASCII 字符算出来的头就是错的服务端会直接返回 401而且报错信息不会告诉你是编码问题。4. 手机变遥控器移动页面与自建控制页两种玩法4.1 自带的 /mobile/ 页面能用但别抱太高期望VLC 的 Web 控制台自带一个移动端页面网址是http://192.168.1.20:8080/mobile/。打开之后是一个按钮偏大的简化界面播放暂停、上下一条、音量加减、进度拖动都有能用。它的局限也得说清楚。这个页面是相当老的写法部分较新的移动浏览器上进度条的拖动会失灵点上去没反应它没有搜索功能播放列表长了只能一直翻页面上也不显示封面之类的信息。另外如果之前改过Lua HTTP的源目录而新目录里没有mobile文件夹这个地址会直接 404——这不是接口坏了是网页文件找不到了把源目录改回默认值就恢复。真要追求手感还是自己写一个更靠谱。4.2 自己写一个单页控制面板顺手绕开跨域问题自建控制页最核心的部分其实就几行fetch。先给一个能跑的完整版本!doctype html html langzh-CN head meta charsetutf-8 meta nameviewport contentwidthdevice-width,initial-scale1 titleVLC 遥控/title style body{font-family:system-ui,sans-serif;background:#121212;color:#eee;margin:0;padding:18px} h3{margin:0 0 12px} input[typerange]{width:100%;margin:14px 0} .row{display:flex;flex-wrap:wrap;gap:10px;justify-content:center} button{flex:1 1 40%;font-size:17px;padding:16px 0;border:0;border-radius:10px;background:#3ddc84;color:#062} p{color:#aaa;font-size:14px} /style /head body h3 idtitle连接中…/h3 input idpos typerange min0 max100 value0 div classrow button onclickcmd(pl_previous)上一集/button button onclickcmd(pl_pause)暂停/继续/button button onclickcmd(pl_next)下一集/button button onclickcmd(seekval-10S)后退10秒/button button onclickcmd(seekval%2B30S)前进30秒/button button onclickcmd(volumeval160)音量60%/button /div p idinfo/p script const S http://192.168.1.20:8080; const H { Authorization: Basic btoa(:mysecret) }; async function cmd(q) { await fetch(S /requests/status.json?command q, { headers: H }); tick(); } async function tick() { try { const r await fetch(S /requests/status.json, { headers: H }); const j await r.json(); const meta (j.information j.information.category j.information.category.meta) || {}; document.getElementById(title).textContent (meta.title || 未播放) · j.state; document.getElementById(info).textContent j.time / j.length 秒 · 音量 Math.round(j.volume / 2.56) %; document.getElementById(pos).value Math.round(j.position * 100); } catch (e) { document.getElementById(title).textContent 连接失败检查 IP 和密码; } } document.getElementById(pos).addEventListener(change, e { cmd(seekval e.target.value %); }); setInterval(tick, 2000); tick(); /script /body /html代码里有几个刻意的处理前进命令写的是%2B30S而不是30S原因前面讲过btoa(:mysecret)里那个冒号不能省少了它就是错的认证头音量显示做了除以 2.56 的换算因为接口给的是 0–512。密码里如果出现中文btoa会直接抛异常这也再次说明密码只用 ASCII 最省事。接下来是一个真正容易被忽略的问题跨域。如果你把上面这个文件存到电脑桌面用file://打开浏览器会因为页面来源是空而触发跨域检查而我们请求里带了Authorization头这不是简单请求浏览器会先发一个OPTIONS预检VLC 的接口并不处理这种预检请求就被拦掉了表现是按钮点了没反应、控制台报跨域错误。绕开的办法非常干净把这个 HTML 放到和接口同一个源里。也就是丢进 VLC 的Lua HTTP源目录Windows 下通常是C:\Program Files\VideoLAN\VLC\lua\http\放进去之后用http://192.168.1.20:8080/remote.html访问。页面和接口同源跨域问题根本不存在。写 Program Files 需要管理员权限嫌麻烦可以把整个lua/http目录复制一份到别处然后在Lua HTTP的源目录里指向新位置再重启 VLC。顺便还能做个小优化手机浏览器打开这个页面后选添加到主屏幕图标点开就是全屏遥控器和原生 App 的观感几乎没差别。4.3 先找到主机 IP别每次都靠猜控制页要填 IP而 IP 会变。找 IP 的手段按场景分几种在放片那台机器上Windows 用ipconfig重点看 IPv4 地址Linux 用ip addr或hostname -ImacOS 用ifconfig | grep inet。在控制端不想去动那台机器可以试着按主机名解析Windows 10 以后和 macOS 都支持 mDNSping 主机名.local经常能直接通Linux 上需要系统里装了 Avahi 才认这个后缀。Windows 上arp -a能列出最近通信过的同网段设备扫一眼就知道邻居都叫什么地址。想一次性把整个网段摸清楚用 nmap 扫描最省时间nmap -sn 192.168.1.0/24只探活很快更精准的是直接找开了 Web 控制台的机器nmap -p 8080 --open 192.168.1.0/24如果全屋只有一台设备开着 VLC 的接口它会直接把那台挑出来。手机上的网络扫描类应用也能干同样的事哪个顺手用哪个。最后一步是治本把放片那台机器的地址固定下来。要么在系统里设静态 IP要么在路由器上给它的网卡做地址保留。不固定的话第二天路由器重新分配了地址你精心保存的遥控页和脚本全部失效而你会先怀疑是接口坏了白白排查半天。5. 连不上的时候按这个顺序查防火墙、网段、绑定地址5.1 防火墙入站规则错得最集中的一环本机浏览器能打开、手机打不开第一个怀疑对象就是防火墙。Windows 首次运行 VLC 并开启接口时通常会弹一个网络访问授权窗很多人随手点了取消或者在弹出的选项里只勾了公用网络而家里通常是专用网络规则不匹配结果就是本机放行、外部被拦。手工加规则的路径控制面板进 Windows Defender 防火墙点高级设置选入站规则新建规则类型选端口协议 TCP本地端口填 8080动作选允许连接配置文件按实际网络勾家庭网络一般勾专用就够不必三个都勾起个能认出来的名字保存。也可以直接针对程序建规则指向 vlc.exe。嫌点来点去麻烦用管理员权限的 PowerShell 一条命令搞定New-NetFirewallRule -DisplayName VLC Web 8080 -Direction Inbound -Protocol TCP -LocalPort 8080 -Action Allow -Profile PrivateLinux 上如果是 firewalldfirewall-cmd --add-port8080/tcp --permanent firewall-cmd --reload如果是 ufw建议把范围收紧到局域网网段别对整个世界开放sudo ufw allow from 192.168.1.0/24 to any port 8080 proto tcp5.2 能 ping 通却连不上问题往往在网段和隔离防火墙排除之后第二个要确认的是两台设备是不是真的在同一个网段。看 IPv4 前三段192.168.1.20和192.168.0.30不在一个网段除非子网掩码是255.255.0.0否则它们之间只能靠路由器转发而这种转发经常是被路由器默认策略拦掉的。家庭网络里常见的组合是光猫自己发一个网段、路由器再发一个网段电脑接光猫、手机连路由器的 WiFi两边都在家里但互相看不见。还有一种更让人疑惑的情况互相 ping 都通、网页就是打不开。这时候要看 WiFi 的客户端隔离有的路由器上叫 AP 隔离。它打开后同一个 SSID 下的设备彼此不能通信但每台设备都能上网、都能访问网关所以现象是网络没问题就是访问不了对端。访客网络默认就带这个策略如果手机连的是访客 SSID换到主 SSID 再试一次基本就明白了。多网卡是第三类原因。一台机器同时有有线、无线、虚拟机网卡或容器网卡时VLC 可能把接口绑在了其中某一个地址上而恰好不是你正在用的那条链路。判断方法还是看监听地址netstat -ano | findstr 8080。如果显示0.0.0.0:8080说明所有接口都在监听这一项可以排除如果显示的是某个具体 IP而你访问的是另一个 IP那就对上了用--http-host0.0.0.0或者显式指定正确的那个地址重启即可。5.3 端口占用、版本差异和几个小概率陷阱端口被别的进程占用的情况前面提过特征是返回的内容根本不像 VLC 的界面。确认一下监听进程的 PID和 VLC 的 PID 对不上就换端口。换端口之后别忘了防火墙规则也要跟着改——这条很容易漏改完端口发现又连不上其实是规则还指着 8080。版本差异也值得留意。桌面端 3.0.x 上接口 → 主接口 → Web和接口 → 主接口 → Lua → Lua HTTP这条路径是稳定的新版本大版本里接口模块的组织方式有过调整勾选项名称可能不一样找不到对应项时先去帮助 → 关于确认版本号。一些较老的发行版或者特殊平台上Web 控制台的网页文件可能被单独打包源目录里是空的这时候页面会 404 但 JSON 接口照常工作用 curl 一测就能区分是接口没开还是网页文件缺失。剩下几个小陷阱碰到了会觉得很玄学但都是真的改完偏好设置没重启进程点关闭按钮只是最小化进程还活着配置没重新加载播放列表为空的时候点下一集确实什么都不会发生这是正常的密码留空的情况下不要再去带Authorization头不同版本对这种请求的处理不一样要么干脆设个密码要么就完全不带。排查的顺序建议固定下来本机 curl 通不通 → 监听地址对不对 → 局域网另一台设备 curl 通不通 → 手机浏览器能不能打开 → 页面能不能控制。每道关卡只回答一个是非题比盲改配置快得多。6. 进阶RC 接口、批量拉流与多设备同步播放6.1 RC 接口没有浏览器时的选择纯终端环境或者脚本里不想处理 JSONRC 接口更顺手。启动时加上--extraintfrc并指定监听地址和端口vlc --extraintfrc --rc-host0.0.0.0:4212 --intfdummy /data/movies/playlist.m3u然后在任意终端里telnet 192.168.1.20 4212没有 telnet 就用nc 192.168.1.20 4212连上之后敲help会列出全部命令。常用的有add、enqueue、play、pause、next、prev、stop、volume 0-512、seek 30、status、playlist。它有一个明确的短板命令用空格分隔参数路径里带空格的 MRL 处理起来很别扭要么把文件名里的空格去掉要么改用 HTTP 接口。所以我的实际用法是网页和手机走 HTTP纯粹的定时任务、开机自动播放、批量脚本走 RC两边各取所长。6.2 推流与拉流时的 TTL 和缓存参数VLC 的远程控制不只能指挥本地文件网络流同样可以。把一个已经存在的流地址交给它播放用--data-urlencode处理一下就行inputrtsp://192.168.1.30:8554/live或者多播地址inputudp://239.1.1.1:1234注意多播前面那个单播 UDP 不加。反过来VLC 自己也能往局域网里推一路流让多台设备同时拉vlc --intfdummy /data/movies/a.mkv \ --sout #duplicate{dstdisplay,dststd{accessudp,muxts,dst239.1.1.1:1234,ttl4}}这里的ttl4控制的是多播数据包能跨过几跳路由器。家里一台交换机直连的拓扑TTL 设 1 就够跨 VLAN、跨多台路由器再往上加但别闭着眼睛往大了写多播流量跑出你预期的范围会很难查。另外交换机上的 IGMP snooping 开关会影响多播的实际效果有的网络里推得出、拉不到问题就在这。延迟相关的参数是--network-caching单位毫秒。局域网有线环境可以压到 300 到 500 换更低的延迟看直播、看摄像头流的时候体感差别明显无线环境丢包多一些往上加到 1000 甚至 2000 换取更连贯的画面。这个参数要按场景调没有一劳永逸的值。6.3 多台设备同步播放与定时任务想在家里几台设备上同时放同一个片源思路很简单先用推流或者文件共享把片源变成各设备都能访问的地址然后写个脚本依次把播放入口发给每一台#!/usr/bin/env bash SRCfile:///Z:/movies/第一集.mkv for ip in 192.168.1.20 192.168.1.21 192.168.1.22; do curl -s -u :mysecret -G http://$ip:8080/requests/status.json \ --data-urlencode commandin_play \ --data-urlencode input$SRC /dev/null curl -s -u :mysecret http://$ip:8080/requests/status.json?commandseekval0 /dev/null done依次下发、再统一归零误差在几十毫秒的量级家里几个人各看一块屏幕够用了要做到帧级对齐那就得用专门的同步方案控制接口本身做不到。配合系统自带的定时机制还能做成到点自动开播。Linux 上写个 crontabWindows 上用任务计划程序调用一个.bat内容都一样curl 一条in_play加一个 m3u 地址。播放列表集中放在一个 m3u 文件里统一维护改了片单只改一处所有设备下次开播自动生效。手机上把控制页添加到主屏幕图标点开、进度条拖动、音量加减全在拇指范围之内——这一套搭完之后我在沙发上再也没为切集站起来过。