# 基于v4l2 ffmpeg rkmpp rtmp yolov11-rknn st7796 FT6336U OSS 的Qt应用 **Repository Path**: superman_1/Qt-application-based-on-v4l2-ffmpeg-rkmpp-rtmp-yolov11-rknn-OSS ## Basic Information - **Project Name**: 基于v4l2 ffmpeg rkmpp rtmp yolov11-rknn st7796 FT6336U OSS 的Qt应用 - **Description**: 这个项目是一个基于 Qt 和 V4L2 的视频捕获与处理应用,结合 FFmpeg(RTMP) 和 Rockchip MPP(媒体处理平台)以及YOLOv11实现摄像头视频的捕获、显示、录制、快照、RTMP 推流和YOLO物体实时检测功能。添加了图片和视频同步阿里云OSS功能 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 4 - **Created**: 2025-11-01 - **Last Updated**: 2025-11-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 基于v4l2 ffmpeg rkmpp rtmp yolov11-rknn st7796 ft6336u OSS 的Qt应用 #### 介绍 这个项目是一个基于 Qt 和 V4L2 的视频捕获与处理应用,结合 FFmpeg(RTMP) 和 Rockchip MPP(媒体处理平台)以及YOLOv11实现摄像头视频的捕获、显示、录制、快照、RTMP 推流和YOLO物体实时检测功能。添加了st7796屏幕和FT6336U触摸驱动 图片和视频同步阿里云OSS功能 #### 软件架构 主控香橙派3B rk3566 屏幕ST7796 屏幕触摸FT6336U ## 注意 ** ### 屏幕显示不正常,要修改st7789v驱动源码,改寄存器的值!!!! ** ![输入图片说明](15.png) ``` static int set_var(struct fbtft_par *par) { printk(KERN_INFO "i'm in\n"); u8 madctl_par = 0; if (par->bgr) madctl_par |= MADCTL_BGR; switch (par->info->var.rotate) { case 0: break; case 90: madctl_par |= (MADCTL_MV | MADCTL_MY); break; case 180: madctl_par |= (MADCTL_MX | MADCTL_MY); break; case 270: madctl_par |= (MADCTL_MV | MADCTL_MX); break; default: return -EINVAL; } madctl_par |= MADCTL_MX; //屏幕左右镜像翻转 madctl_par |= MADCTL_BGR; write_reg(par, MIPI_DCS_SET_ADDRESS_MODE, madctl_par); printk(KERN_INFO "madctl_par 0x%02X\n", madctl_par); printk(KERN_INFO "i'm out\n"); return 0; } ``` 屏幕是SPI 用的是SPI3 屏幕触摸是I2C 用的I2C2 #### 安装教程 1. xxxx 2. xxxx 3. xxxx #### 使用说明 1. 链接库添加了OSS SDK和 oss对openssl、curl的依赖 ![输入图片说明](image2.png) ![输入图片说明](image3.png) 2. xxxx 3. xxxx #### 参与贡献 OSS SDK https://help.aliyun.com/zh/oss/developer-reference/installation-12?spm=a2c4g.11186623.help-menu-31815.d_5_2_11_1.faa465b4JX7xH7&scm=20140722.H_106216._.OR_help-T_cn~zh-V_1 https://help.aliyun.com/zh/oss/developer-reference/getting-started-with-oss-sdk-for-cpp?spm=a2c4g.11186623.help-menu-31815.d_5_2_11_4.25588f0c6SMTgl&scm=20140722.H_106556._.OR_help-T_cn~zh-V_1 屏幕是SPI 用的是SPI3 ![输入图片说明](image1.png) # 设备树记得设置width 和 height width = <640>; // 显示宽度 height = <480>; // 显示高度 st7796驱动代码 st7796s-main https://github.com/rikovalkonen/st7796s/tree/main st7796设备树 rk356x-spi3-m0-cs0-fbdev-st7796.dts https://www.bilibili.com/opus/949536446456266753?spm_id_from=333.1387.0.0 这是orangepi5pro的SPI设备树配置,注意不同开发板spi i2c 引脚可能不一致 ``` &spi4 { status = "okay"; assigned-clocks = <&cru CLK_SPI4>; assigned-clock-rates = <200000000>; num-cs = <2>; #address-cells = <1>; #size-cells = <0>; pinctrl-names = "default", "high_speed"; pinctrl-0 = <&spi4m2_cs0 &spi4m2_pins>; cs-gpios = <&gpio1 RK_PB4 GPIO_ACTIVE_LOW>; st7789v@0 { compatible = "sitronix,st7789v"; reg = <0>; //chip select 0:cs0 1:cs1 spi-max-frequency = <100000000>; //spi output clock // rotate = <90>; width = <320>; // 显示宽度 height = <480>; // 显示高度 spi-cpol; spi-cpha; fps = <30>; buswidth = <8>; dc-gpios = <&gpio1 RK_PA6 GPIO_ACTIVE_HIGH>; //DC脚 GPIO1 A6 reset-gpios = <&gpio1 RK_PA4 GPIO_ACTIVE_LOW>; //rest脚 GPIO1 A4 debug = <0>; }; }; ``` 这是orangepi5pro的i2c设备树配置,注意不同开发板spi i2c 引脚可能不一致 ``` &i2c1 { status = "okay"; clock-frequency = <100000>; pinctrl-0 = <&i2c1m4_xfer &focaltech_int_rst>; focaltech@38 { status = "okay"; compatible = "focaltech,fts"; reg = <0x38>; interrupt-parent = <&gpio4>; interrupts = ; focaltech,reset-gpio = <&gpio4 RK_PA4 GPIO_ACTIVE_LOW>; focaltech,irq-gpio = <&gpio4 RK_PA6 GPIO_ACTIVE_HIGH>; focaltech,max-touch-number = <1>; focaltech,display-coords = <0 0 320 480>; //分辨率 pinctrl-names = "default"; focaltech,key-number = <3>; focaltech,keys = <139 102 158>; focaltech,key-y-coord = <2000>; focaltech,key-x-coords = <200 600 800>; }; }; ``` 屏幕触摸时I2C 用的I2C2 模块一(M1),对应的i2c2m1_xfer 里面定义了SDA SCL FT6336U 驱动代码 focaltech_touch_ft5436 ``` obj-m += focaltech_ts.o focaltech_ts-y := \ focaltech_core.o \ focaltech_ex_fun.o \ focaltech_ex_mode.o \ focaltech_flash.o \ focaltech_gesture.o \ focaltech_esdcheck.o \ focaltech_i2c.o \ focaltech_point_report_check.o \ focaltech_upgrade_ft8201.o all: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules clean: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean ``` 编译后加载,可能会出现以下日志,这是正常的 ![输入图片说明](%E9%A9%B1%E5%8A%A8.png) 可以用sudo evtest查看 ![输入图片说明](evtest.png) ![输入图片说明](11.png) FT6336U设备树 ``` &pinctrl { touch { focaltech_int_rst: focaltech-int-rst { rockchip,pins = <4 2 RK_FUNC_GPIO &pcfg_pull_up>, /* INT: GPIO4_A2 (GPIO 130) */ <4 3 RK_FUNC_GPIO &pcfg_pull_up>; /* RST: GPIO4_A3 (GPIO 131) */ }; }; }; &i2c2 { status = "okay"; clock-frequency = <100000>; pinctrl-0 = <&i2c2m1_xfer &focaltech_int_rst>; focaltech@38 { status = "okay"; compatible = "focaltech,fts"; reg = <0x38>; interrupt-parent = <&gpio4>; interrupts = ; focaltech,reset-gpio = <&gpio4 RK_PA3 GPIO_ACTIVE_LOW>; focaltech,irq-gpio = <&gpio4 RK_PA2 GPIO_ACTIVE_HIGH>; focaltech,max-touch-number = <1>; focaltech,display-coords = <0 0 320 480>; //分辨率 pinctrl-names = "default"; focaltech,key-number = <3>; focaltech,keys = <139 102 158>; focaltech,key-y-coord = <2000>; focaltech,key-x-coords = <200 600 800>; }; }; ``` ![输入图片说明](image.png) #### 演示效果 ![输入图片说明](615a2d21390cee7bfa92d5f6c860651.jpg) yolo效果图 ![输入图片说明](3cca701d68e478c8ad0928ad06661c8.jpg)