Android音视频多媒体开源库基础大全
从事音视频开发工作,需要了解哪些常见的开源库,从应用到底软系统,整理了九大类,这里一次帮你总结完。
包含了应用层的MediaRecorder、surfaceView,以及常见音视频处理库FFmpeg和OpenCV,还有视频渲染和音频加速和混音库,以及关系数据库。
(1)分类应用
因为处理阶段不同,可以分为图像采集、图像处理、图形编解码、图像文件、图像渲染、图像播放;
根据处理的文件类型不同,分为音频、视频、流媒体;
根据使用开源库的编码层级,可以分为在驱动层和应用层部署。
(2)什么是开源库?
开源库是一组函数、方法或工具的集合,旨在封装特定的功能。
开源库的应用流程:开发者根据需要选择型使用库中的函数和功能,并集成到自己的开发程序中。
音视频开源库,提供了丰富的接口调用,且多数都可适配在不同的平台,专注于提供特定的功能,方便进行集成和扩展,提高多媒体工程师开发的效率,降低了方案设计的门槛。
(3)如何使用这些开源库?
无论是多媒体的算法工程师,还是系统以及应用工程师,都会使用到不同的开源库。
多媒体工程师常用的开源库包含了安卓的类库和组件库、以及媒体库和库集合等。
安卓类库一般被应用工程师引用,覆盖采集,编解码和播放的流程;
显示开发工程师通过安卓组件库实现预览显示;
算法工程师进行音视频处理和编解码使用媒体库和库集合;
底软工程师做嵌入式系统支撑以及嵌入式数据库等;
系统软件工程师把其他所有调用串联起来按照方案设计达成最终的功能。
1. 安卓多媒体类库
简单的音视频录制和编解码以及播放需求,可以选择MediaRecorder、MediaCodec或MediaPlayer。
框架名称 | 特点 | 应用场景 |
---|---|---|
MediaRecorder | 多种格式音视频录制;可设置视频源和输出格式等参数 | 简单快速集成音视频录制应用; |
MediaCodec | 音视频编解码;灵活配置编解码参数 | 视频编辑和转码;视频通话、视频会议等实时音视频通信;视频压缩、格式转换等媒体文件处理。 |
MediaPlayer | 多种播放控制接口;且支持网络流媒体播放; | 集成如本地视频文件播放和在线视频播放等频播放功能的应用; |
音视频采集
视频采集用Camera API类。
audioRecord应用管理音频资源录制声音,把麦克风录入的音频数据中得到原始的一帧帧PCM音频数据。
MediaRecorder:Android提供的音视频录制类,通过API实现控制录制流程。
编解码
使用MediaCodec 类进行编码压缩,视频压缩为H.264,音频压缩为aac,使用MediaMuxer 将音视频合成为MP4。
MediaCodec是一个Codec,通过硬件加速解码和编码。它为芯片厂商和应用开发者搭建了一个统一接口。
MediaCodec类用于使用一些基本的多媒体编解码器,它是Android基本的多媒体支持基础架构的一部分,通常和 MediaExtractor
, MediaSync
, MediaMuxer
, MediaCrypto
, MediaDrm
, Image
, Surface
, AudioTrack
一起使用。
MediaCodec的数据流分为input流(输入待解码或者待编码的数据)和output流(输出的已解码或者已编码的数据),并通过异步的方式处理两路数据流,直到手动释放output缓冲区,MediaCodec才将数据处理完毕
MediaCodec可以处理具体的视频流,主要有这几个方法:
- getInputBuffers:获取需要编码数据的输入流队列,返回的是一个ByteBuffer数组
- queueInputBuffer:输入流入队列
- dequeueInputBuffer:从输入流队列中取数据进行编码操作
- getOutputBuffers:获取编解码之后的数据输出流队列,返回的是一个ByteBuffer数组
- dequeueOutputBuffer:从输出队列中取出编码操作之后的数据
- releaseOutputBuffer:处理完成,释放ByteBuffer数据
播放
应用开发者使用Java API完成播放调用MediaPlayer和AudioTrack。
MediaPlayer类是Android SDK中的音频/视频播放类,提供接口进行媒体控制,可以播放MP3、AAC等多种格式的声音文件。
AudioTrack类可以完成Android平台上音频数据的输出任务,AudioTrack只能播放已经解码的PCM 流(wav格式的音频文件)。
2.安卓预览组件类库
多媒体显示通过安卓组件类ImageView和surfaceView绘制图像。
SurfaceView和ImageView都是Android框架中的类,都属于Android UI组件的一部分,用于被动更新的视频渲染,可以在Surface上绘制内容。
SurfaceView:
特点:独立绘制线程、双缓冲机制、性能渲染。
SurfaceView是一个特殊的视图组件,用于在独立的线程中绘制复杂的图形或视频内容。
SurfaceView允许在非UI线程中进行绘制,适合处理复杂的图形渲染,比如游戏、视频播放、相机预览等需要高性能渲染的场景。
SurfaceView使用双缓冲技术,可以减少绘制时的闪烁问题。
ImageView:
特点:显示静态图像、支持缩放和裁剪、单易用。
ImageView则是一个用于显示图像的视图组件,支持从资源文件、网络或本地文件加载静态图片,也可以通过属性设置控制图片的缩放。
3.音视频处理FFmpeg
FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源多媒体处理库集合,包含了音频和视频处理库、编码器、解码器、转码器等多种工具。
FFmpeg命令格式
ffmpeg -i [输入文件名/地址] [参数选项] -f [格式] [输出文件/地址]
-i
:指定输入文件或流。[参数选项]
:定义转换参数,如编解码器、比特率、尺寸等。-f
:指定输出格式。[输出文件/地址]
:指定输出文件或推送地址。
FFmpeg的库集合构成
libavformat:用于各种音视频封装格式的生成和解析,包括获取解码所需信息以生成解码上下文结构和读取音视频帧等功能;
AVIOContext的定义的结构体源码(位于libavformat/avio.h):
libavcodec:用于各种类型声音/图像编解码;使用 hwaccel(硬件加速)API 来发现并利用可用的硬件编解码器。
AVCodec的定义的结构体源码(位于libavcodec/avcodec.h):
libavutil:包含一些公共的工具函数;
libswscale:用于视频场景比例缩放、色彩映射转换;
libpostproc:用于后期效果处理;
ffmpeg:该项目提供的一个工具,可用于格式转换、解码或电视卡即时编码等;
ffsever:一个 HTTP 多媒体即时广播串流服务器;
ffplay:是一个简单的播放器,使用ffmpeg 库解析和解码,通过SDL显示;
ffprobe:是ffmpeg命令行工具中用来查看媒体文件格式的工具。
ffprobe shy.mp4
ffplay:以FFmpeg框架为基础,外加渲染音视频的库libSDL构建的媒体文件播放器。
ffplay pm.mp4
4.视频处理OpenCV
OpenCV在Android音视频开发中提供了丰富的计算机视觉和图像处理功能。
计算机视觉库,提供图像处理、特征提取等函数,源码开放且支持多平台部署。
常用于:音视频处理、图像处理以及及其学习等。
(1)音视频处理包括视频分析、播放和编辑,以及音视频同步处理、音频特征提取等功能。
例如:通过对视频帧的分析,可以实现运动检测、目标跟踪、人脸识别等高级功能;使用OpenCV的VideoCapture
类可以加载和播放视频文件,同时可以对视频帧进行实时处理,如颜色转换、缩放等。
(2)图像处理包括图像滤波、边缘检测、图像分割以及图像转换等。
(3)自OpenCV 3.3版本开始,加入了对深度神经网络(DNN)的支持,使得在Android平台上实现基于深度学习的图像处理和识别成为可能。
5.编解码x264x265
libx264和openh264都是基于H.264编码标准的开源实现,提供了高效的H.264编码能力,适用于本地音视频播放中的编码需求。
libx264采用C语言实现,支持跨平台;openh264由思科开源的H.264编码库也支持跨平台,专注实时视频编码,以轻量级库形式提供。
x265是新一代视频编码器HEVC/H.265的开源实现,提供高效的HEVC编码能力,适用于高分辨率视频的处理和传输。
6.视频渲染OpenGL ES
OpenGL ES(Open Graphics Library for Embedded Systems)是跨平台的图形渲染API规范,在Android Libraries层就有支持使用,提供底层图形操作接口。
OpenGL ES API来支持高性能的2D和3D图形,是跨平台的图像API,使用OpenGL渲染视频画面。
GLSurfaceView
在Android框架里的类GLSurfaceView 和GLSurfaceView.Renderer可以使用OpenGL ES API创建和操作图形 。
GLSurfaceView 是个视图类,使用OpenGL API来绘制和操作图形对象。通过创建一个SurfaceView的实例并添加渲染器来使用这个类。
捕捉触摸屏的事件,则扩展GLSurfaceView以实现触摸监听器。
GLSurfaceView.Renderer定义了在GLSurfaceView中绘制图形所需的方法。
GPUimage
GPUimage是基于OpenGL的图像处理库,封装滤镜和渲染管线,适用于移动端和嵌入式场景。
GPUimage框架核心是充分利用GPU的能力,通过OpenGL ES进行美颜、模糊处理、水印、滤镜库等图像处理。
7.音频加速OpenSL ES
OpenSL ES (Open Sound Library for Embedded Systems)是无授权费、跨平台、针对嵌入式系统优化的硬件音频加速API。
库的位置在Android NDK的platforms文件夹。
OpenSL ES 是基于NDK也就是c语言的底层开发音频的公开API,基于对象和接口的方式实现,通过使用它能够做到标准化, 高性能,低响应时间的音频功能实现方法。
OpenSL ES 的开发流程:创建接口对象、设置混音器、创建播放器(录音器)、设置缓冲队列和回调函数、设置播放状态、启动回调函数。
8.音频混音OpenAL
OpenAL(Open Audio Library)是一个跨平台的音频API,以库形式处理3D音频和多声道音频的播放和混音。OpenAL的API风格模仿自OpenGL。
OpenAL的主要特点包括跨平台兼容性、高性能和低延迟。它支持多种音频格式,如PCM、WAV、MP3等,并提供了混音、回放、录制等功能。
9.关系数据库SQLite
SQLite是一个开源的轻量级嵌入式关系数据库,以独立库形式集成,无需额外服务支持。没有独立进程,和应用程序共生共存。
数据库的应用
在多媒体开发中,因为多媒体都是以文件的形式存在,所以离不开数据库的管理。在嵌入式开发中,主要使用SQLite进行播放列表管理和音视频文件信息存储。
用户创建的播放列表、播放历史以及最近播放记录等都可以通过SQLite数据库进行管理。应用可以创建相应的表来存储这些播放信息,并提供增删改查等操作。
对于存储在设备上的音频文件,SQLite可以用来存储文件的元数据信息,以便快速检索和展示这些信息给用户。
在android开发中的使用方法
首先使用SQLiteDatabase
的openOrCreateDatabase
方法打开或创建数据库,然后使用execSQL
方法执行SQL语句来创建表,再根据根据需求定义相应的数据模型,之后就可以通过insert
方法插入数据或者使用query方法来执行查询操作,最后使用close方法关闭数据库。
// 打开或创建数据库
SQLiteDatabase db = getApplicationContext().openOrCreateDatabase("mydatabase.db", MODE_PRIVATE, null); // 创建用户表
db.execSQL("CREATE TABLE IF NOT EXISTS users (_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER)"); // 插入数据
ContentValues values = new ContentValues();
values.put("name", "John Doe");
values.put("age", 30);
db.insert("users", null, values); // 关闭数据库连接
db.close();
总结
本文根据博主工作经验,汇总了系统从上到下,作为多媒体开发相关的岗位中,工程师们都会用到的哪些开源库。
掌握这些,有助于更好的分析问题以及查漏补缺,成为多媒体领域的全栈工程师。
本文只做简单的梳理,篇幅有限,且一些库并非博主专长不能做到面面俱到。
如有学习需要可以参考其他详细资料资料,本系列整理完之后我会把相关的学习资料也汇总分享。
部分库会结合相关的经验,再根据实际问题进行详细补充。
创作不易,本来以为之前做音视频多媒体技术栈梳理时已经有草稿,真的开始这个系列,确实有些难度,希望对你有所帮助。
最近关注量持续增加,咬牙也要坚持,觉得有用,欢迎点赞支持。
相关文章:
Android音视频多媒体开源库基础大全
从事音视频开发工作,需要了解哪些常见的开源库,从应用到底软系统,整理了九大类,这里一次帮你总结完。 包含了应用层的MediaRecorder、surfaceView,以及常见音视频处理库FFmpeg和OpenCV,还有视频渲染和音频…...
ManiWAV:通过野外的音频-视频数据学习机器人操作
24年6月来自斯坦福大学、哥伦比亚大学和 TRI 的论文“ManiWAV: Learning Robot Manipulation from In-the-Wild Audio-Visual Data”。 音频信号通过接触为机器人交互和物体属性提供丰富的信息。这些信息可以简化接触丰富的机器人操作技能学习,尤其是当视觉信息本身…...
传感器研习社:Swift Navigation与意法半导体(STMicroelectronics)合作 共同推出端到端GNSS汽车自动驾驶解决方案
自动驾驶系统单纯依赖感知传感器进行定位在遇到恶劣天气或缺乏车道标线的道路场景时很容易失效。此外,由于激光雷达(LiDAR)、视觉等传感器的成本高昂以及将众多不同组件整合为统一系统的复杂性,都可能增加产品研发成本或延迟产品上…...
Java 二维数组元素降序排序(非冒泡排序)
说明:每次比较出最大值后,把最大值设置为最小值-1,再次比较该数组; 创建Object b[][] new Object[N][2];来存储String和Int两种类型数据到同一个数组里 package com.MyJava;import java.util.Scanner;public class Test {public…...
梦回杭州...
她对我说,烟雨中的西湖更别有情趣,我也怀着对‘人间天堂’的憧憬踏上了向往之旅。第一次亲密接触没有感觉中那么好,现在想起来是那时的人和心情都没能安静下来,去慢慢品味它的美。 六下杭州,亲历每一片风景,…...
Spring Boot整合Apache BookKeeper教程
精心整理了最新的面试资料和简历模板,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 Spring Boot整合Apache BookKeeper教程 1. 简介 Apache BookKeeper 是一个高性能、持久化的分布式日志存储系统,适用于需要强一致性和高吞吐量的…...
C++项目——内存池
C项目——内存池 前置知识 std::allocator c中所有stl容器都有自己的allocator类用于分配和回收空间,例如vector类中push_back函数的实现方式: template <class T> void Vector<T>::push_back(const T& t) { // are we out of space…...
【设计模式】SOLID 设计原则概述
SOLID 是面向对象设计中的五大原则,不管什么面向对象的语言, 这个准则都很重要,如果你没听说过,赶紧先学一下。它可以提高代码的可维护性、可扩展性和可读性,使代码更加健壮、易于测试和扩展。SOLID 代表以下五个设计原…...
Deepseek-r1:14b+ScraperAPI实现联网本地大模型回答
文章目录 前言一、Deekseek本地部署二、SerpAPI1.什么是SerpAPI?2.如何使用SerpAPI进行Web搜索 三、实现Deepseek-r1:14bScraperAPI实现联网本地大模型回答1. Code 前言 我需要对本地的Deepseek-r1:14b进行提问,我发现它对于实时的问题,或者…...
DHCP工作原理
DHCP报文类型 DHCP Discover 客户端广播发送DHCP discover报文消息, 客户端通过UDP68端口向网络上发送DHCP discover数据包(包含MAC地址和计算机名等信息).源为0.0.0.0, 目的为255.255.255.255 discover等待时间默认为1秒, 1秒内没有得到回应, 客户机会将这一广播包重新发送4次…...
JVM常见面试总结
JVM(Java虚拟机)是Java程序运行的核心,掌握JVM相关知识对于Java开发者至关重要。以下是JVM常见的面试问题总结: 1. JVM内存模型 问题:JVM的内存结构分为哪些部分? 答案: 方法区(Met…...
博客系统自动化测试报告
1.项目背景 基于SSM框架实现的个人博客系统,现有登录注销页面,博客列表页,博客内容页,博客编辑页面。登录即可查看自己曾经发表的博客,通过使用Selenium定位web元素、对获取到的元素进行操作等,对博客系统…...
如何选择合适的 AI 模型?(开源 vs 商业 API,应用场景分析)
1. 引言 在 AI 迅猛发展的今天,各类 AI 模型层出不穷,从开源模型(如 DeepSeek、Llama、Qwen)到商业 API(如 OpenAI 的 ChatGPT、Anthropic 的 Claude、Google Gemini),每种方案都有其优势与适用…...
目标检测20年(二)
没有看过(一)的可以看看笔者这篇文章: 目标检测20年(一)-CSDN博客 目录 3.2 目标检测数据集和指标 3.2.1 数据集 3.2.1.1 Pascal VOC 3.2.1.2 ILSVRC 3.2.1.3 MS-COCO 3.2.1..4 Open Images 3.2.2 指标 3.3 目…...
【linux】统信操作系统修改默认编辑模式从nano改为vim
统信操作系统修改默认编辑模式从nano改为vim 适用命令update-alternatives --config editor rootuos-PC:~# update-alternatives --config editor 有 3 个候选项可用于替换 editor (提供 /usr/bin/editor)。选择 路径 优先级 状态 ---------------------…...
在Fedora-Workstation-Live-x86_64-41-1.4中使用最新版本firefox和腾讯翻译插件让英文网页显示中文翻译
在Fedora-Workstation-Live-x86_64-41-1.4中使用最新版本firefox和腾讯翻译插件让英文网页显示中文翻译 应用——系统工具——终端 suozhangfedora:~$ rpm -aq | grep firefox firefox-131.0.2-1.fc41.x86_64 firefox-langpacks-131.0.2-1.fc41.x86_64 fedora41系统自身安装有f…...
集成学习(下):Stacking集成方法
一、Stacking的元学习革命 1.1 概念 Stacking(堆叠法) 是一种集成学习技术,通过组合多个基学习器(base learner)的预测结果,并利用一个元模型(meta-model)进行二次训练,…...
知道自己鼠标在某个竖直平面上的经纬度信息在这个竖直的平面上的实时坐标
鼠标放上去就开启map.on(mars3d.EventType.mouseMove,结合以下方法实现 callback: function (e) {// 经纬度const mpt LngLatPoint.fromCartesian(e.cartesian)const ptNew proj4Trans([mpt.lng, mpt.lat], "EPSG:4326", CRS.CGCS2000_GK_Zone_3)const …...
【技术简析】触觉智能RK3506 Linux星闪网关开发板:重新定义工业物联新标杆
在工业智能化与物联网深度融合的今天,深圳触觉智能推出首款搭载瑞芯微RK3506芯片的Linux星闪网关开发板,为大家技术解析。 RK3506-国产芯的硬核实力 作为瑞芯微2024年第四季度推出的入门级工业芯片平台,RK3506以三核Cortex-A7(1.…...
GLB文件介绍
GLB文件是由支持glTF(GL Transmission Format)标准的软件或工具生成的。glTF是一种开放的3D模型传输格式,而GLB是其二进制版本,通常用于嵌入纹理和模型数据。以下是常见的生成GLB文件的软件和工具: 1. 3D建模软件 • …...
树莓集团数字产业布局:商业智慧的多维呈现
树莓集团在数字产业的布局展现其前瞻性的商业智慧,通过多维度的战略部署,构建一个 শক্তিশালী且富有活力的数字生态系统。 全国产业园布局:构建数字产业生态链 树莓集团通过在全国范围内建设产业园,有效整合资源&#x…...
“智改数转”新风口,物联网如何重构制造业竞争力?
一、政策背景 为深化制造业智能化改造、数字化转型、网络化联接,江苏省制定了《江苏省深化制造业智能化改造数字化转型网络化联接三年行动计划(2025-2027年)》,提出到2027年,全省制造业企业设备更新、工艺…...
代码随想录第55期训练营第八天|LeetCode344.反转字符串、541.反转字符串II、卡码网:54.替换数字
前言 这是我参加的第二次训练营!!!爽!这次我将更加细致的写清每一道难题,不仅是提升自己,也希望我自己的写的文章对读者有一定的帮助! 打卡代码随想录算法训练营第55期第八天(づ&a…...
c++ XML库用法
在C中,处理XML文件的读写操作可以通过多种库来实现。以下是几个常用且简洁的库: 1. TinyXML-2 简介: TinyXML-2 是一个轻量级的C XML解析库,易于使用且性能良好。特点: 简单易用,API直观。内存占用小,适合嵌入…...
力扣算法Hot100——128. 最长连续序列
题目要求时间复杂度为O(n),因此不能使用两次循环匹配。 首先使用 HashSet 去重,并且 HashSet 查找一个数的复杂度为O(1)外循环还是遍历set集合,里面一重循环需要添加判断,这样才不会达到O( n 2 n^2 n2)判断是否进入最长序列查找循…...
spring-tx笔记
编程式事务与声明式事务的理解 补充:什么是事务? 事务是一个重要概念,尤其在数据库管理系统中。事务是指一组操作。,这些操作要么全部成功执行,要么全部不执行,确保数据的一致性和完整性 编程式事务 编…...
VulnHub-Web-Machine-N7通关攻略
一、信息收集 第一步:确定靶机IP为192.168.0.107 第二步:扫描后台及开放端口 第三步:进行敏感目录及文件扫描 http://192.168.0.107/index.html (CODE:200|SIZE:1620) http://192.168.0.107/server-status (CODE:403|SIZ…...
【PCIe 总线及设备入门学习专栏 3.1 -- PCIe 中为何只有 TLP 会被 Switch 和 RC 进行路由?】
文章目录 Overview为什么 DLLP 不需要路由呢?总结Overview 这里介绍些为什么在 PCIe 中只有 TLP(事务层数据包)会被 Switch 和 Root Complex(RC) 路由,而 DLLP(数据链路层数据包)和 Ordered Set 不会被路由。这是因为 TLP 起始于源端口的事务层,结束于目的端口的事务…...
3月21号
今天写了一些题: P1149 [NOIP 2008 提高组] 火柴棒等式 题目描述 给你 n 根火柴棍,你可以拼出多少个形如 ABC 的等式?等式中的 A、B、C 是用火柴棍拼出的整数(若该数非零,则最高位不能是 0)。用火柴棍拼数字 0∼9 的…...
以高斯(GaussDB) 为例, 在cmd 命令行连接数据,操作数据库,关闭数据库的详细步骤
以下是使用 Windows 命令行(cmd) 操作 GaussDB(以 GaussDB(for openGauss) 社区版为例) 的详细步骤,涵盖 连接数据库、基本操作、关闭数据库 的全流程: 1. 环境准备 前提条件: 安装 GaussDB&a…...
Spring Boot 3 新特性实战:从理论到实践
引言 Spring Boot 自发布以来,凭借其简洁的配置和强大的功能,迅速成为 Java 开发者的首选框架。随着 Spring Boot 3 的发布,开发者们迎来了更多令人兴奋的新特性。本文将深入探讨 Spring Boot 3 的新特性,并通过实战示例展示如何…...
在 Linux 系统中,路径(Path)用于定位文件或目录的位置。路径分为两种类型:相对路径和绝对路径。它们的核心区别在于路径的起点不同
1. 绝对路径(Absolute Path) 定义: 从根目录 / 开始的完整路径,无论当前在哪个目录下,绝对路径都能唯一指向目标位置。 特点: 以 / 开头。明确且唯一,与当前所在目录无关。 示例: …...
AI 时代的通信新范式:MCP(模块化通信协议)的优势与应用
文章目录 引言 1. 传统 API 的局限性2. MCP(模块化通信协议)的核心优势2.1 更好的模块化支持2.2 低耦合性与灵活性2.3 高性能数据传输2.4 适配分布式 AI 计算架构 3. AI 时代的 MCP 应用案例4. 结论:AI 时代的通信新范式 引言 在 AI 驱动的现…...
Jmeter旧版本如何下载
1.Jmeter最新版本下载位置 https://jmeter.apache.org/download_jmeter.cgi2.Jmeter旧版本下载位置 https://archive.apache.org/dist/jmeter/binaries稳定版本:5.4.1...
XXE漏洞
一、XXE漏洞概述 1. 定义 XXE(XML External Entity Injection)即 XML外部实体注入漏洞,攻击者通过构造恶意XML数据,利用XML解析器的外部实体加载功能,实现 文件读取、内网探测、拒绝服务(DoS)…...
麒麟操作系统安装人大金仓数据库
如果你想拥有你从未拥有过的东西,那么你必须去做你从未做过的事情 在当前数字化转型和信息安全备受重视的背景下,众多公司积极推进国产化改造进程。在操作系统领域,统信、open 欧拉、中标麒麟、银河麒麟等国产操作系统崭露头角,逐…...
嵌入式芯片与系统设计竞赛,值得参加吗?如何选题?需要学什么?怎么准备?
2025年全国大学生嵌入式芯片与系统设计竞赛已经正式启动,3月10日大赛通知正式下发,3月10日-19日各赛道的选题也陆续公布,4月25日大赛报名截止,感兴趣的同学可以及时关注! 大赛报名通知: 大赛通知丨2025年嵌…...
dfs刷题排列问题 + 子集问题 + 组和问题总结
文章目录 一、排列问题全排列II题解代码 优美的排列题解代码 二、子集问题字母大小写全排列题解代码 找出所有子集的异或总和再求和题解代码 三、组合问题电话号码的字母组合题解代码 括号生成题解代码 组合题解代码 目标和题解代码 组合总和题解代码 总结 一、排列问题 全排列…...
Win上安装Linux(虚拟机版)
目录 1、下载虚拟机Vmware Fusion 2、linux镜像文件下载(redhat版) 3、redhat镜像安装 4、第一次启动linux系统设置 1、下载虚拟机Vmware Fusion 下载地址:Vmware下载链接 2、linux镜像文件下载(redhat版) 官网…...
从零开发数据可视化
一、可视化模版展示 二、知识及素材准备 div css 布局flex布局Less原生js jquery 的使用rem适配echarts基础 相关js、images、font百度网盘下载链接: 通过百度网盘分享的文件:素材1 链接: https://pan.baidu.com/s/1vmZHbhykcvfLzzQT5USr8w?pwdwjx9…...
访问者模式
访问者(Visitor)模式属于行为型模式的一种。 访问者模式主要用于分离算法和对象结构,从而在不修改原有对象的情况下扩展新的操作。它适用于数据结构相对稳定,而操作(行为)容易变化的场景。 访问者模式允许…...
字符指针的三道例题+算法改进
目录 一.杨氏矩阵 1.初级 2.想把下标带回来 二.字符串左旋 算法改进 三.判断是否为字符串旋转结果 算法改进 四. 3个字符函数 1.strcat 2.strncat 3.strstr 一.杨氏矩阵 数字矩阵,每行从左到右递增,每列从上到下递增,编写程序在矩…...
zephyr-中国跨国并购数据(1997-2024.3.8)
Zephyr专注于提供关于跨国并购、合资和投资的数据。本次分享的Zephyr中国跨国并购数据,涵盖了从1997年到2024年3月8日的并购金额、交易类型、交易状态等详细交易记录,可为研究者分析并购趋势与模式、绩效等提供数据支持。 一、数据简介 数据名称&#x…...
UNIX网络编程笔记:套接字
套接字 什么是套接字(Socket)? 套接字(Socket) 是网络编程中的核心概念,可以理解为一种通信端点,用于实现不同设备之间的数据交换。它类似于现实中的“插座”,为应用程序提供了一套…...
协议-CAN-CANopen
是什么? 汽车工程师的总线协议为什么? 1980年代初期,由于没有可满足汽车工程师的总线协议,人们开始开发新的串行总线在底特律举行SAE会议上CAN总线诞生,称之为Automotive Serial Controller Area Network怎么做? 核心本质 两根线上特殊电平的特殊协议张嘴显性电平‘0’,…...
星越L_ 雨刷使用功能讲解
目录 1.向下拨动 2,向上拨动 3.调节雨刷的灵敏度 4.再次向上拨动 5.再向上 6.向内侧拨动 7.后雨刷开启 8.向外侧拨动 9.更换雨刷 1.向下拨动 雨刷单次工作 2,向上拨动 自动雨刷开启 3.调节雨刷的灵敏度 转动滚轮调节雨刷的灵敏度...
关于FastAPI框架的面试题及答案解析
FastAPl是一个现代、快速(高性能)的Web框架,用于构建API,基于Python3.7+的类型提示功能。它由Python开发者SebastianRamirez创建,并且使用了Starlette作为其核心组件以及Pydantic进行数据验证。 文章目录 基础篇1. FastAPI的核心优势是什么?2. 如何定义一个GET请求路由?…...
[7-01-03].SpringBoot3集成MinIo
MinIO学习大纲 一、Spingboot整合MinIo 第1步:搭建SpringBoot项目: 第2步:引入minio依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi&q…...
一个KADB测试实践
测试结果 本文档描述xxxx测试中6个典型测试场景的测试结果及背景,旨在对不同数据量,不同存储方式,不同优化器三者的组合优化进行探索,进而为未来的类似测试提供组合优化参考。 数据插入(500万) 5进程批量…...
dockerSDK-Go语言实现
前情提要 本文基于开发一个在线代码运行平台的项目需求上,所以需要挂载目录以达到获得执行文件的目的。 步骤1 首先在docker-compose 文件中,当前容器一定要跟宿主机的套接字进行挂载 version: 3.8 services: code-runner-api: build: context: . d…...