4G
整体视频流转播链路 & 各模块作用详解
结合你硬件环境、软件版本、实际操作流程,完整梳理链路、组件功能、配置逻辑,全程对应你实操场景:
硬件拓扑:HI3516 摄像机 → IMX6ULL 开发板 → 阿里云 Ubuntu 云服务器 (MediaMTX) → 本地 PC (VLC 播放器)
核心协议:RTSP + RTP + UDP + Docker + GStreamer
imx路由表:
- 访问摄像机(局域网网段路由),Destination改为192.168.1.0,这个网段的流量都走eth0.
route add -net 192.168.1.0 netmask 255.255.255.0 dev eth0
- 访问公网/阿里云(默认网段)10.104.25.1是4G网卡ip,是用来上外网的ip。此时Destination为
0.0.0.0,就是说默认流量都要走eth9.
route add default gw 10.104.25.1 dev eth9
一、完整数据流走向(从采集到播放)
HI3516(IPC) RTSP流(192.168.1.100:554/test)
↓
IMX6ULL开发板(GStreamer 拉流+转封包+UDP推流)
↓ UDP 5004端口 RTP-H264裸流
阿里云服务器(Docker+MediaMTX 接收RTP/转RTSP服务)
↓ RTSP 8554端口
本地PC(VLC 网络串流播放 rtsp://8.160.122.24:8554/cam)
二、逐环节拆解:设备、软件、命令、作用、问题复盘
环节 1:源头设备 ------ HI3516 高清摄像头
地址与服务内置 RTSP 服务,固定流地址:rtsp://192.168.1.100:554/test
作用:
负责视频采集、H.264 编码、RTSP 对外输出,是整个链路的视频源。
对应链路:提供原始 RTSP 视频流,供下游 IMX6ULL 拉取。
环节 2:中转设备 ------ IMX6ULL 嵌入式开发板(核心转发节点)
板子为百问网嵌入式 Linux,无 apt 包管理器、无法安装 gstreamer1.0-rtsp/rtspclientsink,因此放弃 RTSP 转发方案,改用 GStreamer + UDP+RTP 转发。
执行的最终可用 GStreamer 管道命令
gst-launch-1.0 \
rtspsrc location=rtsp://192.168.1.100:554/test latency=0 protocols=tcp ! \
rtph264depay ! h264parse ! \
rtph264pay config-interval=1 pt=96 ! \
udpsink host=8.160.122.24 port=5004 sync=false
详细的GStreamer开发教程_gstreamer教程-CSDN博客
逐个元件作用(按管道顺序):
rtspsrc
功能:GStreamer RTSP 拉流源插件
参数说明:
location:指定 HI3516 摄像头 RTSP 地址;
protocols=tcp:强制使用 TCP 传输 RTSP,避免嵌入式网络丢包;
latency=0:关闭缓冲,降低播放延迟。
作用:从 HI3516 拉取完整 RTSP 流,剥离 RTSP 信令,输出内部 RTP 视频包。
rtph264depay
功能:RTP 解封装
作用:把 RTSP 自带的 RTP 包头去掉,提取出原始 H.264 码流。
h264parse
功能:H.264 码流格式化、分片整理
作用:修复码流格式、补充帧头,保证后续重新封装 RTP 时格式合法。
rtph264pay
功能:RTP 重新封装
参数说明:
pt=96:RTP 负载类型 96,对应 H.264 视频(与后端 MediaMTX 的 SDP 配置严格匹配);
config-interval=1:每隔 1 帧输出 SPS/PPS 头部,保证播放器能正常解码。
作用:将裸 H.264 码流重新打包为 标准 RTP 数据包,为 UDP 传输做准备。
udpsink
功能:UDP 网络发送插件
参数说明:
host=8.160.122.24:阿里云服务器公网 IP;
port=5004:指定 UDP 目标端口;
sync=false:关闭音视频同步,纯视频流优化,防止卡顿。
作用:把封装好的 RTP 包通过 UDP 协议 推送到云服务器 5004 端口。
本环节踩坑复盘:
最初想用 rtspclientsink 直接推 RTSP → 报错 no element "rtspclientsink"
原因:嵌入式系统无包管理器,无法安装 RTSP 相关插件,方案作废。
改用 UDP+RTP 中转,规避插件依赖,适配嵌入式板子环境。
环节 3:云端服务 ------ 阿里云 Ubuntu 服务器 + Docker + MediaMTX
服务器角色:接收远端 UDP-RTP 流 → 转换为标准 RTSP 服务 → 对外提供播放流。
3.1 前置环境:Docker 部署
Docker = 一个超级轻量的 "独立小虚拟机 / 软件盒子"
你可以把它理解成:
- 一个密封的软件集装箱
- 里面自带运行环境、配置、依赖
- 和你的服务器系统完全隔离
- 点开就能跑,不会污染系统,不会冲突
- 复制到任何电脑都能一模一样运行
用一条命令拿到一个装好MediaMTX的盒子。
先修复系统异常:dpkg --configure -a(解决 apt 被中断问题)
安装 docker.io、配置国内镜像加速器(解决 Docker Hub 拉取超时)
核心作用:使用 Docker 容器隔离 MediaMTX 服务,简化部署、端口映射、配置挂载。
3.2 MediaMTX 流媒体服务(核心转协议组件)
MediaMTX 是轻量 RTSP 流媒体服务器,本次作用:
监听 UDP 5004 端口接收 RTP-H264 流 → 转成 RTSP 流在 8554 端口对外服务。
1)配置文件 mediamtx.yml 详解
yaml
logLevel: info
logDestinations: [stdout]
rtspAddress: :8554
paths:
cam:
source: udp+rtp://0.0.0.0:5004
rtpSDP: |
v=0
o=- 0 0 IN IP4 0.0.0.0
s=H264
c=IN IP4 0.0.0.0
t=0 0
m=video 5004 RTP/AVP 96
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1
rtspAddress: :8554:新版 MediaMTX 顶层配置,指定 RTSP 服务监听 8554 端口(旧版 rtsp:{port} 写法会解析报错)。
paths.cam:定义流路径 cam,对应播放地址后缀 /cam。
source: udp+rtp://0.0.0.0:5004:监听本机所有网卡的 UDP 5004 端口,接收 RTP 流。
rtpSDP:SDP 会话描述,告诉 MediaMTX 流格式:H.264、RTP 负载 96、采样率 90000,和开发板 rtph264pay 参数一一对应,是解码成功的关键。
2)容器启动命令 & 端口映射
docker run -d \
--name mediamtx \
--restart=always \
-p 8554:8554/tcp \
-p 5004:5004/udp \
-v /root/mediamtx.yml:/mediamtx.yml \
bluenviron/mediamtx:latest
-p 8554:8554/tcp:容器 RTSP 端口映射到宿主机 TCP 8554,供 VLC 拉流;
-p 5004:5004/udp:容器 UDP 端口映射到宿主机 UDP 5004,接收开发板推流;
-v:挂载本地配置文件到容器内,永久生效。
本环节踩坑复盘:
初始写 rtp://0.0.0.0:5004 → 报错 invalid source
原因:MediaMTX 不支持纯 rtp://,必须使用 udp+rtp://。
旧版写法 rtsp:{port:8554} → 报错 cannot unmarshal object into Go value of type bool
原因:v1.12+ 新版配置语法变更,必须使用顶层 rtspAddress。
安全组 / 防火墙:手动放行 TCP 8554、UDP 5004,保证公网 + 内网端口互通。
环节 4:播放端 ------ 本地 PC + VLC 播放器
播放地址
rtsp://8.160.122.24:8554/cam
作用
作为 RTSP 客户端,主动连接云服务器 MediaMTX 的 8554 端口;
接收 RTSP 流、解析 RTP 包、解码 H.264 视频,完成画面播放。
链路终点:整套采集 - 转发 - 转协议 - 播放流程闭环。
三、核心协议流转总表

四、整套方案设计思路(适配你硬件限制)
受限于 IMX6ULL 嵌入式系统无包管理器,放弃端到端 RTSP 直推;
采用 RTSP 拉流 → RTP 重封装 → UDP 透传 绕开插件缺失问题;
云端用 MediaMTX 做 UDP-RTP → RTSP 协议转换,对外提供标准公网 RTSP 服务;
Docker 简化服务部署与端口管理,配合阿里云安全组实现跨网远程视频监控。
Wifi
PC与IMX开发板同连一个热点,私域透传VLC进度条读秒,但是黑屏。WIFI传到云服务器再用PC端的VLC拉流就正常。检查了路由表,硬件连接正常,无线网卡正常向外传输。可能是以下原因。

gst-launch-1.0 \
rtspsrc location=rtsp://192.168.1.100:554/test latency=0 protocols=tcp ! \
rtph264depay ! h264parse ! \
rtph264pay config-interval=1 pt=96 ! \
udpsink host=8.160.122.24 port=5004 sync=false
与4G传输时同样的命令。