RK356X 解除UVC摄像头预览分辨率1080P限制
平台
RK3566 + Android 11
概述

UVC:
USB video class(又称为USB video device class or UVC)就是USB device class视频产品在不需要安装任何的驱动程序下即插即用,包括摄像头、数字摄影机、模拟视频转换器、电视卡及静态视频相机。
测试代码:
Camera cam = Camera.open(CAMERA_ID);Camera.Parameters param = cam.getParameters();List<Camera.Size> sizes = param.getSupportedPreviewSizes();
打印出来后显示支持的预览分辨率如下:
D startPreview support preview 640x360
D startPreview support preview 640x480
D startPreview support preview 960x540
D startPreview support preview 800x600
D startPreview support preview 1280x720
D startPreview support preview 1280x960
D startPreview support preview 1920x1080
D startPreview support preview 1600x1200
然而,把摄像头接入到PC上,不管是LINUX还是WINDOWS,会发现实际支持的最大预览分辨率是:3840x2160
缺少的分辨率哪去了?
分析
摄像头部分的架构比较复杂,整理几个相关的源码目录:
# SDK 接口
> frameworks/base/core/java/android/hardware/Camera.java
> frameworks/base/core/jni/android_hardware_Camera.cpp# 上层 Camera 服务
> frameworks/av/camera/# HAL层
> hardware/rockchip/camera
> hardware/interfaces/camera/# 配置文件,对应USB和CSI之类的摄像头配置
# 包含了支持分辨率,闪光灯等等的一些特性。
> device/rockchip/common/external_camera_config.xml
> hardware/rockchip/camera/etc/camera/
烧录到主板后相关的一些文件目录
> rk3568_r:/ # ll /vendor/etc/camera/
total 948
-rw-r--r-- 1 root root 3044 2023-04-18 09:55 README.txt
-rw-r--r-- 1 root root 152818 2023-04-18 09:55 camera3_profiles.xml
-rw-r--r-- 1 root root 166244 2023-04-18 09:55 camera3_profiles_default.xml
-rw-r--r-- 1 root root 14744 2023-04-18 09:55 camera3_profiles_rk1126.xml
-rw-r--r-- 1 root root 48811 2023-04-18 09:55 camera3_profiles_rk3126c.xml
-rw-r--r-- 1 root root 64987 2023-04-18 09:55 camera3_profiles_rk3288.xml
-rw-r--r-- 1 root root 61800 2023-04-18 09:55 camera3_profiles_rk3326.xml
-rw-r--r-- 1 root root 98549 2023-04-18 09:55 camera3_profiles_rk3368.xml
-rw-r--r-- 1 root root 64766 2023-04-18 09:55 camera3_profiles_rk3399.xml
-rw-r--r-- 1 root root 26451 2023-04-18 09:55 camera3_profiles_rk3399_1608.xml
-rw-r--r-- 1 root root 77820 2023-04-18 09:55 camera3_profiles_rk3399pro.xml
-rw-r--r-- 1 root root 152818 2023-04-18 09:55 camera3_profiles_rk356x.xml
-rw-r--r-- 1 root root 2875 2023-04-18 09:55 graph_descriptor.xml
-rw-r--r-- 1 root root 145 2023-04-18 09:55 reset_camera.sh
drwxr-xr-x 2 root shell 4096 2023-04-18 09:55 rkisp1
drwxr-xr-x 2 root shell 4096 2023-04-18 09:55 rkisp2# UVC 的配置
> /vendor/etc/external_camera_config.xml
先用v4l2 工具看下基本信息
## 当前的设备列表
rk3566:/ # ll /dev/video*
crw-rw---- 1 media camera 81, 0 2023-04-14 09:44 /dev/video0
crw-rw---- 1 media camera 81, 1 2023-04-14 09:44 /dev/video1
crw-rw---- 1 media camera 81, 10 2023-04-14 09:44 /dev/video10
crw-rw---- 1 media camera 81, 11 2023-04-14 09:44 /dev/video11
crw-rw---- 1 media camera 81, 12 2023-04-14 09:44 /dev/video12
crw-rw---- 1 media camera 81, 13 2023-04-14 09:44 /dev/video13
crw-rw---- 1 media camera 81, 14 2023-04-14 09:44 /dev/video14
crw-rw---- 1 media camera 81, 15 2023-04-14 09:44 /dev/video15
crw-rw---- 1 media camera 81, 2 2023-04-14 09:44 /dev/video2
crw-rw---- 1 media camera 81, 3 2023-04-14 09:44 /dev/video3
crw-rw---- 1 media camera 81, 4 2023-04-14 09:44 /dev/video4
crw-rw---- 1 media camera 81, 5 2023-04-14 09:44 /dev/video5
crw-rw---- 1 media camera 81, 6 2023-04-14 09:44 /dev/video6
crw-rw---- 1 media camera 81, 7 2023-04-14 09:44 /dev/video7
crw-rw---- 1 media camera 81, 8 2023-04-14 09:44 /dev/video8
crw-rw---- 1 media camera 81, 9 2023-04-14 09:44 /dev/video9# 设备信息
rk3566_r:/ # v4l2-ctl --list-devices
rkisp-statistics (platform: rkisp):/dev/video12/dev/video13rkcif (platform:rkcif_mipi_lvds):/dev/video0/dev/video1/dev/video2/dev/video3/dev/video4rkisp_mainpath (platform:rkisp-vir0):/dev/video5/dev/video6/dev/video7/dev/video8/dev/video9/dev/video10/dev/video11UC40A Audio: UC40A Video (usb-xhci-hcd.1.auto-1.3):/dev/video14/dev/video15# 查看指定设备信息
rk3566_r:/ # v4l2-ctl -D -d /dev/video15
Driver Info:Driver name : uvcvideoCard type : UC40A Audio: UC40A VideoBus info : usb-xhci-hcd.1.auto-1.3Driver version : 4.19.193Capabilities : 0x84a00001Video CaptureMetadata CaptureStreamingExtended Pix FormatDevice CapabilitiesDevice Caps : 0x04a00000Metadata CaptureStreamingExtended Pix Format
Media Driver Info:Driver name : uvcvideoModel : UC40A Audio: UC40A VideoSerial : 01.00.00Bus info : usb-xhci-hcd.1.auto-1.3Media version : 4.19.193Hardware revision: 0x00000902 (2306)Driver version : 4.19.193
Interface Info:ID : 0x03000005Type : V4L Video
Entity Info:ID : 0x00000004 (4)Name : UC40A Audio: UC40A VideoFunction : V4L2 I/O# 设备支持格式
rk3566_r:/ # v4l2-ctl -d /dev/video14 --list-formats
ioctl: VIDIOC_ENUM_FMTIndex : 0Type : Video CapturePixel Format: 'MJPG' (compressed)Name : Motion-JPEGIndex : 1Type : Video CapturePixel Format: 'YUYV'Name : YUYV 4:2:2# 设备支持分辨率
rk3566_r:/ # v4l2-ctl -d /dev/video14 --list-framesizes=YUYV
ioctl: VIDIOC_ENUM_FRAMESIZESSize: Discrete 2048x1536Size: Discrete 640x480Size: Discrete 3840x2160Size: Discrete 2592x1944Size: Discrete 2688x1512Size: Discrete 1920x1080Size: Discrete 1600x1200Size: Discrete 1280x960Size: Discrete 1280x720Size: Discrete 960x540Size: Discrete 800x600Size: Discrete 640x360
结论:硬件及驱动到HAL都是正常
忽略中间漫长的排查过程, 直奔主题:
预览的限制主要存在于HAL和framework层, 至少RK的SDK是这样的,其他平台请勿对号入座。
- HAL
/vendor/etc/external_camera_config.xml 中的 FpsList
注释:List of maximum fps for various output sizes
解决的方法是增加对应缺少的分辨率,如:<Limit width=“3840” height=“2160” fpsBound=“30.0” />
<ExternalCamera><Provider><ignore> <!-- Internal video devices to be ignored by external camera HAL --><!-- <id>0</id> --> <!-- No leading/trailing spaces --></ignore></Provider><!-- See ExternalCameraUtils.cpp for default values of Device configurations below--><Device><!-- Max JPEG buffer size in bytes--><MaxJpegBufferSize bytes="24883200"/> <!-- 3MB (~= 1080p YUV420) --><!-- Size of v4l2 buffer queue when streaming >= 30fps --><!-- Larger value: more request can be cached pipeline (less janky) --><!-- Smaller value: use less memory --><NumVideoBuffers count="4"/><!-- Size of v4l2 buffer queue when streaming < 30fps --><NumStillBuffers count="2"/><!-- List of maximum fps for various output sizes --><!-- Any image size smaller than the size listed in Limit row will reportfps (as minimum frame duration) up to the fpsBound value. --><FpsList><!-- width/height must be increasing, fpsBound must be decreasing--><Limit width="176" height="144" fpsBound="60.0" /><Limit width="176" height="144" fpsBound="30.0" /><Limit width="176" height="144" fpsBound="20.0" /><Limit width="176" height="144" fpsBound="15.0" /><Limit width="320" height="240" fpsBound="60.0" /><Limit width="320" height="240" fpsBound="30.0" /><Limit width="320" height="240" fpsBound="20.0" /><Limit width="320" height="240" fpsBound="15.0" /><Limit width="352" height="288" fpsBound="30.0" /><Limit width="352" height="288" fpsBound="20.0" /><Limit width="352" height="288" fpsBound="15.0" /><Limit width="640" height="480" fpsBound="60.0" /><Limit width="640" height="480" fpsBound="30.0" /><Limit width="640" height="480" fpsBound="20.0" /><Limit width="640" height="480" fpsBound="15.0" /><Limit width="640" height="480" fpsBound="10.0" /><Limit width="800" height="600" fpsBound="30.0" /><Limit width="800" height="600" fpsBound="20.0" /><Limit width="800" height="600" fpsBound="15.0" /><Limit width="1024" height="768" fpsBound="30.0" /><Limit width="1024" height="768" fpsBound="20.0" /><Limit width="1024" height="768" fpsBound="15.0" /><Limit width="1024" height="768" fpsBound="10.0" /><Limit width="1280" height="720" fpsBound="60.0" /><Limit width="1280" height="720" fpsBound="30.0" /><Limit width="1280" height="720" fpsBound="20.0" /><Limit width="1280" height="720" fpsBound="15.0" /><Limit width="1280" height="720" fpsBound="10.0" /><Limit width="1280" height="800" fpsBound="30.0" /><Limit width="1280" height="800" fpsBound="20.0" /><Limit width="1280" height="800" fpsBound="15.0" /><Limit width="1280" height="960" fpsBound="30.0" /><Limit width="1280" height="960" fpsBound="20.0" /><Limit width="1280" height="960" fpsBound="15.0" /><Limit width="1280" height="1024" fpsBound="30.0" /><Limit width="1280" height="1024" fpsBound="20.0" /><Limit width="1280" height="1024" fpsBound="15.0" /><Limit width="1600" height="1200" fpsBound="30.0" /><Limit width="1600" height="1200" fpsBound="15.0" /><Limit width="1920" height="1080" fpsBound="30.0" /><Limit width="1920" height="1080" fpsBound="15.0" /><Limit width="2048" height="1536" fpsBound="30.0" /><Limit width="2592" height="1944" fpsBound="30.0" /><Limit width="2592" height="1944" fpsBound="15.0" /><Limit width="2592" height="1944" fpsBound="10.0" /><Limit width="2592" height="1944" fpsBound="5.0" /><Limit width="2688" height="1512" fpsBound="30.0" /><Limit width="3840" height="2160" fpsBound="30.0" /><!-- image size larger than the last entry will not be supported--></FpsList><!-- orientation --><Orientation degree="90"/></Device>
</ExternalCamera>
hardware/interfaces/camera/device/3.4/default/RgaCropScale.cpp
diff --git a/hardware/interfaces/camera/device/3.4/default/RgaCropScale.cpp b/hardware/interfaces/camera/device/3.4/default/RgaCropScale.cpp
index 23d018fb6d..4829d1d664 100644
--- a/hardware/interfaces/camera/device/3.4/default/RgaCropScale.cpp
+++ b/hardware/interfaces/camera/device/3.4/default/RgaCropScale.cpp
@@ -21,21 +21,21 @@namespace android {namespace camera2 {-#if (defined(TARGET_RK32) || defined(TARGET_RK3368))
+//#if (defined(TARGET_RK32) || defined(TARGET_RK3368))#define RGA_VER (2.0)#define RGA_ACTIVE_W (4096)#define RGA_VIRTUAL_W (4096)#define RGA_ACTIVE_H (4096)#define RGA_VIRTUAL_H (4096)-#else
-#define RGA_VER (1.0)
-#define RGA_ACTIVE_W (2048)
-#define RGA_VIRTUAL_W (4096)
-#define RGA_ACTIVE_H (2048)
-#define RGA_VIRTUAL_H (2048)
+//#else
+//#define RGA_VER (1.0)
+//#define RGA_ACTIVE_W (2048)
+//#define RGA_VIRTUAL_W (4096)
+//#define RGA_ACTIVE_H (2048)
+//#define RGA_VIRTUAL_H (2048)-#endif
+//#endif
这部分不修改会导致以下问题:
and...ternal-service E (dst_width > RGA_VIRTUAL_W) || (dst_height > RGA_VIRTUAL_H), switch to arm
and...ternal-service I uid=1047(cameraserver) ExtCamOut identical 2 lines
and...ternal-service E (dst_width > RGA_VIRTUAL_W) || (dst_height > RGA_VIRTUAL_H), switch to arm
com...d.quickpreview I Background concurrent copying GC freed 306(35KB) AllocSpace objects, 3(35MB) LOS objects, 48% free, 25MB/49MB, paused 862us total 143.804ms
and...ternal-service E (dst_width > RGA_VIRTUAL_W) || (dst_height > RGA_VIRTUAL_H), switch to arm
and...ternal-service E (dst_width > RGA_VIRTUAL_W) || (dst_height > RGA_VIRTUAL_H), switch to arm
and...er@2.1-service I [File] : hardware/rockchip/libgralloc/bifrost/src/core/mali_gralloc_formats.cpp; [Line] : 1858; [Func] : rk_gralloc_select_format;AFBC IS disabled for fb_target_layer.
and...ternal-service E (dst_width > RGA_VIRTUAL_W) || (dst_height > RGA_VIRTUAL_H), switch to arm
and...ternal-service I uid=1047(cameraserver) ExtCamOut identical 2 lines
and...ternal-service E (dst_width > RGA_VIRTUAL_W) || (dst_height > RGA_VIRTUAL_H), switch to arm
and...ternal-service D @debugShowFPS(1171): Camera 2176 Frames, 30.105 FPS
and...ternal-service E (dst_width > RGA_VIRTUAL_W) || (dst_height > RGA_VIRTUAL_H), switch to arm
and...ternal-service I uid=1047(cameraserver) ExtCamOut identical 2 lines
and...ternal-service E (dst_width > RGA_VIRTUAL_W) || (dst_height > RGA_VIRTUAL_H), switch to arm
and...er@2.1-service I [File] : hardware/rockchip/libgralloc/bifrost/src/core/mali_gralloc_formats.cpp; [Line] : 1858; [Func] : rk_gralloc_select_format;AFBC IS disabled for fb_target_layer.
and...ternal-service E (dst_width > RGA_VIRTUAL_W) || (dst_height > RGA_VIRTUAL_H), switch to arm
and...ternal-service I uid=1047(cameraserver) ExtCamOut identical 4 lines
and...ternal-service E (dst_width > RGA_VIRTUAL_W) || (dst_height > RGA_VIRTUAL_H), switch to arm
and...er@2.1-service I [File] : hardware/rockchip/libgralloc/bifrost/src/core/mali_gralloc_formats.cpp; [Line] : 1858; [Func] : rk_gralloc_select_format;AFBC IS disabled for fb_target_layer.
- Framework
frameworks/av/services/camera/libcameraservice/api1/client2/Parameters.h
上层接口解除1080P的限制.
diff --git a/frameworks/av/services/camera/libcameraservice/api1/client2/Parameters.h b/frameworks/av/services/camera/libcameraservice/api1/client2/Parameters.h
index 3a709c9791..2ee332a8c8 100644
--- a/frameworks/av/services/camera/libcameraservice/api1/client2/Parameters.h
+++ b/frameworks/av/services/camera/libcameraservice/api1/client2/Parameters.h
@@ -199,11 +199,11 @@ struct Parameters {// Max preview size allowed// This is set to a 1:1 value to allow for any aspect ratio that has// a max long side of 1920 pixels
- static const unsigned int MAX_PREVIEW_WIDTH = 1920;
- static const unsigned int MAX_PREVIEW_HEIGHT = 1920;
+ static const unsigned int MAX_PREVIEW_WIDTH = 3840;
+ static const unsigned int MAX_PREVIEW_HEIGHT = 2160;// Initial max preview/recording size bound
- static const int MAX_INITIAL_PREVIEW_WIDTH = 1920;
- static const int MAX_INITIAL_PREVIEW_HEIGHT = 1080;
+ static const int MAX_INITIAL_PREVIEW_WIDTH = 3840;
+ static const int MAX_INITIAL_PREVIEW_HEIGHT = 2160;// Aspect ratio tolerancestatic const CONSTEXPR float ASPECT_RATIO_TOLERANCE = 0.001;// Threshold for slow jpeg mode
编译验证
# 编译
mmm hardware/interfaces/camera/device/3.4/default/
# push 到主板
#adb push out/target/product/rk3566_r/vendor/lib64/hw/camera.rk30board.so /vendor/lib64/hw/
#adb push out/target/product/rk3566_r/vendor/lib/hw/camera.rk30board.so /vendor/lib/hw/
adb push out/target/product/rk3566_r/vendor/lib/camera.device@3.4-external-impl.so /vendor/lib/
adb push out/target/product/rk3566_r/vendor/lib64/camera.device@3.4-external-impl.so /vendor/lib64/# 编译
mmm /disk4/anson/rk3568_a11/frameworks/av/services/camera/libcameraservice/:libcameraservice
adb push out/target/product/rk3566_r/system/lib/libcameraservice.so /system/lib/
adb push out/target/product/rk3566_r/system/lib64/libcameraservice.so /system/lib64/
小插曲
RK的Linux 烧录工具
# 低版本可以烧录 system.img
# -s system.img
# 新版本的SDK中,烧录super.img
Linux_Upgrade_Tool_v1.65/upgrade_tool DI -super super.img# 烧录完整固件
Linux_Upgrade_Tool_v1.65/upgrade_tool UF update.img
参考
Ubuntu下查看usb摄像头不同压缩格式支持的分辨率
相关文章:
RK356X 解除UVC摄像头预览分辨率1080P限制
平台 RK3566 Android 11 概述 UVC: USB video class(又称为USB video device class or UVC)就是USB device class视频产品在不需要安装任何的驱动程序下即插即用,包括摄像头、数字摄影机、模拟视频转换器、电视卡及静态视频相机…...
English Learning - L2-14 英音地道语音语调 重音技巧 2023.04.10 周一
English Learning - L2-14 英音地道语音语调 重音技巧 2023.04.10 周一 课前热身重音日常表达节奏单词全部重读的句子间隔时间非重读单词代词和缩约词助动词声临其境语调预习 课前热身 学习目标 重音 重弱突出,重音突出核心表达的意思 重音是落在重读单词上&…...
3.6 n维随机变量
学习目标: 学习n维随机变量需要掌握一定的数学知识,包括多元微积分、线性代数和概率论等。要学习n维随机变量,我会采取以下步骤: 复习相关的数学知识:首先,我会复习多元微积分、线性代数和概率论的基本知…...
JavaSE学习进阶day06_02 Set集合和Set接口
第二章 Set系列集合和Set接口 Set集合概述:前面学习了Collection集合下的List集合,现在继续学习它的另一个分支,Set集合。 set系列集合的特点: Set接口: java.util.Set接口和java.util.List接口一样,同样…...
基于matlab分析卫星星座对通信链路的干扰
一、前言 此示例说明如何分析从中地球轨道 (MEO) 中的卫星星座到位于太平洋的地面站的下行链路上的干扰。干扰星座由低地球轨道(LEO)的40颗卫星组成。此示例确定下行链路闭合的时间、载波噪声加干扰比以及链路裕量。 此示例需要卫…...
Python中的异常——概述和基本语法
Python中的异常——概述和基本语法 摘要:Python中的异常是指在程序运行时发生的错误情况,包括但不限于除数为0、访问未定义变量、数据类型错误等。异常处理机制是Python提供的一种解决这些错误的方法,我们可以使用try/except语句来捕获异常并…...
Tomcat 部署与优化
1. Tomcat概述 Tomcat是Java语言开发的,Tomcat服务器是一个免费的开放源代码的Web应用服务器,是Apache软件基金会的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人 共同开发而成。Tomcat属于轻量级应用服务器,在…...
多模态之论文笔记ViLT
文章目录 ViLT: Vision-and-Language Transformer Without Convolution or Region Supervision一. 简介1.1 摘要1.2 文本编码器,图像编码器,特征交互复杂度分析1.2 特征交互方式分析1.3 图像特征提取分析 二. 方法 Vision-and-Language Transformer2.1.方…...
微服务架构下认证和鉴权理解
认证和鉴权 从单体应用到微服务架构,优势很多,但是并不是代表着就没有一点缺点了。 微服务架构,意味着每个服务都是松散耦合的。因此,作为软件工程师和架构师,我们在分布式架构中面临着安全挑战。微服务对外开放的端…...
Qt 网络编程之美:探索 URL、HTTP、服务发现与请求响应
Qt 网络编程之美:探索 URL、HTTP、服务发现与请求响应(The Beauty of Qt Network Programming: Exploring URL, HTTP, Service Discovery, and Request-Response 引言(Introduction)QUrl 类:构建和解析 URL(…...
毕业2年,跳槽到下一个公司就25K了,厉害了···
本人本科就读于某普通院校,毕业后通过同学的原因加入软件测试这个行业,角色也从测试小白到了目前的资深工程师,从功能测试转变为测试开发,并顺利拿下了某二线城市互联网企业的Offer,年薪 30W 。 选择和努力哪个重要&a…...
设计模式 -- 适配器模式
前言 月是一轮明镜,晶莹剔透,代表着一张白纸(啥也不懂) 央是一片海洋,海乃百川,代表着一块海绵(吸纳万物) 泽是一柄利剑,千锤百炼,代表着千百锤炼(输入输出) 月央泽,学习的一种过程,从白纸->吸收各种知识->不断输入输出变成自己的内容 希望大家一起坚持这个过程,也同…...
STM32之增量式编码器电机测速
STM32之增量式编码器电机测速 编码器编码器种类按监测原理分类光电编码器霍尔编码器 按输出信号分类增量式编码器绝对式编码器 编码器参数分辨率精度最大响应频率信号输出形式 编码器倍频 STM32的编码器模式编码器模式编码器的计数方向仅在TI1计数电机正转,向上计数…...
一图看懂 xlsxwriter 模块:用于创建 Excel .xlsx 文件, 资料整理+笔记(大全)
本文由 大侠(AhcaoZhu)原创,转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 xlsxwriter 模块:用于创建 Excel .xlsx 文件, 资料整理笔记(大全) 摘要模块图类关系图模块全展开【xlsxwriter】统计常量模块1 xlsxwrit…...
【社区图书馆】NVMe协议的命令
声明 主页:元存储的博客_CSDN博客 依公开知识及经验整理,如有误请留言。 个人辛苦整理,付费内容,禁止转载。 内容摘要 前言 命令由host提交到内存中的SQ队列中,更新TDBxSQ后,NVMe控制器通过DMA的方式将SQ中的命令(怎么取,如何取,取多少,因设计而异)取到控制器缓冲区…...
Nginx网站服务
Nginx概述 Nginx 是开源、高性能、高可靠、低资源消耗的 Web 和反向代理服务器,而且支持热部署,几乎可以做到 7 * 24 小时不间断运行,即使运行几个月也不需要重新启动,还能在不间断服务的情况下对软件版本进行热更新。对HTTP并发…...
第八篇 Spring 集成JdbcTemplate
《Spring》篇章整体栏目 ————————————————————————————— 【第一章】spring 概念与体系结构 【第二章】spring IoC 的工作原理 【第三章】spring IOC与Bean环境搭建与应用 【第四章】spring bean定义 【第五章】Spring 集合注入、作用域 【第六章】…...
双塔模型:微软DSSM模型浅析
1.背景 DSSM是Deep Structured Semantic Model (深层结构语义模型) 的缩写,即我们通常说的基于深度网络的语义模型,其核心思想是将query和doc映射到到共同维度的语义空间中,通过最大化query和doc语义向量之间的余弦相似度,从而训…...
DAY 44 Apache网页优化
Apache网页优化 概述 在企业中,部署Apache后只采用默认的配置参数,会引发网站很多问题,换言之默认配置是针对以前较低的服务器配置的,以前的配置已经不适用当今互联网时代 为了适应企业需求,就需要考虑如何提升Apach…...
移动端手机网页适配iPad与折叠屏设备
采用的网页适配方案:移动端页面px布局适配方案(viewport) 产生此问题的原因 由于手机与平板等设备宽高比差异导致页面展示不全或者功能按钮展示在视口之外点击不到。 简单来说就是我们的页面都是瘦长(即高大于宽)的,而折叠屏等设…...
接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...
Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
