实战|用RK3568芯片搞RTMP推流,监控/直播一步到位! 电子说
做视频监控、小型直播,RTMP 推流是低延迟、易上手的实用方案。今天就以RK3568 芯片设备为核心,带大家从 0 到 1 实现 “推流→服务器转发→拉流观看” 全流程,实操性拉满,看完就能动手!

不用深钻技术细节,先明确关键工具的作用,流程就通了:
•RTMP 协议:实时传输音视频的“通信语言”,默认使用 1935 端口,负责推流端与服务器、服务器与拉流端的数据传递;
•Nginx 服务器:音视频“中转站”,接收推流端数据,再转发给拉流设备(如电脑);
•FFmpeg 工具:推流“动力源”,能读取本地视频或摄像头数据,封装成 RTMP 格式后传给 Nginx。
省心的是,RK3568 芯片设备的系统已预装 Nginx,且设备启动后会自动开启服务,省去手动搭建服务器的麻烦。
1.搭载 RK3568 芯片的设备(已刷入系统),相关软件没有的话需要安装;
2.USB 摄像头(注意:FFmpeg 暂不支持 MIPI 摄像头,实测验证过该兼容性问题);
3.电脑(需安装 VLC 播放器,用于拉流观看,可从设备配套资料的 “软件目录” 中获取安装包);
4.网络环境:RK3568 设备与电脑需连接同一局域网(如同一路由器)。
虽然系统会自动启动 Nginx,但先验证状态更稳妥:
1.给 RK3568 设备通电,进入 Linux 系统并打开终端;
2.输入命令nginx -V,若能显示 Nginx 版本(如 1.12.2)及交叉编译器信息(如 10.3.0),说明 Nginx 已成功安装;
3.输入ps -aux | grep nginx,若能看到“nginx: master process”“nginx: worker process” 等进程,证明 Nginx 正在运行;
4.查看设备 IP:输入 ifconfig,在“eth0” 或 “eth1” 字段下找到 “inet addr”(如示例中的 192.168.1.33);
5.电脑打开浏览器,输入设备 IP(如 192.168.1.33),若显示“Welcome to nginx!” 页面,说明服务器已就绪。
默认 Nginx 未开启 RTMP 功能,需修改配置文件:
1.终端输入命令vi /etc/nginx/nginx.conf,打开配置文件;
2.在文件末尾添加以下 RTMP 配置(直接复制,注意格式正确):
server {listen 1935; # 监听RTMP默认端口,若被占用可修改chunk_size 4096; # 视频块大小,4096字节适配多数场景application live { # 推流应用名,后续推流地址会用到live on; # 开启实时推流模式hls on; # 可选,开启HLS以兼容更多设备hls_path /tmp/hls; # 视频切片存放路径hls_fragment 5s; # 每个切片含5秒视频,降低延迟}}}
1.保存退出:按ESC 后输入:wq 回车;
2.重启 RK3568 设备(或输入 nginx -s reload 重启 Nginx),让配置生效。
FFmpeg 已预装在 RK3568 设备系统中,可直接用于推流,推荐测试两种常用场景:
若想快速确认推流链路是否通,用设备内的本地视频测试最方便:
1.终端输入推流命令(路径需对应设备内实际视频位置,示例路径参考):
ffmpeg -re -i /userdata/apps/src/media/movies/mytest_1080p.mp4 -c:av copy -f flv rtmp://127.0.0.1/live/mytest
•关键参数解读:
◦-re:按视频实际播放速率推流,避免数据发送过快;
◦-i:指定输入文件(本地视频路径);
◦-c:av copy:直接复制音视频编码,不重新编码,节省设备性能;
◦-f flv:输出格式设为 FLV(RTMP 协议常用格式);
◦rtmp://127.0.0.1/live/mytest:推流地址(127.0.0.1 指设备本机,“live” 对应 Nginx 配置的应用名,“mytest” 为自定义流名)。
1.若终端显示“frame=xxx fps=xx” 等实时信息,说明推流成功。
这是更实用的监控场景,用 USB 摄像头采集实时画面推流:
1.将 USB 摄像头插入 RK3568 设备的 USB 接口;
2.终端输入推流命令(注意摄像头设备节点可能不同,示例为 /dev/video9):
ffmpeg -f v4l2 -video_size 640x480 -framerate 30 -i /dev/video9 -q 10 -f flv rtmp://127.0.0.1/live/mytest
•关键参数解读:
◦-f v4l2:指定视频设备格式(Linux 系统下 USB 摄像头通用格式);
◦-video_size 640x480:设置画面分辨率(可根据需求调整为 1280x720 等);
◦-framerate 30:帧率设为 30 帧 / 秒,保证画面流畅;
◦-i /dev/video9:摄像头设备节点(不确定时,输入ls /dev/video*查看所有可用节点);
◦-q 10:画质参数(数值越小画质越好,10 为兼顾画质与性能的选择)。
1.终端有实时帧率输出,证明摄像头正实时推流。
推流成功后,用电脑上的 VLC 播放器拉流,即可看到视频或摄像头画面:
1.打开 VLC 播放器,点击顶部「媒体」→「打开网络串流」;
2.在「网络 URL」栏输入:rtmp://设备IP/live/mytest(如示例中的rtmp://192.168.1.33/live/mytest);
3.点击「播放」,稍等片刻即可显示画面—— 本地视频会正常播放,USB 摄像头则呈现实时监控画面。
小贴士:若出现卡顿或 5-6 秒延迟,属于正常现象,多因 FFmpeg 音视频处理、网络波动导致,后续可通过优化码率、帧率或编解码算法改善。
1.Nginx 配置后推流失败?
检查配置文件是否保存,且已重启 Nginx 或设备;用netstat -tuln | grep 1935确认 1935 端口未被占用。
2.USB 摄像头识别不到?
输入ls /dev/video*查看实际设备节点,将命令中的/dev/video9替换为实际节点(如/dev/video0)。
3.延迟过高?
尝试降低分辨率(如 640x480 改为 320x240)、降低帧率(30 帧→20 帧),或在 FFmpeg 命令中添加-preset ultrafast(快速编码,以轻微画质损耗换低延迟)。
本次用 RK3568 芯片设备,完整走通了 “Nginx 配置→FFmpeg 推流→VLC 拉流” 的 RTMP 推流流程,无论是小型监控还是简单直播,都能满足基础需求。动手试试吧!实战是掌握技术的最快方式,有问题欢迎在评论区交流~
全部0条评论
快来发表一下你的评论吧 !