外网无法访问通常不是 MediaMTX 本身问题,而是 网络、端口或系统防护层面阻挡导致的。
下面给出一份最系统的排查指南👇(逐步执行即可定位问题)
🧩 一、确认 MediaMTX 是否真的运行
执行:
bash
ps -ef | grep mediamtx
✅ 如果看到:
/usr/local/mediamtx/mediamtx
说明程序在运行。
如果没有,启动:
bash
./mediamtx &
🧩 二、确认监听端口
执行:
bash
ss -tulnp | grep mediamtx
或:
bash
netstat -tulnp | grep mediamtx
查看是否有这些端口(MediaMTX 默认):
功能 | 协议 | 默认端口 |
---|---|---|
RTSP | TCP | 8554 |
RTMP | TCP | 1935 |
HLS | TCP (HTTP) | 8888 |
WebRTC | UDP/TCP | 8000-8200(范围) |
✅ 如果端口没监听,检查配置文件 mediamtx.yml
是否启用对应模块。
🧩 三、防火墙(Firewall)是否阻止外网访问
查看防火墙状态:
bash
systemctl status firewalld
临时关闭防火墙(测试用):
bash
systemctl stop firewalld
🔹 若关闭防火墙后可访问,则是端口未放行。
🔹 你可以选择仅开放 MediaMTX 所需端口。
例如开放:
bash
firewall-cmd --zone=public --add-port=8554/tcp --permanent
firewall-cmd --zone=public --add-port=1935/tcp --permanent
firewall-cmd --zone=public --add-port=8888/tcp --permanent
firewall-cmd --zone=public --add-port=8000-8200/udp --permanent
firewall-cmd --reload
🧩 四、检查服务器是否有公网 IP
执行:
bash
curl ifconfig.me
如果输出公网 IP,例如:
8.218.xxx.xxx
说明服务器有公网。
如果显示内网 IP(如 192.168.x.x 或 10.x.x.x),则外网无法直连。
✅ 若是云服务器(如阿里云、腾讯云),需检查"安全组"规则是否放行端口。
🧩 五、确认外网访问方式
假设你的公网 IP 是 8.218.100.10
:
功能 | 外网访问地址 |
---|---|
RTSP | rtsp://8.218.100.10:8554/stream1 |
RTMP | rtmp://8.218.100.10:1935/stream1 |
HLS | http://8.218.100.10:8888/stream1/index.m3u8 |
WebRTC | 浏览器访问 http://8.218.100.10:8889 (若启用 Web UI) |
🧩 六、NAT 或虚拟机环境
如果你在 虚拟机 或 NAT 网络 下运行 Linux:
外网访问不到通常是因为端口没映射。
示例(VirtualBox 或 VMware):
-
需要将 宿主机端口映射到虚拟机端口 。
例如:
宿主机 8554 → 虚拟机 8554 宿主机 8888 → 虚拟机 8888
✅ 快速定位脚本
你可以执行下面命令,一键测试服务可访问性:
bash
echo "=== MediaMTX 状态检查 ==="
ps -ef | grep mediamtx
ss -tulnp | grep mediamtx
curl -I http://127.0.0.1:8888
firewall-cmd --list-all
curl ifconfig.me