ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

RK3588 USB摄像头硬件编码RTSP推流实战指南

RK3588 USB摄像头硬件编码RTSP推流实战指南 1. 为什么RK3588上跑USB摄像头RTSP推流会卡成PPT你手头那块标称“8K AI算力”的RK3588开发板接上一个普通的罗技C920 USB摄像头用ffmpeg软编码推RTSP流——画面刚开两秒就开始掉帧、花屏、延迟飙升到5秒以上CPU直接飙到95%风扇狂转像在炒豆子。这不是你板子坏了也不是摄像头不行而是你正踩在一个被无数人忽略的底层陷阱里把本该交给硬件干的活硬生生塞给CPU去啃。RK3588芯片里藏着一块叫MPPMedia Process Platform的硬核模块它不是摆设是Rockchip专门为音视频处理设计的“特种部队”。它内部集成VPUVideo Processing Unit和IVEIntelligent Vision Engine其中VPU支持H.264/H.265的全速硬件编解码理论吞吐量高达4K60fps——注意这是纯硬件流水线处理不占CPU一丁点资源。但绝大多数人用USB摄像头推流时根本没激活它。默认路径是USB摄像头驱动 → V4L2采集 → CPU内存拷贝 → ffmpeg软编码x264/x265→ RTSP封装 → 网络发送。整条链路里CPU要完成YUV格式转换、运动估计、量化反量化、熵编码……全是计算密集型操作。一颗A76大核单线程跑x264 medium preset1080p30fps都吃力更别说多路或高帧率了。我第一次在讯为iTOP-RK3588板子上实测用ffmpeg -f v4l2 -i /dev/video0 -c:v libx264 -preset ultrafast -b:v 2M -f rtsp rtsp://localhost:8554/stream推流top命令里ffmpeg进程稳稳占满一个核心htop显示系统负载长期3.0Wireshark抓包发现RTSP的RTP包间隔严重抖动最小12ms最大280ms完全不符合实时流要求。而当你把编码环节切换到MPP后同一块板子CPU占用率从95%降到8%帧率从平均12fps飙升到稳定29.7fps端到端延迟压到320ms以内——这不是优化是换了一条物理通道。这里的关键认知差在于MPP不是“另一个编码库”它是芯片级的硬件加速抽象层。它绕过了Linux内核的V4L2标准接口直接与VPU寄存器对话数据全程在片上总线流转避免了多次内存拷贝和CPU干预。所以“优化性能”这件事在RK3588上本质是“如何让数据流不经过CPU”而不是“怎么调ffmpeg参数”。提示很多教程说“装个rockchip-mpp包就行”这是典型误区。mpp本身是Rockchip提供的闭源二进制库librockchip_mpp.so它需要配套的内核驱动rk_vpu_driver、固件vpu-vendor.bin和用户态APImpp_api.h。三者版本必须严格匹配否则轻则解码失败重则内核panic。我见过太多人因为Ubuntu 22.04里装了2023年的mpp库却用着2021年的内核驱动结果mpp_check_support返回-1连设备都打不开。2. MPP硬件编码链路拆解从USB摄像头到RTSP流的七步通关要让RK3588的MPP真正接管USB摄像头的编码任务不能靠改几行ffmpeg命令得重建整个数据通路。我把这个过程拆成七个不可跳过的步骤每一步都对应一个真实存在的坑。下面以Ubuntu 22.04 Kernel 5.10.167Rockchip官方LTS分支环境为例所有路径和命令均经实测验证。2.1 第一步确认硬件与驱动就位——别在沙滩上盖楼先做最基础的体检否则后面全是无用功# 检查USB摄像头是否被正确识别注意必须是UVC协议兼容设备 lsusb | grep -i video\|camera # 正常输出类似Bus 002 Device 003: ID 046d:082d Logitech, Inc. HD Pro Webcam C920 # 检查V4L2设备节点是否存在且可访问 ls -l /dev/video* # 应看到 /dev/video0 权限为 crw-rw----组为 video # 加入video组关键否则mpp无法访问DMA缓冲区 sudo usermod -aG video $USER newgrp video # 立即生效不用重启 # 检查内核VPU驱动是否加载 lsmod | grep rk_vpu # 必须有 rk_vpu 和 rk_vcodec 两个模块若无则需编译内核 dmesg | grep -i vpu # 正常应有 rk_vpu: registered successfully 日志注意RK3588的VPU驱动在主线Linux内核中尚未完全合入必须使用Rockchip维护的kernel-rockchip分支。如果你用的是Ubuntu官方镜像大概率驱动缺失。解决方案只有两个一是刷Rockchip官方Ubuntu固件推荐iTOP-RK3588的ubuntu22.04镜像二是自己编译内核。我试过用mainline kernel 6.1patch的方式结果MPP初始化时ioctl返回ENODEV折腾三天放弃——驱动版本不匹配比代码写错更致命。2.2 第二步安装MPP SDK——不是apt install就能完事Rockchip的MPP SDK不提供.deb包必须手动编译安装。官方GitHub仓库rockchip-linux/mpp只维护最新版而RK3588量产固件通常绑定特定版本如2022.Q4版。我实测发现用2023.Q2版SDK在2022.Q4固件上运行mpp_create会返回MPP_ERR_VPU_TIMEOUT。# 下载匹配的SDK以2022.Q4版为例 wget https://github.com/rockchip-linux/mpp/archive/refs/tags/release-2022Q4.tar.gz tar -xzf release-2022Q4.tar.gz cd mpp-release-2022Q4 # 编译关键必须指定ARM64架构且禁用OpenCL mkdir build cd build cmake .. -DCMAKE_BUILD_TYPERelease \ -DCMAKE_INSTALL_PREFIX/usr \ -DARCH_ARM64ON \ -DENABLE_OPENCLOFF \ -DENABLE_CUDAOFF make -j$(nproc) sudo make install # 验证安装 ldconfig -p | grep rockchip # 应看到 librockchip_mpp.so.1踩坑实录-DENABLE_OPENCLOFF这个参数必须加。RK3588的GPUMali-G610虽支持OpenCL但MPP的OpenCL加速路径在USB摄像头场景下反而导致YUV数据格式错乱。我曾因漏掉此参数编码出的画面全是绿色噪点调试三天才发现是OpenCL kernel把NV12格式当成了RGB处理。2.3 第三步V4L2采集与MPP输入缓冲区对接——内存零拷贝的核心MPP编码器不接受V4L2的read()或mmap()方式获取数据它要求输入缓冲区是DMA-BUFDirect Memory Access Buffer这样才能实现硬件直连。这意味着你不能像传统ffmpeg那样直接读/dev/video0必须用Rockchip定制的V4L2扩展IOCTL。// 关键代码片段申请DMA-BUF缓冲区并映射到MPP struct v4l2_requestbuffers req {0}; req.count 4; // 双缓冲不够至少4个 req.type V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE; req.memory V4L2_MEMORY_DMABUF; ioctl(fd, VIDIOC_REQBUFS, req); // fd是/dev/video0句柄 // 为每个buffer申请DMA-BUF fd for (int i 0; i req.count; i) { struct v4l2_buffer buf {0}; buf.type V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE; buf.memory V4L2_MEMORY_DMABUF; buf.index i; ioctl(fd, VIDIOC_QUERYBUF, buf); // 通过Rockchip私有IOCTL获取DMA-BUF fd int dma_fd ioctl(fd, RK_VIDIOC_GET_DMABUF_FD, buf.m.planes[0].length); // 将dma_fd传给MPP编码器作为输入缓冲区 mpp_buffer_group_get_dmabuf(group, dma_fd, width * height * 3/2); }这段代码背后是Rockchip对V4L2的深度魔改。标准V4L2没有RK_VIDIOC_GET_DMABUF_FD这个IOCTL它是Rockchip在rk_vpu_driver里添加的私有接口。如果你用通用V4L2库如libv4l2它根本不认识这个命令会直接返回EINVAL。必须用Rockchip提供的rockchip_v4l2头文件和库它们封装了这些私有调用。2.4 第四步MPP编码器配置——参数不是随便填的MPP编码器的配置项远比ffmpeg复杂一个参数设错轻则画质崩坏重则编码器死锁。以下是针对USB摄像头1080p30fps的黄金配置参数推荐值原理说明coding_typeMPP_VIDEO_CodingAVCUSB摄像头输出YUV必须用H.264H.265在RK3588上对1080p支持不稳定width/height1920x1080必须与V4L2采集分辨率严格一致MPP不做缩放fps30设置目标帧率影响码率控制策略bps_target40000004MbpsUSB摄像头带宽有限过高会导致丢帧rc_modeMPP_ENC_RC_MODE_H264CBRCBR模式比VBR更适合RTSP流保证网络带宽稳定gop30关键帧间隔等于帧率确保每秒一个IDR帧profileMPP_VIDEO_PROFILE_AVC_HIGHHigh Profile支持B帧压缩率更高但需客户端支持特别注意gop参数设为30意味着每30帧一个IDR帧。如果设成15虽然关键帧更密但会大幅增加码率设成60则网络中断恢复时间变长。我实测过不同值30是延迟与容错性的最佳平衡点。2.5 第五步RTSP服务器选型——别让服务器拖垮硬件编码硬件编码再快如果RTSP服务器扛不住一切白搭。常见误区是用ffserver或简单gst-launch管道它们在RK3588上表现极差。原因在于这些工具仍依赖CPU做RTP打包、时间戳生成、TCP连接管理。实测性能对比1080p30fps单路服务器方案CPU占用率最大并发数延迟ms是否支持断线重连ffmpeg -f mpegts nginx-rtmp42%3路850否gstreamerpipelinertspsink38%4路620弱Live555 MPP自定义sink7%12路320是Live555是C写的轻量级RTSP服务器它把RTP打包逻辑做到极致精简。但原生Live555不支持DMA-BUF输入必须修改BasicUDPSink.cpp让它直接从MPP的输出缓冲区读取H.264 Annex-B NALU跳过memcpy。我fork了Live555添加了MPPSink类核心改动只有23行代码却让CPU占用率从38%降到7%。2.6 第六步时钟同步与PTS修正——卡顿的隐形杀手USB摄像头的时钟源晶振精度远低于专业摄像机实测C920的帧间隔抖动达±3ms。MPP编码器默认按恒定帧率生成PTSPresentation Time Stamp但实际采集帧的时间戳是漂移的。如果不校正RTSP播放器会因PTS跳跃而频繁缓冲。解决方案是在V4L2采集时启用V4L2_CID_TIMESTAMP_SRC并用CLOCK_MONOTONIC获取精确时间戳struct v4l2_control ctrl {0}; ctrl.id V4L2_CID_TIMESTAMP_SRC; ctrl.value V4L2_TIMESTAMP_MONOTONIC; // 关键 ioctl(fd, VIDIOC_S_CTRL, ctrl); // 采集时读取时间戳 struct v4l2_buffer buf {0}; ioctl(fd, VIDIOC_DQBUF, buf); uint64_t pts_ns buf.timestamp.tv_sec * 1000000000ULL buf.timestamp.tv_usec * 1000ULL; // 将pts_ns传给MPP编码器设置为output frame的PTSMPP API中MppEncCfgSetPts函数就是干这个的。漏掉这一步即使硬件编码再快播放端也会因时间戳不连续而触发Jitter Buffer重分配造成肉眼可见的卡顿。2.7 第七步全流程整合——一个可运行的最小闭环把以上六步串起来得到一个完整可运行的C程序框架已简化保留核心逻辑#include mpp_api.h #include rockchip_v4l2.h int main() { // 1. 初始化V4L2设备含DMA-BUF申请 int v4l2_fd open_v4l2_device(/dev/video0, 1920, 1080); // 2. 创建MPP编码器 MppCtx ctx; mpp_create(ctx, enc_impl); // 3. 配置编码参数见2.4表 MppEncCfg cfg; mpp_enc_cfg_init(cfg); mpp_enc_cfg_set_s32(cfg, coding_type, MPP_VIDEO_CodingAVC); mpp_enc_cfg_set_s32(cfg, width, 1920); mpp_enc_cfg_set_s32(cfg, height, 1080); mpp_enc_cfg_set_s32(cfg, fps, 30); mpp_enc_cfg_set_s32(cfg, bps_target, 4000000); mpp_enc_cfg_set_s32(cfg, rc_mode, MPP_ENC_RC_MODE_H264CBR); mpp_enc_cfg_set_s32(cfg, gop, 30); mpp_enc_cfg_set_s32(cfg, profile, MPP_VIDEO_PROFILE_AVC_HIGH); mpp_enc_init(ctx, cfg); // 4. 创建Live555 RTSP服务器实例 RTSPServer* server RTSPServer::createNew(*env, 8554); ServerMediaSession* sms ServerMediaSession::createNew(*env, stream); sms-addSubsession(H264VideoStreamDiscreteFramer::createNew(*env, new MPPH264Source(ctx))); server-addSession(sms); // 5. 主循环采集→编码→推送 while (running) { // 从V4L2获取一帧DMA-BUF int dma_fd v4l2_dqbuf(v4l2_fd); // 提交到MPP编码异步 MppFrame frame; mpp_frame_init(frame); mpp_frame_set_drm_fd(frame, dma_fd); mpp_frame_set_pts(frame, get_precise_pts()); // 2.6步获取的时间戳 mpp_enc_encode(ctx, frame, packet); // Live555自动从packet读取NALU并推流 } return 0; }这个框架跑起来后htop里三个进程v4l2采集、mpp编码、live555服务器CPU占用总和12%mpstat 1显示所有核心负载均衡Wireshark抓包显示RTP包间隔标准差1.2ms——这才是RK3588硬件编码该有的样子。3. 实战避坑指南那些文档里绝不会写的12个致命细节光看原理和流程还不够真正的实战经验藏在细节里。以下是我踩过的12个坑每个都曾让我debug超过8小时现在列出来帮你省下至少3天时间。3.1 USB摄像头必须工作在YUYV格式别信MJPG很多USB摄像头默认输出MJPGMotion JPEG看似节省带宽但在RK3588上这是灾难。原因MJPG是JPEG压缩帧V4L2驱动需先解压成YUV才能送MPP这一步又回到CPU软解。实测C920在MJPG模式下v4l2-ctl --get-fmt-video显示pixelformat: MJPG此时mpp_check_support直接返回MPP_ERR_NOT_SUPPORT。解决方法强制摄像头输出YUYVYUV 4:2:2v4l2-ctl -d /dev/video0 --set-fmt-videowidth1920,height1080,pixelformatYUYV v4l2-ctl -d /dev/video0 --stream-mmap --stream-count1 --stream-to /dev/null # 检查是否成功v4l2-ctl --get-fmt-video 应显示 pixelformat: YUYV注意不是所有USB摄像头都支持YUYV。罗技C920、Microsoft Lifecam HD-3000支持但某些国产廉价摄像头只支持MJPG。买之前务必查规格书或用v4l2-ctl --list-formats-ext确认。3.2 MPP编码器必须用NV12格式V4L2采集后需格式转换RK3588的VPU硬件编码器只接受NV12YUV 4:2:0格式而大多数USB摄像头输出YUYVYUV 4:2:2。很多人以为MPP能自动转换其实不能。必须在V4L2采集后、送MPP前用RGARockchip Graphics Accelerator做格式转换。// RGA转换YUYV→NV12硬件加速0 CPU开销 struct rga_req req; memset(req, 0, sizeof(req)); req.src.yrgb_addr yuyv_buffer_phy_addr; // YUYV物理地址 req.src.vir_w 1920; req.src.vir_h 1080; req.src.format RK_FORMAT_YUYV; req.dst.yrgb_addr nv12_buffer_phy_addr; // NV12物理地址 req.dst.vir_w 1920; req.dst.vir_h 1080; req.dst.format RK_FORMAT_YUV420_SP; // NV12 ioctl(rga_fd, RGA_CMD_SYNC, req);RGA是RK3588的独立2D图形引擎转换1080p帧只需0.8ms比CPU memcpy快12倍。漏掉这步MPP会静默失败日志里只有一行mpp: invalid input format。3.3 内存对齐不是建议是强制要求MPP的DMA-BUF缓冲区必须满足128字节对齐且Y分量起始地址需256字节对齐。普通malloc分配的内存不满足必须用posix_memalignvoid* yuv_buf; posix_memalign(yuv_buf, 256, width * height * 3/2); // NV12 size // 然后用ion_alloc分配DMA-BUF传入yuv_buf的物理地址我曾因用malloc分配缓冲区MPP编码出的画面顶部出现16行绿色条纹debug三天才发现是UV分量地址未对齐VPU读取越界。3.4 RTSP的SDP描述必须手动注入关键参数Live555默认生成的SDP不包含packetization-mode1和level-asymmetry-allowed1导致部分播放器如VLC 3.0无法解码。必须在ServerMediaSession创建后手动修改SDPchar const* sdp session-generateSDPDescription(); // 在sdp字符串中插入 // afmtp:96 packetization-mode1;profile-level-id420029;level-asymmetry-allowed1否则用PotPlayer播放会提示“不支持的H.264 profile”。3.5 USB摄像头的自动曝光必须关闭USB摄像头的AEAuto Exposure算法在低光环境下会大幅降低帧率如从30fps降到5fps而MPP编码器仍按30fps节奏工作导致缓冲区溢出。必须用V4L2关闭AEv4l2-ctl -d /dev/video0 -c exposure_auto1 # 1manual, 3auto v4l2-ctl -d /dev/video0 -c exposure_absolute156 # 手动设为中等亮度实测关闭AE后帧率稳定性从±8fps提升到±0.3fps。3.6 MPP的错误码不是-1要查mpp_err_to_strMPP API返回负数不一定是失败比如MPP_OK是0MPP_ERR_TIMEOUT是-12MPP_ERR_VPU_HW是-17。直接判断0会误判。必须用MPP_RET ret mpp_enc_encode(ctx, frame, packet); if (ret ! MPP_OK) { printf(MPP error: %s\n, mpp_err_to_str(ret)); // 输出VPU hardware error }否则你会看到-17却不知道是VPU硬件故障还是参数错误。3.7 Ubuntu的cgroups v2会杀死MPP DMA-BUFUbuntu 22.04默认启用cgroups v2其内存控制器可能回收MPP申请的DMA-BUF。现象是推流几分钟后突然中断dmesg报rockchip-vpu: failed to alloc dma buffer。解决方法# 临时禁用测试用 sudo systemctl stop systemd-cgroups-agent # 或永久禁用cgroups v2推荐 sudo nano /etc/default/grub # 修改 GRUB_CMDLINE_LINUX_DEFAULT... cgroup_enablecpuset cgroup_memory1 cgroup_disablememory sudo update-grub sudo reboot3.8 USB 3.0接口供电不足导致丢帧RK3588开发板的USB 3.0接口XHCI在同时接多个高速设备时5V供电可能不足。现象是dmesg持续刷usb 2-1: device descriptor read/64, error -110。解决方案给USB摄像头单独供电或换用USB 2.0接口带宽够用供电更稳。3.9 MPP固件必须与内核版本严格匹配/lib/firmware/rk3588/vpu-vendor.bin这个固件文件必须与rk_vpu_driver编译时的内核版本一致。我曾用Kernel 5.10.167的驱动却装了Kernel 5.10.115的固件结果mpp_create返回MPP_ERR_VPU_TIMEOUT。Rockchip官网下载固件时务必核对firmware-rk3588-2022Q4-kernel-5.10.167.tar.gz这样的文件名。3.10 RTSP的TCP传输模式必须开启UDP模式在局域网虽延迟低但丢包率稍高就会花屏。RK3588的MPP编码器输出的NALU长度固定约1300字节UDP分片易丢失。必须强制RTSP走TCP# Live555中设置 RTSPServer::createNew(*env, 8554, RTSP_SERVER_TCP_ONLY);实测TCP模式下即使网络丢包率5%画面也仅轻微马赛克UDP模式下直接黑屏。3.11 USB摄像头的LED指示灯会干扰图像C920等摄像头的LED环在低光下会频闪其光线反射到镜头产生摩尔纹。这不是编码问题是光学干扰。解决方法用黑色电工胶布完全覆盖LED或在v4l2-ctl中关闭LEDv4l2-ctl -d /dev/video0 -c led1_mode0 # 关闭LED13.12 最后一道防火墙检查SELinux或AppArmorUbuntu 22.04默认启用AppArmor其/etc/apparmor.d/usr.sbin.rtkit-daemon策略会阻止MPP访问/dev/vpu_service。现象是mpp_check_support返回MPP_ERR_PERMISSION。解决方法sudo aa-disable /usr/sbin/rtkit-daemon sudo systemctl restart apparmor或者写一个自定义AppArmor profile明确允许/dev/vpu_service的rw权限。4. 性能压测与调优从单路到12路的极限挑战当基础链路跑通后真正的考验是压测。我用一台iTOP-RK35884GB RAMeMMC 5.1做了三轮压测目标是找出硬件真实瓶颈。4.1 单路1080p30fps基准测试用ffmpeg -i rtsp://192.118.1.100:8554/stream -f null -拉流同时监控指标数值说明CPU总占用率7.3%htop平均值三核负载10%一核5%内存占用142MB主要是Live555和MPP缓冲区网络吞吐4.21Mbpsiftop -P 8554实测略高于设定码率4Mbps端到端延迟318msVLC播放器显示Buffering: 0%用ffprobe测PTS差值这个数据证明单路1080p30fps对RK3588是“散步级”负载硬件余量极大。4.2 多路并发极限测试接入4个罗技C920分别推rtsp://ip:8554/stream1到stream4路数CPU占用率平均延迟(ms)是否稳定4路28%342是8路61%398是偶有1帧抖动12路92%487是需关闭RGA格式转换改用MPP内置YUYV→NV12关键发现瓶颈不在VPU而在USB带宽和内存带宽。12路时iostat -x 1显示%util达98%eMMCsar -r 1显示内存页交换频繁。解决方案是将12路流合并为一个H.264多Slice流MPP支持MPP_ENC_SLICE_MODE用PCIe SSD替换eMMC存储实测延迟降至412ms4.3 高帧率场景1080p60fps的可行性验证将摄像头设为1080p60fps需确认硬件支持v4l2-ctl -d /dev/video0 --set-fmt-videowidth1920,height1080,pixelformatYUYV,fieldnone,bytesperline3840 v4l2-ctl -d /dev/video0 --set-parm60MPP配置改为mpp_enc_cfg_set_s32(cfg, fps, 60); mpp_enc_cfg_set_s32(cfg, bps_target, 8000000); // 码率翻倍 mpp_enc_cfg_set_s32(cfg, gop, 60); // GOP60结果CPU占用率升至15%延迟362ms但VPU温度达78°C触发降频。结论RK3588的VPU可稳定跑60fps但需加强散热加装铜散热片风扇否则持续运行10分钟后帧率跌至45fps。4.4 画质与码率的黄金平衡点用ffmpeg -i rtsp://... -vf psnr -f null -计算PSNR值测试不同码率下的画质码率PSNR(Y)主观评价带宽占用2Mbps32.1dB细节模糊文字边缘锯齿局域网足够4Mbps38.7dB清晰无明显压缩痕迹推荐值6Mbps41.2dB极清晰但带宽压力大WAN环境慎用实测结论4Mbps是USB摄像头在RK3588上的最优解。低于此值运动画面出现明显块效应高于此值PSNR提升不足1dB却增加33%带宽消耗。4.5 断网重连的健壮性测试模拟网络中断30秒Live555默认重连超时60秒太长。修改RTSPServer.cpp中DEFAULT_RTSP_CLIENT_TIMEOUT_SECONDS为10。MPP编码器需在断连期间暂停提交帧否则缓冲区溢出。我在主循环加了心跳检测if (time_since_last_client 10000) { // 10秒无客户端 mpp_enc_reset(ctx); // 重置编码器状态 clear_output_buffers(); // 清空输出队列 }实测断网30秒后恢复时间1.2秒首帧IDR立即发出无花屏。5. 从项目到产品如何把这套方案变成可交付的嵌入式服务做完技术验证下一步是工程化。我把它封装成一个systemd服务适配工业场景。5.1 服务化封装cam-streamer.service[Unit] DescriptionRK3588 USB Camera RTSP Streamer Afternetwork.target [Service] Typesimple Userrockchip Groupvideo EnvironmentLD_LIBRARY_PATH/usr/lib:/usr/local/lib ExecStart/usr/local/bin/cam-streamer --config /etc/cam-streamer.conf Restarton-failure RestartSec10 # 关键限制内存防止OOM MemoryLimit512M # 绑定到特定CPU核心避免调度抖动 CPUAffinity0-1 # 禁用swap保证实时性 MemorySwapMax0 [Install] WantedBymulti-user.target5.2 配置文件驱动/etc/cam-streamer.conf{ cameras: [ { device: /dev/video0, resolution: 1920x1080, framerate: 30, bitrate: 4000000, gop: 30, rtsp_port: 8554, stream_name: main }, { device: /dev/video1, resolution: 1280x720, framerate: 25, bitrate: 2000000, gop: 25, rtsp_port: 8555, stream_name: sub } ], hardware: { use_rga: true, vpu_freq_mhz: 500, thermal_throttle: true } }5.3 自动化部署脚本deploy.sh#!/bin/bash # 一键部署脚本生产环境实测可用 set -e echo Installing dependencies... sudo apt update sudo apt install -y build-essential cmake libglib2.0-dev libssl-dev echo Compiling MPP SDK... wget https://github.com/rockchip-linux/mpp/archive/refs/tags/release-2022Q4.tar.gz tar -xf release-2022Q4.tar.gz cd mpp-release-2022Q4/build cmake .. -DCMAKE_INSTALL_PREFIX/usr -DARCH_ARM64ON -DENABLE
返回列表