RK3588 + Docker + GStreamer 实现 RTSP 推流(MJPEG AVI → H.264),VLC 成功拉流

【实战踩坑全记录】RK3588 + Docker + GStreamer 实现 RTSP 推流(MJPEG AVI → H.264),VLC 成功拉流

关键词:RK3588、Docker、GStreamer、RTSP、VLC、MJPEG、x264、gst-rtsp-server

适用人群:嵌入式 / AI 板卡 / 音视频 / 视觉工程师

一句话总结:

👉 在 RK3588 板子 Docker 容器内,把一个 MJPEG 编码的 AVI 视频文件,稳定推成 RTSP 流,并在 笔记本 VLC 一条 URL 成功拉流播放。

一、背景与目标

在实际工程中,我们经常遇到如下需求:

板子(RK3588)端已有算法输出视频文件(AVI / MP4)

希望 通过 RTSP 推流 给上位机 / VLC / NVR / 控制台查看

程序运行在 Docker 容器 中

希望做到:

一条 RTSP URL,VLC 直接打开即可播放

本篇文章完整记录了 从 0 到 1 的全过程,包括:

Docker 网络与目录挂载

GStreamer 工具缺失的真实踩坑

MJPEG 视频格式误判

RTSP Server 工具缺失

最终 手写 RTSP Server 程序 的工程解法

二、实验环境说明

1️⃣ 硬件 / 网络

RK3588 开发板

板子 IP:192.168.150.1

笔记本 IP:192.168.150.78

二者在同一网段

2️⃣ 软件环境

Ubuntu 22.04(jammy,arm64)

Docker(host 网络模式)

GStreamer 1.20.x

VLC(笔记本端)

3️⃣ 输入视频

/root/zht_docker/result_yolov8123.avi

三、Docker 启动方式(非常关键)

强烈建议新手直接使用 host 网络模式

docker run -it --rm

--name rk3588_rtsp

--net=host

-v /root/zht_docker:/root/zht_docker

-w /root/zht_docker

your_image:latest

bash

为什么必须 --net=host?

RTSP 走 TCP(默认 8554 / 554)

避免 Docker 端口映射、iptables、NAT 等复杂问题

先把链路跑通,再谈安全与隔离

四、第一个坑:gst-discoverer-1.0 命令不存在

现象

gst-discoverer-1.0 result_yolov8123.avi

报错:

command not found

错误直觉(90% 新手会踩)

以为装了:

gstreamer1.0-tools

就一定有 gst-discoverer-1.0。

错。

正确排查方式(工程级)

apt-file update

apt-file search -x '/gst-discoverer-1.0$'

输出:

gstreamer1.0-plugins-base-apps

正确安装

apt install -y gstreamer1.0-plugins-base-apps

五、关键一步:确认视频真实编码格式

gst-discoverer-1.0 result_yolov8123.avi

核心输出:

Container: AVI

Video: JPEG

Resolution: 960x544

Framerate: 30 fps

⚠️ 重要结论

这是 MJPEG(Motion-JPEG)视频,不是 H.264 / H.265

这一步如果不做,后面推流必失败。

六、第二个大坑:RTSP Server 工具不存在

常见误区

apt install gstreamer1.0-rtsp

which test-launch

结果:没有 test-launch

原因分析(很重要)

gstreamer1.0-rtsp ≠ RTSP Server 程序

在 Ubuntu 22.04 + arm64 下:

示例程序 test-launch 不一定以二进制形式提供

工程上最稳解法:自己写 RTSP Server

七、终极解法:手写一个最小 RTSP Server(推荐)

1️⃣ 安装开发依赖

apt install -y

build-essential

pkg-config

libgstrtspserver-1.0-dev

确认头文件存在:

ls /usr/include/gstreamer-1.0/gst/rtsp-server/rtsp-server.h

2️⃣ 编写 RTSP Server 程序

创建文件 my_rtsp_server.c:

#include <gst/gst.h>

#include <gst/rtsp-server/rtsp-server.h>

int main(int argc, char *argv[]) {

gst_init(&argc, &argv);

复制代码
const gchar *pipeline =
    "( filesrc location=/root/zht_docker/result_yolov8123.avi "
    "! avidemux "
    "! jpegdec "
    "! videoconvert "
    "! x264enc tune=zerolatency speed-preset=veryfast bitrate=4000 key-int-max=30 "
    "! rtph264pay name=pay0 pt=96 config-interval=1 )";

GstRTSPServer *server = gst_rtsp_server_new();
gst_rtsp_server_set_service(server, "8554");

GstRTSPMountPoints *mounts = gst_rtsp_server_get_mount_points(server);
GstRTSPMediaFactory *factory = gst_rtsp_media_factory_new();
gst_rtsp_media_factory_set_launch(factory, pipeline);
gst_rtsp_media_factory_set_shared(factory, TRUE);

gst_rtsp_mount_points_add_factory(mounts, "/test", factory);
g_object_unref(mounts);

gst_rtsp_server_attach(server, NULL);

g_print("RTSP stream ready at rtsp://0.0.0.0:8554/test\n");
GMainLoop *loop = g_main_loop_new(NULL, FALSE);
g_main_loop_run(loop);

}

3️⃣ 编译

gcc my_rtsp_server.c -o my_rtsp_server

$(pkg-config --cflags --libs gstreamer-1.0 gstreamer-rtsp-server-1.0)

4️⃣ 启动推流(板子端)

./my_rtsp_server

输出:

RTSP stream ready at rtsp://0.0.0.0:8554/test

八、笔记本 VLC 拉流(最终验证)

在 VLC 中:

媒体 → 打开网络串流

输入:

rtsp://192.168.150.1:8554/test

🎉 画面成功显示

九、完整踩坑总结(强烈建议收藏)

✅ 技术经验沉淀

不要猜包名,用 apt-file search

先确认视频真实编码,再设计 pipeline

MJPEG ≠ H.264,必须解码再编码

RTSP 示例工具不可靠,自己写 Server 最稳

host 网络模式是新手成功率最高的方案

十、后续可优化方向(进阶)

使用 RK3588 MPP 硬编码 替换 x264enc

降低 RTSP 延迟(<200ms)

Docker 启动即推流(entrypoint)

文件源 → 摄像头 → appsrc → 实时推流

相关推荐
非凡ghost34 分钟前
可拓浏览器:给手机浏览器装上“外挂“!2W+拓展+AI搜索,玩出无限可能!
windows·智能手机·音视频·firefox
美狐美颜SDK开放平台2 小时前
多场景美颜SDK解决方案:直播APP(iOS/安卓)开发接入详解
android·人工智能·ios·音视频·美颜sdk·第三方美颜sdk·短视频美颜sdk
木雷坞4 小时前
视觉算法环境 Docker 镜像拉取失败排查
运维·人工智能·docker·容器
ai产品老杨4 小时前
深度解析:基于国产化异构计算的 AI 视频管理平台架构——从 GB28181 接入到 NPU 边缘推流的解耦实践
人工智能·架构·音视频
watson_pillow4 小时前
音视频相关基础知识储备入门-字幕
音视频
瀚高PG实验室4 小时前
安全版V4.5版本docker容器license过期问题处理步骤
安全·docker·容器·瀚高数据库
java_logo5 小时前
SiYuan 思源笔记 Docker 部署终极指南:Windows+Linux 双平台
windows·笔记·docker·思源笔记·思源笔记部署·docker部署思源笔记·思源笔记文档
Hello.Reader5 小时前
Ubuntu 上正确安装 Kali 虚拟机、Docker 与 kail 工具指南
linux·ubuntu·docker
程序员JerrySUN5 小时前
Jetson边缘嵌入式实战课程第二讲:JetPack 和 SDK Manager 是什么
c语言·开发语言·网络·udp·音视频
筱_智6 小时前
Docker学习-超详细-通俗易懂(从入门到精通)
学习·docker·容器