imx6ull 开发板 推流ov5640数据,虚拟机用 ffplay 拉流播放
2026/6/4 22:09:58 网站建设 项目流程

Nginx 服务器:它是一个功能强大的Web 服务器。就像一个“万能的瑞士军刀”,它不仅能提供静态网页,还能通过加载“模块”来扩展功能,比如加载一个 rtmp 模块,它就摇身一变,成了一个流媒体服务器。

RTMP(Real-Time Messaging Protocol):它是一种实时消息传输协议。它专门为低延迟、实时性的音视频流设计。它规定了数据应该如何打包、如何传输、如何建立连接。

imx6ull 开发板上,用FFmpeg推流:

  • 命令行一行搞定,不用写代码
  • 支持 V4L2 直接读摄像头
  • 支持 RTMP 推流
  • 参数丰富,后面可以调码率、分辨率、帧率

安装清单:

1. Ubuntu 虚拟机 安装 nginx 和 rtmp 模块 , 安装 ffmpeg 。

2. 开发板安装 ffmpeg,

第一步:虚拟机安装 nginx 和 rtmp 模块:

sudo apt update

sudo apt install nginx libnginx-mod-rtmp

安装后,修改 nginx 配置,sudo vim /etc/nginx/nginx.conf

文件的最末尾(最后一个大括号 } 的外面),添加以下 RTMP 配置:

rtmp { server { listen 1935; application live { live on; record off; } } }

改完后,保存退出,

重启 nginx 服务使配置生效:

sudo systemctl restart nginx

然后,Ubuntu 虚拟机 安装 ffmpeg :

sudo apt update
sudo apt install ffmpeg

验证安装:ffmpeg -version

第二步:确保开发板上有 ffmpeg

在开发板上输入 ffmpeg -version 看看有没有,

没有的话,上一篇博客,有 ffmpeg 安装教程。安装的 ffmpeg 本版不要太低,功能不全,有些参数不支持设置。

确保开发板能 ping 通 Ubuntu 虚拟机的 IP

第三步:推流拉流 测试

imx6ull 开发板, 执行推流命令(320x240 ,15fps):

ffmpeg -f v4l2 -video_size 320x240 -framerate 15 -i /dev/video1 -q 10 -f flv rtmp://192.168.137.199:1935/live/test

参数 framerate:帧率 。

虚拟机用ffplay播放,拉流命令:

ffplay rtmp://192.168.137.199:1935/live/test

ffplay 播放摄像头画面 ,延迟6秒,此时,关闭开发板推流,再重新推流,反复几次,ffplay画面 延迟会小于1秒.

观察到的这个现象,精准地击中了直播流媒体技术中最核心的痛点:缓冲与同步机制。

RTMP 协议本身没有“绝对时间”的概念,它只负责把数据包按顺序发出去。延迟是“攒”出来的。

要实现真正的低延迟,必须两头一起掐:让推流端不攒数据,让拉流端丢弃旧数据。

第一步:在虚拟机终端,输入优化后的 ffplay 拉流命令

ffplay -fflags nobuffer -flags low_delay -framedrop rtmp://192.168.137.199:1935/live/test
  • -fflags nobuffer:禁用 ffplay 的输入缓冲区,收到数据立刻解码显示,不“攒”。
  • -flags low_delay:告诉解码器牺牲一切换取低延迟。
  • -framedrop:如果解码来不及,允许丢帧追赶进度,绝不播放旧画面。

第二步:优化推流端(ffmpeg), 缩短关键帧间隔

测试 320x240 ,15fps, 码率200K .

推流拉流优化后,画面延迟非常低,不到1秒, imx6ull cpu 占用率 60%

推流命令:

(如果画面需要水平翻转: -pix_fmt yuv420p 改为 -vf "hflip,format=yuv420p" )

(如果画面需要上下翻转: -pix_fmt yuv420p 改为 -vf "vflip,hflip,format=yuv420p" )

ffmpeg -f v4l2 \ -framerate 15 \ -video_size 320x240 \ -i /dev/video1 \ -c:v libx264 \ -pix_fmt yuv420p \ -profile:v baseline \ -preset ultrafast \ -tune zerolatency \ -g 15 \ -keyint_min 15 \ -b:v 200k \ -f flv rtmp://192.168.137.199:1935/live/tes

接下来,测试其他的分辨率看看,修改推流命令,拉流不变:

测试 320x240 ,提高到 30fps, 码率 200k。

画面延迟 1秒, cpu 占用率 99%

ffmpeg -f v4l2 \ -framerate 30 \ -video_size 320x240 \ -i /dev/video1 \ -c:v libx264 \ -pix_fmt yuv420p \ -profile:v baseline \ -preset ultrafast \ -tune zerolatency \ -g 15 \ -keyint_min 15 \ -b:v 200k \ -f flv rtmp://192.168.137.199:1935/live/test

测试 480x272 ,15fps, ,码率提升到 350k。

画面延迟 小于1秒, imx6ull cpu 占用率 93%

推流命令:

ffmpeg -f v4l2 \ -framerate 15 \ -video_size 480x272 \ -i /dev/video1 \ -c:v libx264 \ -pix_fmt yuv420p \ -profile:v baseline \ -preset ultrafast \ -tune zerolatency \ -g 15 \ -keyint_min 15 \ -b:v 350k \ -f flv rtmp://192.168.137.199:1935/live/test

测试 480x272 ,30fps, ,码率 350k。

画面延迟 2秒, cpu 占用率是 99%

推流命令:

ffmpeg -f v4l2 \ -framerate 30 \ -video_size 480x272 \ -i /dev/video1 \ -c:v libx264 \ -pix_fmt yuv420p \ -profile:v baseline \ -preset ultrafast \ -tune zerolatency \ -g 15 \ -keyint_min 15 \ -b:v 350k \ -f flv rtmp://192.168.137.199:1935/live/test

测试 640x480 ,15fps, 像素数比 320x240 多 4 倍,码率提升到 600k。

画面延迟 5秒, cpu 占用率 99%

推流命令:

ffmpeg -f v4l2 \ -framerate 15 \ -video_size 640x480 \ -i /dev/video1 \ -c:v libx264 \ -pix_fmt yuv420p \ -profile:v baseline \ -preset ultrafast \ -tune zerolatency \ -g 15 \ -keyint_min 15 \ -b:v 600k \ -f flv rtmp://192.168.137.199:1935/live/test

测试 800x480 ,15fps,码率提升到 800k。

画面延迟 5秒, cpu 占用率是 99%

推流命令:

ffmpeg -f v4l2 \ -framerate 15 \ -video_size 800x480 \ -i /dev/video1 \ -c:v libx264 \ -pix_fmt yuv420p \ -profile:v baseline \ -preset ultrafast \ -tune zerolatency \ -g 15 \ -keyint_min 15 \ -b:v 800k \ -f flv rtmp://192.168.137.199:1935/live/test

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询