构建个人高保真远程音频流媒体系统
1. 核心目标
在任意网络环境下(无公网IP),实现从手机到远程播放设备的 CD级音质、超低延迟、稳定不卡顿 的实时音频流传输。
2. 技术栈亮点
音质:Opus编码,支持高达510kbps VBR(可变比特率),听感接近无损。
传输:SRT协议,专为不稳定网络设计,抗丢包能力强。
网络:ZeroTier,Tailscale,域名虚拟局域网,彻底解决公网IP和端口转发难题。
网关:Docker,虚拟机容器化部署,隔离环境,便于维护。
推流:使用专业软件(如OBS或BUTT)提供高质量音源。
3. 最终效果
手机推流 → 通过ZeroTier-Tailscale虚拟网络直连 → OpenWRT软路由上的Docker网关 → 同样在ZeroTier网络内的电脑/播放器收听,全程延迟可控制在1秒内,音质无损。
第一部分:环境与设备准备
设备角色要求1. 中心节点:OpenWRT软路由运行Docker音频网关建议x86架构,性能足够。已安装Docker和Docker Compose。2. 发射端:智能手机运行OBS或BUTT软件推流支持连接外部USB声卡或蓝牙音频接收器为佳。3. 接收端:播放设备运行VLC、Daphile等播放器电脑、树莓派或专用音频播放器。4. 网络基础:ZeroTier构建虚拟局域网所有设备需安装ZeroTier客户端并加入同一网络。
关键准备:在 ZeroTier官网 注册账号,创建一个虚拟网络,记下16位的Network ID。
🛠️ 第二部分:逐步部署指南
步骤一:在所有设备上安装并加入ZeroTier
OpenWRT (iStoreOS):
bash
# 通过OPKG安装 opkg update opkg install zerotier # 启动服务并加入你的网络(将替换为你的ID) zerotier-cli join登录ZeroTier中央管理页面,勾选新加入的设备授权。
手机与播放电脑:从各自应用商店下载ZeroTier客户端,安装后同样加入同一网络并授权。
获取IP:在每台设备的ZeroTier客户端或OpenWRT中执行
zerotier-cli listnetworks,记下分配的虚拟IP(如192.168.196.xx)。
步骤二:在OpenWRT上部署Docker音频网关
创建并运行容器:此容器将RTMP流转为SRT流。
bash
docker run -d --name srt-gateway --restart unless-stopped --network=host jrottenberg/ffmpeg -listen 1 -i rtmp://0.0.0.0:1935/live/stream -c copy -f mpegts 'srt://:10080?mode=listener&pkt_size=1316&latency=2000000'验证服务:
bash
# 查看容器状态 docker ps | grep srt-gateway # 查看实时日志 docker logs --tail 10 -f srt-gateway
步骤三:配置发射端(OBS为例)
打开OBS,进入 设置 > 推流。
服务选择 “自定义”。
服务器填写:
rtmp://:1935/live例如:
rtmp://192.168.196.100:1935/live
串流密钥填写:
stream。在OBS中设置好音频源(如麦克风或桌面音频)。
步骤四:配置接收端(以VLC为例)
打开VLC,点击 媒体 > 打开网络串流。
输入地址:
srt://:10080?mode=caller例如:
srt://192.168.196.100:10080?mode=caller
点击播放,等待数秒连接建立。
⚠️ 第三部分:核心配置与排错指南
1. 防火墙配置(OpenWRT)
如果设备间能Ping通但无法推流/播放,可能是OpenWRT防火墙阻止了。临时关闭测试:
bash
/etc/init.d/firewall stop
长期方案:在OpenWRT的Web界面(网络->防火墙->通信规则),为WAN区域添加规则,允许端口 1935(TCP) 和 10080(UDP) 的入站流量。
2. 音质调优(BUTT/OBS设置)
在BUTT或OBS的音频编码设置中,手动指定:
编码器:Opus
比特率:256kbps 或 510kbps (VBR)
采样率:48kHz
这是高音质的关键。
3. 常见故障排查表
现象可能原因排查命令与解决方案OBS推流失败1. IP或端口错误
2. 容器未运行1. 核对OpenWRT的ZeroTier IP。
2. 运行 docker start srt-gateway。VLC连接但无声音1. SRT端口未通
2. 未收到推流1. 检查防火墙UDP 10080。
2. 查看容器日志 docker logs srt-gateway 确认RTMP连接。声音卡顿1. 无线网络波动
2. 比特率过高1. 尽量使用有线网络连接关键设备。
2. 尝试降低比特率到192kbps测试。ZeroTier设备不通1. 未在官网授权
2. 网络冲突1. 登录ZeroTier中央面板勾选设备。
2. 确保各设备IP不同。
💡 第四部分:高级应用与扩展思路
固定IP与域名:在ZeroTier管理页面可以为设备分配固定的IP,便于配置。
多房间/多路流:复制并修改Docker命令,创建多个容器,监听不同端口(如1936, 1937),即可实现同时推送多个独立的音频流。
融入智能家居:将播放端设备替换为支持AirPlay或DLNA的接收器(如树莓派安装Raspotify),即可将高品质音频推送至家庭音响系统。
安全加固:在ZeroTier网络中启用私有证书,或配置防火墙仅允许特定ZeroTier IP访问服务端口。
🎉 总结
通过本教程,你成功搭建了一个去中心化、不依赖公网IP与商业服务器、完全掌控在自己手中的高保真音频直播系统。它不仅是技术上的胜利,更为远程音乐协作、私人电台、高品质播客分发等场景提供了坚实的技术基础。
这套系统的价值在于其 “乐高式”的模块化设计:
如需更高音质,可提升Opus码率或尝试FLAC。
如需更低延迟,可调整SRT的
latency参数。如需公网访问,可将ZeroTier替换为FRP穿透。
-
