常见的多媒体框架(FFmpeg GStreamer DirectShow AVFoundation OpenMax)
1.FFmpeg
FFmpeg是一个非常强大的开源多媒体处理框架,它提供了一系列用于处理音频、视频和多媒体流的工具和库。它也是最流行且应用最广泛的框架!
官方网址:https://ffmpeg.org/
FFmpeg 的主要特点和功能:
- 编解码器支持: FFmpeg 支持众多音视频编解码器,包括常见的 H.264、H.265、AAC、MP3 等,也支持一些不常见的编解码器。
- 格式支持: 它支持多种多媒体格式的解析和封装,包括 AVI、MP4、MKV、FLV、MOV 等。
- 转码和处理: FFmpeg 可以进行音视频的转码、裁剪、拼接、水印添加等处理操作,使其在不同格式、分辨率和编码方式之间进行转换。
- 流媒体处理: 它支持从摄像头、文件或网络流等源接收多媒体流,并能进行实时处理和转发,用于流媒体直播和视频会议等场景。
- 滤镜和特效: FFmpeg 提供了丰富的滤镜和特效,可以实现图像处理、色彩调整、模糊、锐化等效果。
- 音频处理: 它能够进行音频的分割、合并、音量调整、混音等操作。
- 跨平台性: FFmpeg 是跨平台的,可以在 Windows、MacOS、Linux 等操作系统上运行。
- 开源和免费: FFmpeg 是完全开源的,可以免费使用,并且具有活跃的社区支持和持续的更新和改进。
1.1 安装FFmpeg
在 Ubuntu 上安装 FFmpeg 可以通过包管理器 apt
来完成。以下是在 Ubuntu 上安装 FFmpeg 的步骤:
- 更新软件包列表:
sudo apt update
- 安装 FFmpeg:
sudo apt install ffmpeg -y
安装完成后,你可以通过以下命令验证是否成功安装了 FFmpeg:
ffmpeg -version
如需安装FFmpeg拓展开发包可执行如下所示命令:
sudo apt install libavcodec-dev -y
sudo apt install libavformat-dev -y
sudo apt install libavcodec-extra -y
FFmpeg开发文档:https://ffmpeg.org/ffmpeg.html
1.2 使用命令行执行ffmpeg
转换视频格式:
ffmpeg -i input.mp4 output.avi
这个命令将输入的 MP4 文件转换为 AVI 格式。
合并视频和音频:
ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac -strict experimental output.mp4
这个命令将一个视频文件和一个音频文件合并为一个 MP4 文件,视频流不变,音频流重新编码为 AAC 格式。
调整视频大小:
ffmpeg -i input.mp4 -vf scale=1280:720 output.mp4
这个命令将输入的 MP4 文件调整为 1280x720 分辨率的输出。
改变视频帧率:
ffmpeg -i input.mp4 -r 24 output.mp4
这个命令将输入的 MP4 文件的帧率改为 24 帧每秒。
提取视频中的帧:
ffmpeg -i input.mp4 -vf "select=eq(n\,100)" -vsync vfr output.png
这个命令将从输入的 MP4 文件中提取第 100 帧,并将其保存为 PNG 图像文件。
添加水印:
ffmpeg -i input.mp4 -i test.jpg -filter_complex "overlay=10:10" output.mp4
这个命令将一个水印图像叠加到输入的 MP4 文件的左上角。
1.3 代码实现视频格式转换
C++代码实现MP4视频格式转换AVI,程序主要内容如下图所示:
1.4 FFmpeg核心库介绍
2.GStreamer
GStreamer 是一个功能强大的开源多媒体框架,用于创建、处理和播放音频和视频流。官方网址:GStreamer: open source multimedia framework
- 模块化架构: GStreamer 的设计是基于模块化的架构,可以根据需要添加或移除各种插件和元件,从而实现灵活的功能扩展和定制。
- 跨平台性: GStreamer 可以在多种操作系统上运行,包括 Linux、Windows、macOS 等。
- 丰富的插件支持: GStreamer 提供了大量的插件,用于处理各种多媒体格式、编解码器、滤镜、特效等,可以满足各种多媒体处理需求。
- 流式处理: GStreamer 支持流式处理,可以处理实时音视频流,适用于流媒体直播、视频会议等场景。
- 音视频编解码支持: 它支持多种常见的音视频编解码器,包括 H.264、H.265、AAC、MP3 等,也支持一些不常见的编解码器。
- 容器格式支持: GStreamer 支持多种多媒体容器格式的解析和封装,包括 AVI、MP4、MKV、FLV、MOV 等。
- 图形界面和命令行工具: GStreamer 提供了图形界面和命令行工具,用于配置和管理多媒体处理流程。
- 多语言支持: GStreamer 可以通过各种语言的绑定进行使用,包括 C、C++、Python、Java 等。
GStreamer的核心是基于管道(Pipeline)的概念,这意味着你可以将多个处理步骤(称为元素或Element)连接起来,以实现复杂的媒体处理任务。
2.1 安装GStreamer
-
更新软件包列表:
在终端中执行以下命令,确保系统的软件包列表是最新的:
sudo apt update
-
安装 GStreamer:
安装 GStreamer 的基本运行时库和插件。你可以根据需要选择不同的插件包,如
gstreamer1.0-plugins-base
、gstreamer1.0-plugins-good
、gstreamer1.0-plugins-bad
和gstreamer1.0-plugins-ugly
。sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio -y
这些插件包括了各种常见的音视频编解码器、文件格式支持以及其他的功能扩展。
-
安装额外的 GStreamer 插件(可选):
如果你需要更多特定功能的插件,你可以根据需要安装额外的插件包。例如,如果你需要使用 GStreamer 的 Python 绑定,可以安装
gir1.2-gst-plugins-base-1.0
包。sudo apt install gir1.2-gst-plugins-base-1.0
-
验证安装:
安装完成后,你可以通过运行以下命令来验证 GStreamer 是否正确安装:
gst-inspect-1.0 --version
这将显示 GStreamer 版本信息。
GStreamer开发文档:https://gstreamer.freedesktop.org/documentation
2.2 使用命令行执行
转换视频格式:
gst-launch-1.0 -e filesrc location=input.mp4 ! qtdemux name=demux \demux.video_0 ! queue ! decodebin ! videoconvert ! \avenc_mpeg4 ! matroskamux name=mux \demux.audio_0 ! queue ! decodebin ! audioconvert ! \audioresample ! audioconvert ! mux. \mux. ! filesink location=output.mkv
这个命令将输入的 MP4 文件转换为 MKV格式。
合并视频和音频:
gst-launch-1.0 -e filesrc location=video.mp4 ! qtdemux name=demux \
demux.video_0 ! queue ! h264parse ! mux. \
filesrc location=audio.mp3 ! decodebin ! audioconvert ! voaacenc ! aacparse ! mux. \
qtmux name=mux ! filesink location=output.mp4
这个命令将一个视频文件和一个音频文件合并为一个 MP4 文件,视频流不变,音频流重新编码为 AAC 格式。
调整视频大小:
gst-launch-1.0 filesrc location=input.mp4 ! decodebin ! videoscale ! video/x-raw,width=1280,height=720 ! videoconvert ! x264enc ! mp4mux ! filesink location=output.mp4
这个命令将输入的 MP4 文件调整为 1280x720 分辨率的输出。
改变视频帧率:
gst-launch-1.0 filesrc location=input.mp4 ! decodebin ! videorate ! video/x-raw,framerate=24/1 ! videoconvert ! x264enc ! mp4mux ! filesink location=output.mp4
这个命令将输入的 MP4 文件的帧率改为 24 帧每秒。
提取视频中的帧:
gst-launch-1.0 filesrc location=input.mp4 ! qtdemux ! decodebin ! videorate ! video/x-raw,framerate=1/1 ! videoconvert ! pngenc ! filesink location=output.png
这个命令将从输入的 MP4 文件中提取视频中的图像,并保存为 PNG 图像文件。
视频叠加文字:
gst-launch-1.0 filesrc location=input.mp4 ! decodebin ! videoconvert ! textoverlay text="Hello, World!" valignment=top halignment=left ! x264enc ! mp4mux ! filesink location=output.mp4
这个命令将从输入的 MP4 视频上叠加文字并将结果保存到输出文件中。
2.3 第一个GStreamer 应用程序
C代码实现MP4文件的播放,程序主要内容如下图所示:
编译运行程序后,可以看到程序会读取指定路径下的文件并弹出一个窗口播放视频:
$ ls
basic-tutorial input.mp4 main.c
$ ./basic-tutoria
Copy
She
2.4 创建并连接管道
C代码实现创建元素并将元素相互连接,程序主要内容如下图所示:
编译运行程序后,可以看到程序会读取指定路径下的文件并弹出一个窗口播放默认视频:
$ ls
concepts-tutorial main.c
$ ./concepts-tutorial
Copy
She
3.DirectShow
Microsoft® DirectShow® 是 Microsoft Windows® 平台上流媒体的体系结构。 DirectShow 提供多媒体流的高质量捕获和播放。 它支持多种格式,包括高级系统格式 (ASF) 、电影专家组 (MPEG) 、Audio-Video交错 (AVI) 、MPEG 音频层 3 (MP3) 和 WAV 声音文件。 它支持基于 Windows 驱动程序模型 (WDM) 或视频从数字和模拟设备捕获。 它会自动检测并使用视频和音频加速硬件(如果可用),但也支持没有加速硬件的系统。
3.1 架构
按照功能来分,Filter 大致分为三类:Source Filters、Transform Filters 和 Rendering Filters。
- Source Filters 主要负责取得数据,数据源可以是文件、因特网、或者计算机里的采集卡、数字摄像机等,然后将数据往下传输;
- Transform Fitlers 主要负责数据的格式转换、传输;
- Rendering Filtes 主要负责数据的最终去向,我们可以将数据送给声卡、显卡进行多媒体的演示,也可以输出到文件进行存储。
在 DirectShow 系统上,我们看到的,即是我们的应用程序(Application)。应用程序要按照一定的意图建立起相应的 Filter Graph,然后通过 Filter Graph Manager 来控制整个的数据处理过程。DirectShow 能在 Filter Graph 运行的时候接收到各种事件,并通过消息的方式发送到我们的应用程序。这样,就实现了应用程序与 DirectShow 系统之间的交互。
现对于面向 Windows 7 或更高版本的 DirectX,是集成在Windows SDK里,感兴趣的同学可自行尝试安装与学习。
Windows SDK下载地址:Windows SDK和模拟器存档 | Microsoft Developer
DirectShow开发文档:DirectShow - Win32 apps | Microsoft Learn
3.2 分析AVI视频播放程序
在 DirectShow 中,应用程序通过将筛选器链连接在一起来执行任何任务,以便一个筛选器的输出成为另一个筛选器的输入。 一组连接的筛选器称为 筛选器图。 例如,下图显示了用于播放 AVI 文件的筛选器图。
代码地址:如何播放文件 - Win32 apps | Microsoft Learn
代码实现AVI文件的播放,程序主要内容如下图所示:
上面的程序演示了DirectShow的基本用法,包括初始化COM库(DirectShow 库)、创建过滤器图形、播放视频文件以及资源的释放。
4.AVFoundation
AVFoundation 是苹果开发的一个全功能框架,用于在iOS、macOS、watchOS和tvOS上处理基于时间的音视频媒体。使用AVFoundation,您可以轻松播放、创建和编辑QuickTime电影和MPEG-4文件,播放HLS流,并在您的应用中构建强大的媒体功能。
它是Objective-C/Swift接口的一部分,允许开发者在详细级别上处理基于时间的音视频数据。例如,您可以使用AVFoundation来检查、创建、编辑或重新编码媒体文件。它还允许从设备获取输入流,并在实时捕捉和回放过程中操作视频。
AVFoundation 官方网址:AVFoundation Overview - Apple Developer
4.1 核心框架
Core Animation 是 iOS 和 OS X 上提供的图形渲染和动画基础架构,可用于对 App 的视图和其他视觉元素进行动画处理。使用 Core Animation,绘制动画每一帧所需的大部分工作都为您完成。您所要做的就是配置一些动画参数(例如起点和终点)并告诉 Core Animation 开始。Core Animation 将完成剩下的工作,将大部分实际绘图工作交给板载图形硬件以加速渲染。这种自动图形加速可实现高帧率和流畅的动画,而不会增加 CPU 负担并降低应用程序速度。
如果您使用AVFoundation进行开发,可以从Mac App Store下载并安装最新版本的Xcode,感兴趣的同学可自行尝试安装与学习
4.2 分析MOV视频播放程序
代码地址:AVFoundationSimplePlayer-iOS:使用 AVFoundation 播放媒体 (apple.com)
代码实现MOV文件的播放,程序主要内容如下图所示:
AVFoundation框架通过创建和配置AVPlayer
(播放器)及其关联的AVPlayerLayer
(视频图层)来播放MOV文件,实现了媒体资源的加载、管理和用户界面展示的整合。
5.OpenMAX
5.1背景
随着消费者对智能手机、音频和视频媒体播放器和游戏机等平台上的视频、音频、语音和3D等应用程序的功能改进需求的增长,多媒体硬件平台的开发步伐正在加快。一般来说,这类产品需要高性能的处理和高数据吞吐能力。因此,出现了各种解决方案,每个解决方案都旨在加快多媒体应用的速度。示例包括:
- 具有特定多媒体扩展的通用处理器
- 低级硬件加速器,
- 多种处理器架构,包括 DSP
- 专用硬件视频解码器
所有这些架构改变的主要挑战之一是开发高效的代码。尽管通常提供编译器,但很少能够从高级编程语言中挖掘整个架构的全部潜力。
结果是,应用程序的大部分内容通常是用汇编语言编写的,专门针对硬件平台。不同多媒体硬件解决方案的快速增长意味着必须针对其移植到的每个新平台重新编写和优化软件。
这种实施效率低下的后果是延迟了新产品的推出,增加了开发成本并降低了产品质量,最终在市场需求增长的时候减缓了多媒体领域的创新。
5.2 底层架构
OpenMAX AL 是多媒体应用程序(如媒体播放器)和平台媒体框架之间的接口。它允许开发应用程序的公司轻松地将其应用程序迁移到支持 OpenMAX AL 应用程序编程接口 (API) 的不同平台(客户)。
OpenMAX IL 是媒体框架(如 Android 上的 StageFright 或 MediaCodec API、Windows 上的 DirectShow、Linux 上的 FFmpeg 或 GStreamer)与一组多媒体组件(如音频或视频编解码器)之间的接口。它允许构建平台的公司(例如允许实现 MP3 播放器)轻松更改 MP3 解码器和均衡器效果等组件,并从不同供应商处为其平台购买组件。
OpenMAX DL 是物理硬件(如数字信号处理器 (DSP) 芯片、CPU、GPU 和软件(如视频编解码器和 3D 引擎)之间的接口。它允许公司轻松集成支持 OpenMAX DL 的新硬件,而无需重新优化其低级软件。
参考链接:OpenMAX AL Overview - The Khronos Group Inc
5.2.1 OpenMAX AL应用层
OpenMAX AL(Open Media Acceleration Layer)是一个用于移动设备和嵌入式系统的多媒体应用程序接口(API)。它的设计目标是提供一种统一的方式来访问移动设备上的多媒体硬件加速功能,包括音频、视频和图形处理。通过提供一致的编程接口,开发人员可以更轻松地利用设备的硬件加速功能,从而实现更高效的多媒体应用程序开发。
OpenMAX AL的主要组成部分包括:
- 音频对象:允许开发人员管理音频数据的播放、录制和处理。这包括音频解码、混音、音频效果处理等功能。
- 视频对象:提供对视频数据的处理和渲染功能,包括视频解码、视频渲染、视频效果处理等。
- 图像对象:用于处理图像数据,包括图像编解码、图像处理等功能。
- I/O对象:用于管理输入输出流,例如文件、网络流等。
OpenMAX AL通过定义一系列标准接口和功能来实现设备无关性,这使得开发人员可以编写一次代码,然后在支持OpenMAX AL的各种移动设备上运行,而无需针对特定设备进行修改。
此外,OpenMAX AL还支持异步处理,这意味着应用程序可以同时执行多个多媒体任务,从而提高了系统的性能和响应速度。
总的来说,OpenMAX AL为移动设备上的多媒体应用程序提供了一个统一的、高效的编程接口,使开发人员能够更轻松地利用设备的多媒体硬件加速功能,从而实现更好的用户体验。
参考文档:OpenMAX Application Layer 1.1 Specification (khronos.org)
5.2.2 OpenMAX IL集成层
OpenMAX IL(Integration Layer)是一种跨平台的多媒体应用程序接口标准,旨在简化多媒体应用程序的开发过程并实现跨不同硬件平台的兼容性。它由Khronos Group开发和维护,该组织也是OpenGL和Vulkan等其他图形和多媒体标准的创建者。
OpenMAX IL的设计目标是提供一个统一的接口,使开发者能够轻松地访问和控制各种硬件加速的多媒体处理功能,包括音频、视频、图像和其他多媒体数据的编解码、处理和渲染等。它为开发者提供了一组标准化的功能调用,这些调用可以用于创建和管理多媒体处理管道,从而使应用程序能够高效地利用底层硬件资源。
OpenMAX IL的主要特点和功能包括:
- 跨平台兼容性:OpenMAX IL被设计为跨不同硬件平台和操作系统的标准接口,使开发者能够编写具有良好可移植性的多媒体应用程序。
- 多媒体处理管道:OpenMAX IL提供了一种灵活的方式来构建和管理多媒体处理管道,使开发者能够将各种处理单元(例如解码器、编码器、滤镜等)组合起来以实现复杂的多媒体处理任务。
- 硬件加速:OpenMAX IL支持利用硬件加速功能来提高多媒体处理的性能和效率,包括使用GPU进行图像处理和使用DSP进行音频处理等。
- 低延迟处理:OpenMAX IL旨在实现低延迟的多媒体数据处理,使其适用于实时音视频应用程序和交互式多媒体应用程序。
- 灵活的配置和控制:OpenMAX IL提供了丰富的配置选项和控制接口,使开发者能够根据应用程序的需求进行定制和优化。
尽管OpenMAX IL提供了强大的功能和灵活性,但它也有一些限制和挑战,例如在不同平台上的实现可能存在差异,开发者需要考虑不同硬件和驱动程序的兼容性,并且对于初学者来说学习曲线可能较陡峭。然而,对于需要高性能多媒体处理的应用程序来说,OpenMAX IL仍然是一个重要的选择。
参考文档:The OpenMAX Integration Layer Specification (khronos.org)
5.2.3 OpenMAX DL开发层
OpenMAX DL(Development Layer)是OpenMAX标准的一部分,它提供了一组用于硬件加速的低级图像和信号处理功能的API。OpenMAX DL的目标是为多媒体应用程序提供一种标准化的接口,使它们能够利用硬件加速器来执行各种图像和信号处理任务,例如图像解码、编码、滤波、变换等。
OpenMAX DL的主要特点和功能包括:
- 硬件加速:OpenMAX DL旨在利用硬件加速器来执行图像和信号处理任务,以提高处理速度和效率。
- 低级API:OpenMAX DL提供了一组低级的图像和信号处理函数,开发者可以使用这些函数来执行各种处理任务,如图像解码、编码、滤波、变换等。
- 跨平台兼容性:OpenMAX DL被设计为跨不同硬件平台和操作系统的标准接口,使开发者能够编写具有良好可移植性的多媒体应用程序。
- 灵活性和定制性:OpenMAX DL提供了丰富的功能和配置选项,使开发者能够根据应用程序的需求进行定制和优化。
- 高性能:通过利用硬件加速器,OpenMAX DL能够实现高性能的图像和信号处理,适用于对处理速度要求较高的多媒体应用程序。
尽管OpenMAX DL提供了一种强大的图像和信号处理API,但它也有一些限制和挑战,例如在不同平台上的实现可能存在差异,开发者需要考虑不同硬件和驱动程序的兼容性,并且对于初学者来说学习曲线可能较陡峭。然而,对于需要高性能图像和信号处理的应用程序来说,OpenMAX DL仍然是一个重要的选择。
参考文档:omx_dl_v1_0_2 (khronos.org)
相关文章:

常见的多媒体框架(FFmpeg GStreamer DirectShow AVFoundation OpenMax)
1.FFmpeg FFmpeg是一个非常强大的开源多媒体处理框架,它提供了一系列用于处理音频、视频和多媒体流的工具和库。它也是最流行且应用最广泛的框架! 官方网址:https://ffmpeg.org/ FFmpeg 的主要特点和功能: 编解码器支持: FFmpe…...

C++异步future
🌎 C11异步futrue 文章目录: C11异步futrue future介绍 应用场景 future操作 std::async函数模版 std::packaged_task类模版 std::promise类模版 🚀future介绍 std::future是C11标准库…...
Oracle 12c 中的 CDB和PDB的启动和关闭
一、简介 Oracle 12c引入了多租户架构,允许一个容器数据库(Container Database, CDB)托管多个独立的可插拔数据库(Pluggable Database, PDB)。本文档旨在详细描述如何启动和关闭CDB及PDB。 二、容器数据库 (CDB) 2.1…...
Vue组件开发-使用 html2canvas 和 jspdf 库实现PDF文件导出 设置页面大小及方向
在 Vue 项目中实现导出 PDF 文件、调整文件页面大小和页面方向的功能,使用 html2canvas 将 HTML 内容转换为图片,再使用 jspdf 把图片添加到 PDF 文件中。以下是详细的实现步骤和代码示例: 步骤 1:安装依赖 首先,在项…...

chrome插件:网页图片高清下载
前置条件: 安装有chrome谷歌浏览器的电脑 使用步骤: 1.打开chrome扩展插件 2.点击管理扩展程序 3.加载已解压的扩展程序 4.选择对应文件夹 5.成功后会出现一个扩展小程序 6.点击对应小程序 7.输入需要访问的网址,点击扩展插件即可进行图片…...

汽车定速巡航
配备定速巡航功能的车型,一般在方向盘附近设有4~6个按键(可能共用键位)。 要设置定速巡航,不仅需要方向盘上的按键,还要油门配合。 设置的一般流程: 开关:类似步枪上的“保险”,按…...

CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测(Matlab完整源码和数据)
CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测(Matlab完整源码和数据) 目录 CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测(Matlab完整源码和数据)预测效果基本介绍 CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测一…...

WPF基础 | WPF 布局系统深度剖析:从 Grid 到 StackPanel
WPF基础 | WPF 布局系统深度剖析:从 Grid 到 StackPanel 一、前言二、Grid 布局:万能的布局王者2.1 Grid 布局基础:构建网格世界2.2 子元素定位与跨行列:布局的精细操控2.3 自适应布局:灵活应变的秘诀 三、StackPanel…...

14-6-2C++STL的list
(一)list对象的带参数构造 1.list(elem);//构造函数将n个elem拷贝给本身 #include <iostream> #include <list> using namespace std; int main() { list<int> lst(3,7); list<int>::iterator it; for(itlst.begi…...

【AI论文】Sigma:对查询、键和值进行差分缩放,以实现高效语言模型
摘要:我们推出了Sigma,这是一个专为系统领域设计的高效大型语言模型,其独特之处在于采用了包括DiffQKV注意力机制在内的新型架构,并在我们精心收集的系统领域数据上进行了预训练。DiffQKV注意力机制通过根据查询(Q&…...

私域流量池构建与转化策略:以开源链动2+1模式AI智能名片S2B2C商城小程序为例
摘要:随着互联网技术的快速发展,流量已成为企业竞争的关键资源。私域流量池,作为提升用户转化率和增强用户粘性的有效手段,正逐渐受到企业的广泛关注。本文旨在深入探讨私域流量池构建的目的、优势及其在实际应用中的策略…...

vofa++使用方法
控件区可以添加控件用来啊多样显示 点击一个控件然后右键可以选择要添加显示的数据,点all表全部显示, 点auto可以自动布局 要用控件需要选择协议,不知道协议具体格式可以点击问号看看,并且最好用printf重定义来实现 比如我要实现F…...

LogicFlow 一款流程图编辑框架
LogicFlow是什么 LogicFlow是一款流程图编辑框架,提供了一系列流程图交互、编辑所必需的功能和灵活的节点自定义、插件等拓展机制。LogicFlow支持前端自定义开发各种逻辑编排场景,如流程图、ER图、BPMN流程等。在工作审批流配置、机器人逻辑编排、无代码…...

HTML<kbd>标签
例子 在文档中将一些文本定义为键盘输入: <p>Press <kbd>Ctrl</kbd> <kbd>C</kbd> to copy text (Windows).</p> <p>Press <kbd>Cmd</kbd> <kbd>C</kbd> to copy text (Mac OS).</p>…...

PyQt6医疗多模态大语言模型(MLLM)实用系统框架构建初探(上.文章部分)
一、引言 1.1 研究背景与意义 在数字化时代,医疗行业正经历着深刻的变革,智能化技术的应用为其带来了前所未有的发展机遇。随着医疗数据的指数级增长,传统的医疗诊断和治疗方式逐渐难以满足现代医疗的需求。据统计,全球医疗数据量预计每年以 48% 的速度增长,到 2025 年将…...

150 Linux 网络编程6 ,从socket 到 epoll整理。listen函数参数再研究
一 . 只能被一个client 链接 socket例子 此例子用于socket 例子, 该例子只能用于一个客户端连接server。 不能用于多个client 连接 server socket_server_support_one_clientconnect.c /* 此例子用于socket 例子, 该例子只能用于一个客户端连接server。…...
深入浅出 SQLSugar:快速掌握高效 .NET ORM 框架
SQLSugar 是一个高效、易用的 .NET ORM 框架,支持多种数据库(如 SQL Server、MySQL、PostgreSQL 等)。它提供了丰富的功能,包括 CRUD 操作、事务管理、动态表名、多表联查等,开发者可以通过简单的链式操作实现复杂的数…...

ESP8266 NodeMCU与WS2812灯带:实现多种花样变换
在现代电子创意项目中,LED灯带的应用已经变得极为广泛。通过结合ESP8266 NodeMCU的强大处理能力和FastLED库的高效功能,我们可以轻松实现多达100种灯带变换效果。本文将详细介绍如何使用Arduino IDE编程,实现从基础到高级的灯光效果ÿ…...

MacOS安装Docker battery-historian
文章目录 需求安装battery-historian实测配置国内源相关文章 需求 分析Android电池耗电情况、唤醒、doze状态等都要用battery-historian, 在 MacOS 上安装 battery-historian,可以使用 Docker 进行安装runcare/battery-historian:latest。装完不需要做任…...

Linux的基本指令(上)
1.ls指令 语法:ls [选项] [目录或文件] 功能:对于⽬录,该命令列出该⽬录下的所有⼦⽬录与⽂件。对于⽂件,将列出⽂件名以及其他信息。 常用选项: -a 列出⽬录下的所有⽂件,包括以 . 开头的隐含⽂件。 -d 将…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...

Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...

C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...

Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

【JVM】Java虚拟机(二)——垃圾回收
目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四ÿ…...
uniapp 字符包含的相关方法
在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...