实战|用RK3568芯片搞RTMP推流,监控/直播一步到位!

电子说

1.4w人已加入

描述

 

 

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

服务器

先理清 3 个核心组件,原理不复杂

 

不用深钻技术细节,先明确关键工具的作用,流程就通了:

 

 

RTMP 协议:实时传输音视频的通信语言,默认使用 1935 端口,负责推流端与服务器、服务器与拉流端的数据传递;

 

 

Nginx 服务器:音视频中转站,接收推流端数据,再转发给拉流设备(如电脑);

 

 

FFmpeg 工具:推流动力源,能读取本地视频或摄像头数据,封装成 RTMP 格式后传给 Nginx

 

 

省心的是,RK3568 芯片设备的系统已预装 Nginx,且设备启动后会自动开启服务,省去手动搭建服务器的麻烦。

 

 

实战准备:这些东西要备齐

 

1.搭载 RK3568 芯片的设备(已刷入系统),相关软件没有的话需要安装;

 

 

2.USB 摄像头(注意:FFmpeg 暂不支持 MIPI 摄像头,实测验证过该兼容性问题);

 

 

3.电脑(需安装 VLC 播放器,用于拉流观看,可从设备配套资料的 软件目录” 中获取安装包);

 

 

4.网络环境:RK3568 设备与电脑需连接同一局域网(如同一路由器)。

 

 

Step by Step 实操:跟着做就能成

 

3.1 第一步:确认 Nginx 服务器正常运行

 

虽然系统会自动启动 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!” 页面,说明服务器已就绪。

 

 

3.2 第二步:配置 Nginx 支持 RTMP 推流

 

默认 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),让配置生效。

 

 

3.3 第三步:用 FFmpeg 推流,两种场景实测

 

FFmpeg 已预装在 RK3568 设备系统中,可直接用于推流,推荐测试两种常用场景:

 

 

场景 1:推本地视频文件(验证流程)

 

若想快速确认推流链路是否通,用设备内的本地视频测试最方便:

 

 

1.终端输入推流命令(路径需对应设备内实际视频位置,示例路径参考):

 

 

  •  
ffmpeg -re -/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:输出格式设为 FLVRTMP 协议常用格式);

 

 

rtmp://127.0.0.1/live/mytest:推流地址(127.0.0.1 指设备本机,“live” 对应 Nginx 配置的应用名,“mytest” 为自定义流名)。

 

 

1.若终端显示“frame=xxx fps=xx” 等实时信息,说明推流成功。

 

 

场景 2:推 USB 摄像头实时画面(视频监控)

 

这是更实用的监控场景,用 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.终端有实时帧率输出,证明摄像头正实时推流。

 

 

3.4 第四步:用 VLC 拉流,查看效果

 

推流成功后,用电脑上的 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 推流流程,无论是小型监控还是简单直播,都能满足基础需求动手试试吧!实战是掌握技术的最快方式,有问题欢迎在评论区交流~


打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分