【Qt】ffmpeg解码—照片提取、视频播放▲
目录
一、图像的成像原理:
RGB成像原理:
YUV成像原理:
二、多线程
三、ffmpeg解码(照片提取)
1.准备工作
(1)在工程文件夹里面新建三个文件夹
(2)在main函数中加入这两个
(3)在要解码的多线程子线程中加入
(4)在.pro文件工程里面加入
2.注册主键
3.打开视频文件
4.获取视频信息
5.判断是否有视频流
6.查找编码器
7.打开编码器
8.读取一帧压缩数据
9.读取一帧压缩数据,解码一帧数据
四、视频播放
1.paintEvent界面重绘事件
2.普通类如何使用信号与槽
3.在子线程中发送图片信号
4.在UI主线程槽函数接收
一、图像的成像原理:
RGB 和 YUV 是两种常见的颜色空间模型
-
RGB成像原理:
RGB 即红(Red)、绿(Green)、蓝(Blue),是一种基于三原色原理的颜色空间,在显示设备(如电脑显示屏、手机屏幕等)中,每个像素点都由红、绿、蓝三个子像素组成。通过控制这三个子像素的发光强度,就可以混合出各种不同的颜色
-
YUV成像原理:
YUV 是一种将亮度和色度分离的颜色空间。其中,Y 表示亮度,它反映了图像的明亮程度;U 和 V 表示色度,用于描述颜色的色调和饱和度,它们携带了图像的颜色信息
二、多线程
因为耗时逻辑就会造成UI卡顿,卡死或则白屏,所以不能在槽函数里面做太耗时操作(文件、解码都不行),所以使用了多线程,在UI主线程中,不执行耗时逻辑,耗时逻辑放在子线程去完成
三、ffmpeg解码(照片提取)
1.准备工作
(1)在工程文件夹里面新建三个文件夹
(2)在main函数中加入这两个
(3)在要解码的多线程子线程中加入
(4)在.pro文件工程里面加入
2.初始化文件相关操作
(1)注册主键
注册所有可用的编解码器、格式和协议等组件,这是使用 FFmpeg 进行编解码操作的第一步
av_register_all();
(2)打开视频文件
为 AVFormatContext
分配内存,然后打开指定的视频文件。AVFormatContext
用于存储输入视频文件的格式信息
AVFormatContext *formatContext;
//开空间
formatContext=avformat_alloc_context();
//打开输入视频文件
int res=avformat_open_input(&formatContext,"../video/Warcraft3_End.avi",nullptr,nullptr);
if(res<0)
{
qDebug()<<"open avformat_open_input fail";
}
else {
qDebug()<<"success";
}
(3)获取视频信息
读取文件的流信息,填充 AVFormatContext
中的流信息,包括视频流、音频流等
res=avformat_find_stream_info(formatContext,nullptr);
if(res<0)
{
qDebug()<<"avformat_find_stream_info fail";
}
else {
qDebug()<<"avformat_find_stream_info success";
}
(4)判断是否有视频流
遍历所有流,找到视频流的索引。
int video_input=-1;
//nb_streams:输入视频的AVStream个数
for(int i=0;i<formatContext->nb_streams;i++)
{
/*
* streams :输入视频的AVStream []数组
* 有0或者1:0表示视频,1表示音频
* codec:编码器
* codec_type:编码的类型:
* (1)AVMEDIA_TYPE_VIDEO:表示视频类型。
(2)AVMEDIA_TYPE_AUDIO:表示音频类型。
(3)AVMEDIA_TYPE_SUBTITLE:表示字幕类型。
*/
if(formatContext->streams[i]->codec->codec_type==AVMEDIA_TYPE_VIDEO)
{
video_input=i;
break;
}
}
if(video_input==-1)
{
qDebug()<<"video not find";
}
else {
qDebug()<<formatContext->streams[video_input]->nb_frames;
qDebug()<<"video_input"<<video_input;
}
(5)查找编码器
获取视频流的编解码器上下文 AVCodecContext
,然后根据编解码器 ID 查找对应的解码器
AVCodecContext* codecContext=formatContext->streams[video_input]->codec;
//通过文件信息中编码id找到解码器
// 每种视频(音频)编解码器(例如H.264解码器)对应一个该结构体。
AVCodec* decoder=avcodec_find_decoder(codecContext->codec_id);
if(decoder==nullptr)
{
qDebug()<<"avcodec_find_decoder fail";
}
else {
qDebug()<<"avcodec_find_decoder success";
}
(6)打开编码器
使用找到的解码器打开编解码器上下文,准备进行解码操作
res=avcodec_open2(codecContext,decoder,nullptr);
if(res!=0)
{
qDebug()<<"avcodec_open2 fail";
}
else {
qDebug()<<"avcodec_open2 success";
}
3.初始化解码所需的数据结构
(1)初始化AVPacket:
//AVPacket 是 FFmpeg 中用于存储压缩数据的结构体
AVPacket* pkt;
pkt=(AVPacket*)malloc(sizeof (AVPacket));
int size=codecContext->width * codecContext->height;
res=av_new_packet(pkt,size);
if(res!=0)
{
qDebug()<<"av_new_packet fail";
}
else {
qDebug()<<"av_new_packet success";
}
(2)初始化AVFrame 用于 RGB 数据:
//********AVFrame RGB准备工作**********
//AVFrame 用于存储解码后的原始数据
AVFrame* pictureRGB;
AVFrame* picture;
picture=av_frame_alloc();
pictureRGB=av_frame_alloc();
//解码画面信息按原图信息设置
pictureRGB->width=codecContext->width;
pictureRGB->height=codecContext->height;
pictureRGB->format=codecContext->pix_fmt;//帧画面信息
//设置缓冲区
int imgByteRGB=avpicture_get_size(AV_PIX_FMT_RGB32,codecContext->width,codecContext->height);
uint8_t *bufferRGB=(uint8_t*)av_malloc(imgByteRGB* sizeof (uint8_t));
//填充缓冲区
avpicture_fill((AVPicture*)pictureRGB,bufferRGB,AV_PIX_FMT_RGB32,codecContext->width,codecContext->height);
//制定一个图像规则
//转换前的视频宽高到转换后的视频宽高
SwsContext* SwsContextRGB=sws_getContext(
codecContext->width,codecContext->height,codecContext->pix_fmt,
codecContext->width,codecContext->height,AV_PIX_FMT_RGB32,
SWS_BICUBIC,nullptr,nullptr,nullptr);
//********AVFrame准备工作完成**********
(3)初始化AVFrame 用于 YUV 数据:
this->pictureYUV=av_frame_alloc();
this->pictureYUV->width=codecContext->width;
this->pictureYUV->height=codecContext->height;
this->pictureYUV->format=codecContext->pix_fmt;//帧画面信息
this->imgByteYUV=avpicture_get_size(AV_PIX_FMT_YUV420P,
codecContext->width,codecContext->height);
this->bufferYUV=(uint8_t*)av_malloc(imgByteYUV* sizeof (uint8_t));
avpicture_fill((AVPicture*)pictureYUV,bufferYUV,AV_PIX_FMT_YUV420P,
codecContext->width,codecContext->height);
SwsContextYUV=sws_getContext(
codecContext->width,codecContext->height,codecContext->pix_fmt,
codecContext->width,codecContext->height,AV_PIX_FMT_YUV420P,
SWS_BICUBIC,nullptr,nullptr,nullptr);
4.读取和解码视频帧
int x=0;
//从输入文件读取一帧压缩数据,操作正常返回0
while(av_read_frame(formatContext,pkt)==0)
{
//判断压缩数据是否为图像压缩数据
if(pkt->stream_index==video_input)
{
//参数默认配置
int get_picture_ptr=-1;
/*解码一帧压缩:
* codecContext:AVCodecContext 包含了编解码器的上下文信息
* picture:AVFrame 用于存储解码后的视频帧数据
* get_picture_ptr:一个指向整数的指针,用于指示是否成功解码出一帧完整的视频图像
* 如果解码成功并得到了一个完整的视频帧,该指针所指向的变量会被设置为非零值
* 如果没有得到完整的帧,该变量会被设置为零
* pkt:AVPacket 用于存储压缩的视频数据包
*/
avcodec_decode_video2(codecContext,picture,&get_picture_ptr,pkt);
if(get_picture_ptr!=0)
{
//删除无效数据,转RGB存储
//picture:原图 pictureRGB:转换后的图
sws_scale(SwsContextRGB,picture->data,picture->linesize,0,picture->height,pictureRGB->data,pictureRGB->linesize);
this->img=QImage((uchar *)bufferRGB,codecContext->width,codecContext->height,QImage::Format_RGB32);
this->img.save(QString("../fileout/%1.jpg").arg(x));//保存进文件夹
// emit sendImage(this->img);
// msleep(40);//设置发送间隔时间
x++;
}
}
av_packet_unref(pkt);
}
//关闭解码器
avcodec_close(codecContext);
//释放关闭文件
avformat_close_input(&formatContext);
四、视频播放
1.paintEvent界面重绘事件
Qt UI窗口存在事件循环机制,在QWidget类中,子类需要实现这个paintEvent事件,在窗口产生显示/切换/最大化/最小化自动调用,不需要自己调用,而update函数可以手动触发paintEvent重绘事件
2.普通类如何使用信号与槽
普通类在debug文件夹中不会生成moc_开头的文件,而信号与槽的核心机制为moc
第一步:删除工程项目下debug文件夹里的全部东西
3.在子线程中发送图片信号
4.在UI主线程槽函数接收
相关文章:
【Qt】ffmpeg解码—照片提取、视频播放▲
目录 一、图像的成像原理: RGB成像原理: YUV成像原理: 二、多线程 三、ffmpeg解码(照片提取) 1.准备工作 (1)在工程文件夹里面新建三个文件夹 (2)在main函数中加…...
Springboot整合WebSocket+Redis以及微信小程序如何调用
一、 Springboot整合WebSocket 1. 引入socket依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dependency>引入依赖后需要刷新maven,Websocket的版本默认跟随S…...
HOW - 在Windows浏览器中模拟MacOS的滚动条
目录 一、原生 CSS 代码实现模拟 macOS 滚动条额外优化应用到某个特定容器 二、Antd table中的滚动条场景三、使用第三方工具/扩展 如果你想让 Windows 里的滚动条 模拟 macOS 的效果(细窄、圆角、隐藏默认轨道)。 可以使用以下几种方案: 一…...
openEuler环境下GlusterFS分布式存储集群部署指南
1.环境准备: os:openEuler 22.03 主机名 IP地址 主机用途 Rocky8192.168.121.160客户端 open-Euler1192.168.121.150节点1,提供两块6G硬盘open-Euler4192.168.121.153节点2,提供两块6G硬盘open-Euler5192.168.121.154 …...
C++学习(七)(标准库+STL(iotstream公司,日期/时间,器皿,算法,迭代器,多线程))
C 标准模板库 (STL) C 标准模板库 (STL) 是头文件的集合,提供了多种数据结构、算法和函数,以简化您的 C 编码体验。STL 的主要目的是通过提供一套现成的有用工具来节省时间并提高效率。STL 最常用的功能可…...
c高级第五天
1> 在终端提示输入一个成绩,通过shell判断该成绩的等级 [90,100] : A [80, 90) : B [70, 80) : C [60, 70) : D [0, 60) : 不及格 #!/bin/bash# 提示用户输入成绩 read -p "请输入成绩(0-100):" score# 判断成…...
Windows上使用go-ios实现iOS17自动化
前言 在Windows上运行iOS的自动化,tidevice对于iOS17以上并不支持,原因是iOS 17 引入新通信协议 RemoteXPCQUIC,改变了 XCUITest 的启动方式。 一、go-ios的安装 1、安装命令:npm i go-ios 2、安装完成后输入命令which io…...
迷你世界脚本小地图接口:Mapmark
小地图接口:Mapmark 彼得兔 更新时间: 2023-10-25 10:33:48 具体函数名及描述如下: 序号 函数名 函数描述 1 newShape(...) 新增一个形状(线,矩形,圆形) 2 deleteShape(...) 删除一个形状 3 setShapeColor(...) 设置…...
TMS320F28P550SJ9学习笔记1:CCS导入工程以及测试连接单片机仿真器
学习记录如何用 CCS导入工程以及测试连接单片机仿真器 以下为我的CCS 以及驱动库C2000ware 的版本 CCS版本: Code Composer Studio 12.8.1 C2000ware :C2000Ware_5_04_00_00 目录 CCS导入工程: 创建工程: 添加工程: C…...
为什么要提倡尽早返回(Early Return)
为什么要提倡尽早返回(Early Return) 在编程中,“尽早返回”(Early Return)是一种常被提倡的编程方式,特别是在需要提升代码可读性、减少嵌套层级、以及快速处理异常情况时。本文将讨论尽早返回的优点、应…...
Gartner发布安全运营指标构建指南
如何为安全运营指标构建坚实的基础 安全运营经理需要报告威胁检测、调查和响应计划的有效性,但难以驾驭大量潜在的 SOC 指标。本研究提供了设计针对 SOC 的指标系统的示例和实践。 主要发现 需要清晰、一致的衡量标准来向董事会成员或服务提供商等更广泛的团队传达…...
vue3:初学 vue-router 路由配置
承上一篇:nodejs:express js-mdict 作为后端,vue 3 vite 作为前端,在线查询英汉词典 安装 cnpm install vue-router -S 现在讲一讲 vue3:vue-router 路由配置 cd \js\mydict-web\src mkdir router cd router 我还…...
数据结构入门篇——什么是数据结构。
一、引入 工具是一种什么东西呢?是一种转化媒介,我们需要熟食,我们要通过用火来将生肉烤熟。在这个过程中。我们要输入一个东西——生肉,通过工具——火的加工,从而得到我们的目的产物——熟肉。 将上面的例子和红字部…...
uniapp+vue3搭建项目
工具使用: Pinia Vue 3 官方推荐的状态管理库,比 Vuex 更轻量,支持模块化,结合 persistedstate 插件可以持久化存储数据。uView-plus 专为 UniApp 设计,支持 App、小程序、H5。UnoCSS 更轻量,比 TailwindCS…...
unity大坐标抖动处理测试
第二幅图就是相机坐标是0 6360094 0的地方看见的模型,可以看见这个球体已经烂了 那么这里可以知道的是坐标太大了导致的,那么把所有物体共同偏移一下,即可得到第一幅图的效果,圆润的sphere又回来了 浮点数的计算是需要位数的&…...
CASAIM与承光电子达成深度合作,三维扫描逆向建模技术助力车灯设计与制造向数字化与智能化转型
近日,CASAIM与广州承光电子科技有限公司正式达成深度合作,CASAIM将为承光电子提供全方位的技术支持,包括高精度三维扫描设备、逆向建模软件以及定制化的技术解决方案。双方将共同组建技术团队,针对车灯设计中的难点进行攻关&#…...
C++类与对象:银行管理系统项目实战开发LeetCode每日一题
[Bank-Management-System]银行管理系统项目 以下是一个可运行的C银行账户类(支持简单的存款/取款)。后面会继续完善该项目: #include <iostream> #include <string> using namespace std;class Account{public://构造函数Accou…...
领域驱动设计:事件溯源架构简介
概述 事件溯源架构通常由3种应用设计模式组成,分别是:事件驱动(Event Driven),事件溯源(Event Source)、CQRS(读写分离)。这三种应用设计模式常见于领域驱动设计(DDD)中,但它们本身是一种应用设计的思想,不仅仅局限于DDD,每一种模式都可以单独拿出来使用。 E…...
景联文科技:以专业标注赋能AI未来,驱动智能时代的精准跃迁
在人工智能技术重塑全球产业格局的今天,高质量训练数据已成为驱动算法进化的核心燃料。作为数据智能服务领域的领军者,景联文科技深耕数据标注行业多年,以全栈式数据解决方案为核心,构建起覆盖数据采集、清洗、标注、质检及算法调…...
LeetCode 热题 100----1.两数之和
LeetCode 热题 100----1.两数之和 题目描述 我的解法 语言:js 思路就是:用双重循环去找哪两个数字相加等于target,目前的时间复杂度为O(n2),之后右优化思路再更新。...
GIT 常用命令
/ 一、环境: ssh-keygen -t rsa -C "wangxiaoerqq.com.cn" 生成本地秘钥(邮箱换成自己的邮箱) 使用cat ~/.ssh/id_rsa.pub查看秘钥 git config --global user.name "wangxiaoer" git config --global wangxiaoerqq.…...
Netty笔记13:序列化
Netty笔记1:线程模型 Netty笔记2:零拷贝 Netty笔记3:NIO编程 Netty笔记4:Epoll Netty笔记5:Netty开发实例 Netty笔记6:Netty组件 Netty笔记7:ChannelPromise通知处理 Netty笔记8…...
IntelliJ IDEA 构建项目时内存溢出问题
问题现象 在使用 IntelliJ IDEA 构建 Java 项目时,遇到了以下错误: java: java.lang.OutOfMemoryError: Java heap space java.lang.RuntimeException: java.lang.OutOfMemoryError: Java heap space这是一个典型的 Java 堆内存不足错误,表…...
Asp.Net Core WebAPI开发教程(入门)
一、Asp.Net Core WebAPI项目创建 二、Asp.Net Core WebApi/Mvc路由定义 二、Asp.Net Core WebAPI 请求案例 Asp.Net WebApi Get请求整理(一) Asp.Net WebApi Post请求整理(一) Asp.Net WebApi Action命名中已‘Get’开头问题 …...
golang 内存对齐和填充规则
内存对齐和填充规则 对齐要求:每个数据类型的起始地址必须是其大小的倍数。 int8(1字节):不需要对齐。int16(2字节):起始地址必须是2的倍数。int32(4字节):起…...
MySQL执行更新SQL流程
目录 1 redo log 2 binlog 3 Update执行逻辑 1 redo log InnoDB引擎特有日志MySQL的WAL(Writing Ahead logging)技术,预写式日志,先写日志再写磁盘当有一条记录需要更新时,InnoDB引擎就会先把记录写在redo log日志中&a…...
【时序预测】在线学习:算法选择(从线性模型到深度学习解析)
——如何为动态时序预测匹配最佳增量学习策略? 引言:在线学习的核心价值与挑战 在动态时序预测场景中(如实时交通预测、能源消耗监控),数据以流式(Streaming)形式持续生成,且潜在的…...
CISC架构
基本概念 CISC 架构是一种计算机处理器设计架构,其设计理念与 RISC 架构相对。CISC 架构强调通过使用大量功能复杂的指令来增强计算机的处理能力,试图让计算机用一条指令就能完成较为复杂的操作,以减少程序中指令的总数,提高程序…...
Vue前端开发- Vant之Card组件
业务组件是Vant的一大特点,特别是针对移动端商城开发的业务,有许多组件可以直接运用到通用商城的开发中,代码也十分简单,大大加快了应用的开发速度。 在众多的业务组件中,Card 卡片、Coupon 优惠券选择器和SubmitBar …...
React Refs:深入理解与最佳实践
React Refs:深入理解与最佳实践 引言 在React中,refs是用于访问DOM元素或组件实例的一种方式。与类组件的ref属性不同,函数组件的ref需要使用useRef钩子。正确使用refs可以大大提升React应用的性能和可维护性。本文将深入探讨React Refs的原…...
Linux——基本指令
我们今天学习Linux最基础的指令 ls 指令 语法: ls [选项] [⽬录或⽂件] 功能:对于⽬录,该命令列出该⽬录下的所有⼦⽬录与⽂件。对于⽂件,将列出⽂件名以及其他信 息。 命令中的选项,一次可以传递多个 ,…...
【MySQL系列文章】Linux环境下安装部署MySQL
前言 本次安装部署主要针对Linux环境进行安装部署操作,系统位数64 getconf LONG_BIT 64MySQL版本:v5.7.38 一、下载MySQL MySQL下载地址:MySQL :: Download MySQL Community Server (Archived Versions) 二、上传MySQL压缩包到Linuxx环境,…...
【mysql】表信息无法获取与插入数据错误
一:无法获取表信息 处理流程分析 初始问题:get_room_member_list 函数调用后,未能收到预期的群成员列表回调 Error: not all arguments converted during string formatting 127.0.0.1 - - [26/Feb/2025 11:55:32] "POST / HTTP/1.1&qu…...
七、Redis 内存管理详解:模型、优化策略(LRU/LFU、对象共享)
Redis 内存管理详解:模型、优化策略(LRU/LFU、对象共享) Redis 以高性能和低延迟著称,但作为基于内存的数据库,内存管理是其核心问题之一。本文将深入解析 Redis 的内存模型、内存优化策略(包括 LRU/LFU 机制、对象共享等),帮助开发者提高 Redis 的存储效率和性能。 1…...
如何调试Linux内核?
通过创建一个最小的根文件系统,并使用QEMU和GDB进行调试。 1.准备工作环境 确保系统上安装了所有必要的工具和依赖项。 sudo apt-get update //更新一下软件包 sudo apt-get install build-essential git libncurses-dev bison flex libssl-dev qemu-system-x…...
Pywinauto Recorder: 将Windows操作转化为Python脚本,高效简易地实现操作自动化
Pywinauto Recorder是一个强大的UI自动化工具,它能够记录用户在Windows应用程序上的操作,并将其转换为可执行的Python脚本。这意味着你可以轻松地将重复性的GUI操作自动化,提高效率并降低人为错误。 什么是Pywinauto Recorder? …...
【AI大模型】DeepSeek + Kimi 高效制作PPT实战详解
目录 一、前言 二、传统 PPT 制作问题 2.1 传统方式制作 PPT 2.2 AI 大模型辅助制作 PPT 2.3 适用场景对比分析 2.4 最佳实践与推荐 三、DeepSeek Kimi 高效制作PPT操作实践 3.1 Kimi 简介 3.2 DeepSeek Kimi 制作PPT优势 3.2.1 DeepSeek 优势 3.2.2 Kimi 制作PPT优…...
Spring统一格式返回
目录 一:统一结果返回 1:统一结果返回写法 2:String类型报错问题 解决方法 二:统一异常返回 统一异常返回写法 三:总结 同志们,今天咱来讲一讲统一格式返回啊,也是好久没有讲过统一格式返…...
【商城实战(2)】商城架构设计:从底层逻辑到技术实现
【商城实战】专栏重磅来袭!这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建,运用 uniapp、Element Plus、SpringBoot 搭建商城框架,到用户、商品、订单等核心模块开发,再到性能优化、安全加固、多端适配…...
Netty笔记6:Netty组件
Netty笔记1:线程模型 Netty笔记2:零拷贝 Netty笔记3:NIO编程 Netty笔记4:Epoll Netty笔记5:Netty开发实例 Netty笔记6:Netty组件 Netty笔记7:ChannelPromise通知处理 Netty笔记8…...
大模型学习笔记------Llama 3模型架构简介
大模型学习笔记------Llama 3模型架构 1、整体网络结构2、主要创新点3、其他关键改进点 LLaMA(Large Language Model Meta AI)系列模型是Meta发布并开源,分别在2023年2月、2023年7月和2024年4月发布了经历了LLaMA 1、LLaMA 2和LLaMA 3模型。本文只讲相对比较成熟、性…...
DeepSeek本地接口调用(Ollama)
前言 上篇博文,我们通过Ollama搭建了本地的DeepSeek模型,本文主要是方便开发人员,如何通过代码或工具,通过API接口调用本地deepSeek模型 前文:DeepSeek-R1本地搭建_deepseek 本地部署-CSDN博客 注:本文不仅…...
C语言:51单片机 基础知识
一、单片机概述 单片机的组成及其特点 单片机是指在一块芯片上集成了CPU、ROM、RAM、定时器/计数器和多种I/O接口电路等,具有一定规模的微型计算机。 特点: 1、单片机的存储器以ROM、RAM严格分工。 2、采用面向控制的指令系统。 3、单片机的I/O口引脚通…...
DAIR-V2X-R数据集服务器下载
【官方github链接】https://github.com/ylwhxht/V2X-R 点击并登录 选择并点击下载 浏览器弹窗,右键选择复制下载链接 ------------------------------------服务器下载----------------------------------------- 登录服务器,选在要下载的文件夹复制路…...
Kali CentOs 7代理
工具v2↓ kali_IP段v2端口例子<1> kali_IP段v2端口例子<2> CentOs 7 //编辑配置文件 vi /etc/profile//在该配置文件的最后添加代理配置 export http_proxyhttp://ip:port //代理服务器ip地址和端口号 export https_proxyhttp://ip:port //代理服务器ip地址和…...
LabVIEW虚拟频谱分析仪
在电子技术快速发展的今天,频谱分析已成为信号优化与故障诊断的核心手段。传统频谱分析仪虽功能强大,但价格高昂且体积笨重,难以满足现场调试或移动场景的需求。 基于LabVIEW开发的虚拟频谱分析仪通过软件替代硬件功能,显著降低成…...
商城源码的框架
商城源码的框架通常是基于某种Web开发框架或者电子商务平台来构建的。以下是一些常见的商城源码框架: WooCommerce:基于WordPress的电子商务插件,适用于小型到中型的在线商店。 Magento:一个功能强大和灵活的开源电子商务平台&am…...
关联封号率降70%!2025最新IP隔离方案实操手册
高效运营安全防护,跨境卖家必看的风险规避指南 跨境账号管理的核心挑战:关联封号风险激增 2024年,随着全球电商平台对账号合规的审查日益严苛,“关联封号”已成为跨境卖家最头疼的问题之一。无论是同一IP登录多账号、员工操作失误…...
Qwen2-Audio系列学习笔记
模型介绍 GitHub - QwenLM/Qwen2-Audio: The official repo of Qwen2-Audio chat & pretrained large audio language model proposed by Alibaba Cloud. https://arxiv.org/pdf/2407.10759 https://zhuanlan.zhihu.com/p/712987238 We introduce the latest progress o…...
高频 SQL 50 题(基础版)_1341. 电影评分
高频 SQL 50 题(基础版)_1341. 电影评分 思路 思路 (select Users.name results from Users left join MovieRating on Users.user_id MovieRating.user_id group by(Users.name) order by count(MovieRating.movie_id) desc,Users.name asc limit 1) u…...