【AVRCP】服务发现互操作性:CT 与 TG 的 SDP 协议契约解析
目录
一、服务发现的核心目标:能力画像对齐
二、控制器(CT)服务记录:控制能力的声明
2.1 必选字段:角色与协议的刚性契约
2.1.1 服务类标识(Service Class ID List)
2.1.2 协议描述列表(Protocol Descriptor List)
2.1.3 蓝牙配置文件描述(Bluetooth Profile Descriptor List)
2.1.4 支持的功能特性(Supported Features)
2.2 条件字段:浏览支持的开关(C1 条件)
2.2.1 附加协议描述列表(Additional Protocol Descriptor List)
2.2.2 配置逻辑
2.3 可选字段:设备标识与厂商信息
2.4 版本兼容性:1.4 vs 1.6 的契约差异
2.5 关键实现规则
2.6 示例:CT服务记录配置
2.7 开发者注意事项
三、目标端(TG)服务记录解析
3.1 必选字段(Mandatory, M)
3.1.1 服务类标识(Service Class ID List)
3.1.2 协议描述列表(Protocol Descriptor List)
3.1.3 蓝牙配置文件描述(Bluetooth Profile Descriptor List)
3.1.4 支持的功能特性(Supported Features)
3.2 条件必选字段(Conditional, C1/C2)
3.2.1 附加协议描述列表(Additional Protocol Descriptor List, C1)
3.2.2 Cover Art协议栈(Protocol Descriptor List #1, C2)
3.3 可选字段(Optional, O)
3.4 关键实现规则
3.5 TG与CT服务记录对比
3.6 示例:TG服务记录配置
3.7 开发者注意事项
四、实际应用场景示例
五、总结
六、参考资料
在蓝牙音视频远程控制协议(AVRCP)中,服务发现(Service Discovery Protocol, SDP)是设备间建立通信的关键环节。通过SDP,控制器(Controller, CT)与目标设备(Target, TG)能够交换服务能力信息,确保功能兼容性。本文基于AVRCP规范中的服务记录表(Table 8.1与Table 8.2),深入解析CT与TG的服务发现机制,并探讨其互操作性设计逻辑。
一、服务发现的核心目标:能力画像对齐
AVRCP 的 SDP 记录本质是设备的「数字名片」,CT 通过它回答「我能控制什么」,TG 回答「我支持什么」。服务记录通过属性-值对定义,核心字段包括:
-
服务类(Service Class ID):声明角色(CT 为
Controller,TG 为Target) -
协议栈(Protocol Descriptor):指定 AVCTP 通道(控制 / 浏览)的 L2CAP PSM
-
功能标志(Supported Features):枚举支持的 AVRCP 特性(如浏览、封面艺术)
二、控制器(CT)服务记录:控制能力的声明
CT(控制端,如手机、遥控器)通过 SDP 服务记录声明 「我能控制什么样的 TG」,而非自身功能。
核心目标:告知 TG「我的控制协议版本、期望的 TG 能力」,确保连接前的能力对齐。
2.1 必选字段:角色与协议的刚性契约
2.1.1 服务类标识(Service Class ID List)

-
作用:声明设备支持的服务类型。
-
必选字段:是(M)。
-
结构:
-
Service Class #0:
UUID = A/V Remote Control兼容旧 TG(如 2016 年前的车载音响)。 -
Service Class #1:
UUID = A/V Remote Control Controller明确 CT 角色,新 TG 优先识别。
-
开发红线:
-
必须同时声明新旧服务类,缺一将导致部分 TG 无法识别(如仅支持旧类的车载无法连接新 CT)。
-
AVCTP 版本必须为 0x0104(当前唯一标准化版本),否则 TG 可能拒绝连接。
2.1.2 协议描述列表(Protocol Descriptor List)
定义设备通信所需的协议栈层级,包含L2CAP、AVCTP等协议参数。

-
必选字段:是(M)。
-
协议层级:
-
L2CAP层:
-
UUID = L2CAP 基础传输协议。
-
参数 #0:
PSM = AVCTP(Uint16类型),PSM(Protocol/Service Multiplexer):标识逻辑通道类型。 指定逻辑通道用于AVCTP控制命令传输。
-
-
AVCTP层:
-
UUID = AVCTP 音视频控制传输协议。
-
参数 #0:
Version = 0x0104(Uint16类型) 对应AVCTP 1.4版本。
-
-
2.1.3 蓝牙配置文件描述(Bluetooth Profile Descriptor List)

-
必选字段:是(M)。
-
结构:
-
Profile #0:
UUID = A/V Remote Control标识遵循AVRCP规范。 -
参数 #0:
Version = 0x0106(Uint16类型) 对应AVRCP 1.6版本。
-
2.1.4 支持的功能特性(Supported Features)

-
必选字段:是(M)。
-
类型:16位无符号整数(Uint16),通过位标志声明功能。
-
位定义:
| Bit位 | 功能描述 | 说明 |
| 0 | Category 1(基础播放控制) | 必须支持(如播放/暂停) |
| 1 | Category 2(音量调节) | 可选 |
| 2 | Category 3(设备信息查询) | 可选 |
| 3 | Category 4(设备状态查询) | 可选 |
| 6 | 支持浏览(Browsing) | 需启用附加协议描述列表(C1) |
| 7 | 支持Cover Art元数据获取 | 如专辑封面属性(GetImageProperties) |
| 8 | 支持Cover Art图像获取(GetImage) | 需动态分配OBEX通道(C2) |
| 9 | 支持关联缩略图获取(GetLinkedThumbnail) | 依赖Bit8支持 |
-
保留位:Bit4-5、Bit10-15标记为RFA(Reserved for Future Addition),必须置0。
2.2 条件字段:浏览支持的开关(C1 条件)
| 触发条件 | 字段名 | 值规范 | 状态 | 典型场景 |
| Bit6=1(支持浏览) | 附加协议描述符列表 | L2CAP PSM=0x0022(浏览通道) | C1 | CT 期望 TG 支持曲目浏览(如车载获取手机歌单) |
| AVCTP 浏览通道版本 | 0x0104(与控制通道一致) | C1 | 确保浏览协议版本兼容性 |
2.2.1 附加协议描述列表(Additional Protocol Descriptor List)

-
条件必选字段:当
Supported Features的Bit6(支持浏览)设为1时必选(C1)。 -
协议层级:
-
L2CAP层:
-
UUID = L2CAP
-
参数 #0:
PSM = AVCTP_Browsing专用通道用于媒体文件系统浏览。
-
-
AVCTP层:
-
UUID = AVCTP
-
参数 #0:
Version = 0x0104保持与主通道版本一致。
-
-
2.2.2 配置逻辑
if (SupportedFeatures.Bit6 == 1) {必须包含浏览通道协议描述符;else 禁止包含;
}
错误案例:某手机声明 Bit6=1 但未配置浏览通道,导致车载 TG 无法响应 Browse 命令。
互操作性设计:通过分层协议描述,设备可动态协商多通道共存,满足不同场景需求(如控制命令与媒体浏览分离)。
2.3 可选字段:设备标识与厂商信息

| 字段名 | 类型 | 示例值 | 作用 |
| Provider Name | 字符串 | "Xiaomi" | 厂商名称,用于设备识别(如车载显示手机品牌) |
| Service Name | 字符串 | "Phone Controller" | 服务名称,厂商自定义(非强制,但建议设置以提升用户体验) |
最佳实践:
-
Provider Name(显示名称):建议与设备蓝牙名称一致,避免用户混淆。
-
Service Name(服务名称):字符串类型,可体现角色(如「AV Remote Controller」),增强可读性。
2.4 版本兼容性:1.4 vs 1.6 的契约差异
| 版本 | 关键差异点 | 影响范围 |
| 1.4 | 无分组导航、封面艺术细分功能 | 旧 TG 仅支持基础控制 |
| 1.6 | 新增 Bit4(Player Settings)、Bit5(Group Navigation) | 新 TG 支持 EQ 设置、多播放组管理 |
开发建议:CT 统一声明 0x0106(1.6 版),向下兼容旧 TG(仅忽略新增位)。
2.5 关键实现规则
-
功能依赖关系:
-
若声明支持浏览功能(Bit6=1),必须包含
Additional Protocol Descriptor List(C1)。 -
Cover Art功能(Bit7-9)需依赖动态分配的OBEX通道(C2)。
-
-
分类控制逻辑:
-
Supported Features中声明的Category(Bit0-3)表示CT希望控制的TG能力范围,不要求CT自身支持所有强制命令。 例如:CT声明支持Category 2(音量控制),但实际可能仅支持静音功能。
-
2.6 示例:CT服务记录配置
Service Record:
- Service Class ID List:- UUID 0x110E (A/V Remote Control)- UUID 0x110C (A/V Remote Control Controller)
- Protocol Descriptor List:- L2CAP(PSM=AVCTP)- AVCTP(Version=1.4)
- Additional Protocol Descriptor List (if Bit6=1):- L2CAP(PSM=AVCTP_Browsing)- AVCTP(Version=1.4)
- Profile Descriptor List:- AVRCP v1.6
- Supported Features: 0x0141 (二进制 0000 0101 0000 0001)- Bit0=1(Category1)- Bit6=1(支持浏览)- Bit8=1(支持Cover Art图像获取)
- Provider Name: "AudioTech"
- Service Name: "Smart Controller"
Air log报文示例:

2.7 开发者注意事项
-
位标志校验:实现时需检查功能依赖(如Bit6与C1的关联性)。
-
动态通道分配:Cover Art需动态分配L2CAP PSM,避免端口冲突。
-
兼容性测试:确保与不同TG设备的Category声明兼容,即使CT未完全实现相关命令。
三、目标端(TG)服务记录解析
在AVRCP里,目标端(TG)服务记录是设备展示自身能力的关键。通过这些记录,控制端(CT)能了解 TG 所支持的功能和协议,从而建立有效的通信。
TG服务记录同样遵循SDP规范,但角色定位与功能声明与CT存在显著差异。
3.1 必选字段(Mandatory, M)
所有TG设备必须包含以下字段,无论功能支持情况如何。
3.1.1 服务类标识(Service Class ID List)

-
作用:明确设备为被控端(Target)角色。
-
必选字段:是(M)。
-
结构:
-
Service Class #0:
UUID = A/V Remote Control Target标识设备为TG角色,区别于CT的Controller标识。
-
3.1.2 协议描述列表(Protocol Descriptor List)

定义TG通信的协议栈,基础结构与CT一致,但附加通道存在差异:
-
必选字段:是(M)。
-
基础协议层级:
-
L2CAP层:
PSM=AVCTP(同CT)。 -
AVCTP层:
Version=0x0104(AVCTP 1.4,与CT一致)。
-
3.1.3 蓝牙配置文件描述(Bluetooth Profile Descriptor List)

-
必选字段:是(M)。
-
结构:
-
Profile #0:
UUID = A/V Remote Control(同CT)。 -
参数 #0:
Version = 0x0106(AVRCP 1.6,与CT一致)。
-
3.1.4 支持的功能特性(Supported Features)

-
必选字段:是(M)。
通过16位标志位(Uint16)声明功能,按支持情况分类如下:
①基础控制分类(Category)
| Bit位 | 功能描述 | 依赖条件 | 实现要求 |
| 0 | Category 1(播放控制) | 无 | TG必须实现所有强制播放命令。 |
| 1 | Category 2(音量控制) | 无 | 必须实现如SetVolume等命令。 |
| 2 | Category 3(设备信息) | 无 | 必须实现如GetDeviceInfo。 |
| 3 | Category 4(设备状态) | 无 | 必须实现如GetPlayStatus。 |
②高级功能(功能位,对比CT):
| Bit位 | 功能描述 | 触发条件 | 实现要求 | 与CT差异 |
| 4 | 播放器应用设置(如均衡器) | Bit0=1(必须支持Category1) | 需实现播放器参数设置命令。 | TG独有,CT无此位定义 |
| 5 | 分组导航(如播放列表切换) | Bit0=1 | 需实现分组切换命令。 | TG独有 |
| 6 | 支持浏览(虚拟文件系统) | 实际支持文件系统浏览 | 需实现浏览协议栈(C1)。 | 触发条件不同(CT无Category依赖) |
| 7 | 支持多播放器应用 | 无依赖 | 需管理多播放器实例。 | TG独有 |
| 8 | 支持Cover Art(专辑封面) | 需实现OBEX协议栈(C2) | 需动态分配PSM并传输图像。 | 同CT但实现方式不同(需OBEX) |
-
关键规则:
-
Bit6(浏览支持):仅当TG实际支持"媒体播放器虚拟文件系统"浏览时置1,与Category无关。
-
Bit4-5:若设置,必须同时设置Bit0(Category1支持),确保基础控制能力。
-
③保留位(RFA)
-
Bit9-15:保留位,必须置0。
3.2 条件必选字段(Conditional, C1/C2)
根据设备支持的功能,动态包含以下字段。
3.2.1 附加协议描述列表(Additional Protocol Descriptor List, C1)

-
触发条件:
-
支持 Category 1(播放控制) 或 Category 3(设备信息查询),或
-
Supported Features中 Bit6(支持浏览) 置1。
-
-
协议层级:
-
Protocol #0 (L2CAP层):
PSM = AVCTP_Browsing(浏览专用通道)。 -
Protocol #1 (AVCTP层):
Version = 0x0104(AVCTP 1.4)。
-
3.2.2 Cover Art协议栈(Protocol Descriptor List #1, C2)

-
触发条件:
Supported Features中 Bit8(支持Cover Art) 置1。 -
协议层级:
-
Protocol #0 (L2CAP层): 动态分配PSM(用于Cover Art数据传输)。
-
Protocol #1 (OBEX层):
UUID = OBEX(图像传输协议)。
-
3.3 可选字段(Optional, O)

可选择性包含的字段,不影响核心功能:
-
Provider Name:设备制造商名称(字符串类型)。
-
Service Name:自定义服务名称(字符串类型)。
3.4 关键实现规则
-
功能完整性要求:TG必须实现声明Category的所有强制命令。 例如:若声明支持Category2(音量控制),必须实现全部相关强制指令(如SetVolume)。
-
条件性协议栈:
-
C1:当TG支持Category1或3,或声明Bit6=1时,必须包含浏览通道协议描述。
-
C2:若支持Cover Art(Bit8=1),需动态分配PSM并声明OBEX协议栈。
-
-
Cover Art实现差异:TG使用OBEX协议传输图像数据,而CT通过AVCTP获取元数据(如
GetImageProperties)。 体现TG作为数据源的主动传输角色。
3.5 TG与CT服务记录对比
| 特性 | TG | CT |
| 服务类标识 | A/V Remote Control Target | A/V Remote Control Controller |
| Supported Features | 包含播放器设置、分组导航等TG专属功能位 | 包含Cover Art元数据获取等CT专属功能位 |
| 协议扩展 | 使用OBEX传输Cover Art图像 | 无OBEX依赖 |
| 功能完整性 | 必须实现声明Category的全部强制命令 | 仅声明期望控制的Category,无需完全实现 |
3.6 示例:TG服务记录配置
Service Record:
- Service Class ID List:- UUID 0x110C (A/V Remote Control Target)
- Protocol Descriptor List:- L2CAP(PSM=AVCTP)- AVCTP(Version=1.4)
- Additional Protocol Descriptor List (C1触发):- L2CAP(PSM=AVCTP_Browsing)- AVCTP(Version=1.4)
- Protocol Descriptor List #1 (C2触发):- L2CAP(PSM=0x1001) // 动态分配- OBEX
- Profile Descriptor List:- AVRCP v1.6
- Supported Features: 0x01C1 (二进制 0000 0111 0000 0001)- Bit0=1(Category1)- Bit6=1(支持浏览)- Bit7=1(支持多播放器)- Bit8=1(支持Cover Art)
- Provider Name: "MediaPlayer Corp"
- Service Name: "Car Audio System"
Air log报文示例:

3.7 开发者注意事项
-
严格功能实现:TG必须完整实现声明Category的所有强制命令,否则会导致控制失败。
-
动态PSM管理:Cover Art通道的PSM需动态分配并确保唯一性,防止端口冲突。
-
OBEX协议集成:需实现OBEX协议栈以支持Cover Art图像传输,包括连接建立、数据分片等逻辑。
-
虚拟文件系统要求:浏览功能(Bit6=1)需实现"Media Player Virtual Filesystem"结构,如文件夹层级、文件属性等。
-
依赖关系校验:
-
Bit4和Bit5需检查Bit0是否已置1。
-
C1触发需同时检查Category支持和Bit6状态。
-
四、实际应用场景示例
手机(CT)与车载音响(TG)的连接
-
服务发现阶段:手机通过SDP查询车载音响的服务记录,确认其支持AVRCP 1.6、Category 1(播放控制)及Cover Art。
-
协议通道建立:
-
默认通道(PSM=AVCTP)用于传输播放/暂停指令。
-
动态分配Cover Art通道,通过OBEX获取专辑封面。
-
-
功能交互:若车载音响支持浏览(Bit6=1),手机可进一步访问其媒体库。
五、总结
AVRCP的服务发现机制通过标准化的服务记录表,实现了设备角色(CT/TG)、协议版本、功能特性的透明协商。其设计充分考虑了扩展性(如位掩码定义功能)与兼容性(版本号控制),为蓝牙音视频设备的互操作性提供了坚实基础。开发者需深入理解服务记录的字段含义及条件约束,以确保设备在复杂场景下的可靠交互。
六、参考资料
Advanced Audio Distribution Profile, Version 1.4 or later
Assigned Numbers | Bluetooth® Technology Website
相关文章:
【AVRCP】服务发现互操作性:CT 与 TG 的 SDP 协议契约解析
目录 一、服务发现的核心目标:能力画像对齐 二、控制器(CT)服务记录:控制能力的声明 2.1 必选字段:角色与协议的刚性契约 2.1.1 服务类标识(Service Class ID List) 2.1.2 协议描述列表&am…...
MySQL:数据库基础
数据库基础 1.什么是数据库?2.为什么要学习数据库?3.主流的数据库(了解)4.服务器,数据库,表之间的关系5.数据的逻辑存储6.MYSQL架构7.存储引擎 1.什么是数据库? 数据库(Database,简称DB)&#x…...
市场热点复盘20240319
以下是对当前市场热点板块的分析总结,按逻辑分类如下: 一、机器人产业链核心标的 1. 减速器与核心部件 襄阳轴承:直接受益人形机器人减速器轴承需求,技术国内领先。金帝股份:聚焦机器人手指关节谐波减速机保持架&am…...
深入 Linux 声卡驱动开发:核心问题与实战解析
1. 字符设备驱动如何为声卡提供操作接口? 问题背景 在 Linux 系统中,声卡被抽象为字符设备。如何通过代码让应用程序能够访问声卡的录音和播放功能? 核心答案 1.1 字符设备驱动的核心结构 Linux 字符设备驱动通过 file_operations 结构体定…...
鸿蒙下载文件保存到手机本地公共文件夹下、将本地的沙箱目录文件,保存到公共目录,鸿蒙picker save保存文件为空(0字节)的问题
1、首先将下载好的文件,保存到本地目录,这个目录是用户看不到的; 2、然后通过picker的save保存文件,这个picker,它只是获取公共目录uri用的 3、当picker有回调时,将公共目录的uri获取之后,把下…...
OpenNJet动态API设置accessLog开关,颠覆传统运维工作模式
OpenNJet OpenNJet 应用引擎是高性能、轻量级的WEB应用与代理软件。作为云原生服务网格的数据平面,NJet具备动态配置加载、主动式健康检测、集群高可用、声明式API等多种强大功能。通过CoPliot副驾驶服务框架,在隔离控制面和数据面的情况下实现了高可扩…...
案例5_4: 6位数码管轮播0-9【静态显示】
文章目录 文章介绍效果图提示代码(不完整) 文章介绍 5.1.2 数码管静态显示应用举例 要求: 1、仿真图同案例5_3 2、代码参考案例5_3和案例5_2 效果图 提示代码(不完整) #include<reg52.h> // 头文件#define uch…...
navicat忘记已经连接过的数据库密码的操作步骤
第一步: 点击文件-》导出连接 第二步:选中具体的数据库,且勾选左下角的记住密码 第三步:打开刚刚导出的文件,找到对应加密后的密码 第四步:复制密码到工具点击查看密码 注:参考文章链接附…...
Qt窗口坐标体系
坐标系:以左上角为原点(0,0),X向右增加,Y向下增加 对于嵌套窗口,其坐标是相对于父窗口来说的 例如: 通过move方法实现...
DeepSeek写打台球手机小游戏
DeepSeek写打台球手机小游戏 提问 根据提的要求,让DeepSeek整理的需求,进行提问,内容如下: 请生成一个包含以下功能的可运行移动端打台球小游戏H5文件: 要求 可以重新开始游戏 可以暂停游戏 有白球和其他颜色的球&am…...
VR大空间多人互动方案,VR大空间融合AI行为预测的动捕技术
在数字科技迅猛发展的今天,VR大空间技术正逐步成为各行业探索沉浸式体验的重要方向。从企业培训、线上展览到社交元宇宙,VR大空间的应用范围不断拓展。而在这个过程中,多人实时交互成为核心需求,它不仅关乎沉浸感的提升࿰…...
十四、OSG学习笔记-事件响应
上一章节 十三、OSG学习笔记-osgDB文件读写-CSDN博客https://blog.csdn.net/weixin_36323170/article/details/146165712 本章节代码: OsgStudy/EventHandle CuiQingCheng/OsgStudy - 码云 - 开源中国https://gitee.com/cuiqingcheng/osg-study/tree/master/Osg…...
JS逆向_腾讯点选_VMP补环境
1.接口分析 1.cap_union_prehandle 说明:图片、jsvmp GET QueryString:{aid: xxxxxx //网站在腾讯登记的idprotocol: httpsaccver: 1showtype: popupua: //ua atob后的结果noheader: 1fb: 1aged: 0enableAged: 0enableDarkMode: 0grayscale: 1clientype: 2cap_cd: uid: lang:…...
【MySQL数据库】多表查询(笛卡尔积现象,联合查询、内连接、左外连接、右外连接、子查询)-通过练习快速掌握法
在DQL的基础查询中,我们已经学过了多表查询的一种:联合查询(union)。本文我们将系统的讲解多表查询。 笛卡尔积现象 首先,我们想要查询emp表和stu表两个表,按照我们之前的知识栈,我们直接使用…...
爬虫案例-爬取某狗音乐
文章目录 1、爬取代码2、效果图1、爬取代码 import time import requests import hashlib import jsonpath import osurl = "https://wwwapi.kugou.com/play/songinfo"#伪造请求头 header= {"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64…...
Android第四次面试总结(基础算法篇)
一、反转链表 // 定义链表节点类 class ListNode {// 节点存储的值int val;// 指向下一个节点的引用ListNode next;// 构造函数,用于初始化节点的值ListNode(int x) { val x; } }class Solution {// 反转链表的方法public ListNode reverseList(ListNode head) {/…...
DAPO-Decoupled Clip and Dynamic sAmpling Policy Optimization
论文地址:https://dapo-sia.github.io/static/pdf/dapo_paper.pdf 代码地址:https://github.com/volcengine/verl/tree/gm-tyx/puffin/main/recipe/dapo 数据:https://huggingface.co/datasets/BytedTsinghua-SIA/DAPO-Math-17k 1. 背景与动机…...
每日一题——买卖股票的最佳时机
买卖股票的最佳时机 问题描述示例示例 1示例 2 提示 问题分析难点分析 算法设计思路 代码实现复杂度分析测试用例测试用例 1测试用例 2测试用例 3 总结 问题描述 给定一个数组 prices,其中第 i 个元素 prices[i] 表示一支给定股票在第 i 天的价格。你可以选择某一天…...
数组模拟邻接表 #图论
文章目录 为什么要用数组来模拟邻接表存储思路遍历思路 树是特殊的图,因此邻接表可以存储图和树两种数据结构。 为什么要用数组来模拟邻接表 在算法设计当中,利用数组来代替结构体模拟各种数据结构会更加简单。 存储思路 给定如下数据,我们可以构造如…...
如何实现一个分布式单例对象?什么场景需要分布式单例?
单例模式确保一个类在同一个进程中只有一个实例,并提供一个全局访问点。这意味着无论在哪里调用该类的实例化方法,返回的都是同一个对象实例。 在分布式系统中,无论是单台机器多个实例,还是多台机器多个实例,每个实例…...
Elasticsearch8.17 集群重启操作
一、全集群重启步骤 1. 禁用分片分配 在关闭数据节点前,需禁用副本分片的分配,避免不必要的 I/O 操作。通过以下命令将分片分配限制为仅主分片: resp = client.cluster.put_settings(persistent={"cluster.routing.allocation.enable": "primaries"}…...
VBA常见的知识都有哪些,让AI编写的VBA经常 报错,所以VBA的基础还是要学习的
掌握这些能够大大的提高VBA的编写效率,欢迎来到涛涛聊AI。 1. 异常处理 Cleanup:是VBScript的错误处理标签,用于标记程序执行失败或退出时需要执行的清理操作(如关闭文件、释放对象)。这段代码会在遇到错误或用户取消操作时跳转…...
dify重磅升级:从0.15.3安全升级1.1.0新手避坑指南
Docker Compose 部署 备份自定义的 docker-compose YAML 文件(可选) cd docker cp docker-compose.yaml docker-compose.yaml.-$(date +%Y-%m-%d-%H-%M).bak从 main 分支获取最新代码 git checkout main git pull origin main停止服务,命令,请在 docker 目录下执行...
NLP高频面试题(六)——decoder-only、encoder-only和encoder-decoder的区别与联系
一、基本概念与代表模型 1. Encoder-only 架构 Encoder-only 架构最具代表性的模型是 BERT。BERT 使用 masked language modeling(MLM)进行预训练,即随机遮蔽部分输入词汇,让模型预测被遮蔽的词汇。由于这种架构能够同时看到输入…...
DeepSeek(8):结合Kimi-PPT助手一键生成演示报告
1 生成内容 在Deepseek中生成内容: 帮我创建年度计划,描述《智能枕头》产品的如何在全国销售,计划切分到每个月。从而让我们的老板和团队对报告充满信息。输出的内容我需要放到ppt中进行展示。 使用Deepseek R1模型,如下&#x…...
【MySQL】MySQL如何存储元数据?
目录 1.数据字典的作用 2. MySQL 8.0 之前的数据字典 3. MySQL 8.0 及之后的数据字典 4.MySQL 8 中的事务数据字典的特征 5.数据字典的序列化 6. .sdi文件的作用: 7..sdi的存储方式 在 MySQL 中,元数据(Metadata) 是描述数…...
《基于自适应正负样本对比学习的特征提取框架》-核心公式提炼简洁版 2022年neural networks
论文源地址 以下是从文档中提取的关于“基于对比学习的特征提取框架(CL-FEFA)”中正负样本对比学习实现的技术细节,包括详细的数学公式、特征提取过程以及特征表示方式的说明。 1. 正负样本的定义与构造 在CL-FEFA框架中,正负样…...
8.4《同一直线上二力的合成》
教会什么:合力与分力、同一直线上二力的合成 培养什么:实验抓共同点为突破口 课标: (二)运动和相互作用 2.2 机械运动和力 2.2.4 能用示意图描述力。会测量力的大小。了解同一直线上的二力合成。 零、导入 提问: 在前面我们探究了物体处于匀速直线运动/静止状态时,即处于…...
用ASCII字符转化图片
代码 from PIL import Image# 定义 ASCII 字符集,从最暗到最亮 ASCII_CHARS "%#*-:. "def resize_image(image, new_width100):width, height image.sizeratio height / widthnew_height int(new_width * ratio)resized_image image.resize((new_wi…...
zookeepernacoskafka之间的联系
一、ZooKeeper与Kafka的协同工作原理 1. 核心关系:Kafka对ZooKeeper的依赖 在Kafka 2.8版本之前,ZooKeeper是Kafka集群的“大脑”,负责管理集群元数据、协调节点状态和故障恢复。两者的协同主要通过以下关键机制实现: Broker注册…...
