用于元数据传输的 MTP 设备扩展

[与此页面关联的功能(Windows 媒体播放器 SDK)是旧版功能。 它已被 MediaPlayer 取代。 MediaPlayer 已针对Windows 10和Windows 11进行了优化。 如果可能,Microsoft 强烈建议新代码使用 MediaPlayer 而不是 Windows 媒体播放器 SDK。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]

媒体传输协议 (MTP) 是为可移植媒体设备设计的协议。 此协议的主要用途是提供用于在计算机和便携式媒体设备之间交换数据的通用协议。 这包括接收和发送媒体对象以及枚举设备的内容和功能。

MTP 使用持久性唯一对象标识符 (PUOID) 来唯一标识数字媒体项 (以及) 存储在设备上的其他对象。 在交换有关支持 MTP 的设备上发生的更改的信息时,设备和Windows 媒体播放器使用 PUOID 来标识哪些对象已更改。

作为 Windows 媒体播放器 SDK 的一部分安装的名为 wmpdevices.h 的头文件定义了支持Windows 媒体播放器设备扩展所需的结构和常量。

对于要通过 Windows 媒体播放器 MTP 设备扩展集识别为支持元数据传输的设备,必须在 DeviceInfo 数据集中包含以下信息。 (有关此数据集的详细信息,请参阅 MTP 规范的第 4.6.1 部分。)

数据集字段 字段顺序 数据类型
VendorExtensionID 2 UINT32 0x00000006
VendorExtensionVersion 3 UINT16 0x0064 (100)
VendorExtensionDesc 4 字符串 “microsoft.com/WMPPD: 10.0”

下表提供了有关加速元数据传输的 MTP 操作的详细信息。

说明
操作代码 0x9201
操作参数 1 设备在上一个会话期间提供的事务 ID。 对于第一个会话,此值为零。
操作参数 2 起始索引。 首次调用会话时,此值始终为零。 在同一同步会话中的后续调用中,此值增加前一个响应数据中已修改项和已删除项的计数之和。
操作参数 3 0x10000。 此常量在 wmpdevices.h 中定义,是可在响应中返回的最大 PUOID 数。 请注意,此常量的值可能会在此头文件的未来版本中进行修改。
操作参数 4 0
操作参数 5 0
数据 设备返回两个包含 PUOID 的连续 MTP 数组。 每个 MTP 数组都以一个 DWORD 值开头,该值指示数组中的项计数,后跟元素数组。 第一个 MTP 数组包含已添加或更改的 PUOID 列表。 第二个 MTP 数组包含已从便携式设备中删除的 PUOID 列表。请注意,两个数组中的 PUOID 计数之和不得超过操作参数 3 中传递的值。
数据方向 R-I>
响应代码选项 MTP_RESPONSE_OK (0x2001) 或有效的错误响应代码。
响应参数 1 设备的当前事务 ID。
响应参数 2 未来请求仍要检索的 PUOID 数。
响应参数 3 包含状态信息的 DWORD。 状态以按位方式指示。 有关要使用的标志的信息,请参阅“备注”。
响应参数 4 0
响应参数 5 0

备注

使用以下标志通过响应参数 3 按位指示状态。

标志 说明
WMP_MDRT_FLAGS_UNREPORTED_DELETED_ITEMS 0x1 在报告第一个对象路径名称之前删除了项。 这通常表示设备已重新格式化。
WMP_MDRT_FLAGS_UNREPORTED_ADDED_ITEMS 0x2 设备包含一些无法在 PUOIDS 列表中返回的已添加项目。 请注意,此标志对于响应参数 2 不冗余。 仅当设备无法返回的请求项时,才设置此标志。

保留位 2 到 31 供将来使用。 这些位应设置为零。

Windows 媒体播放器在同步会话开始时将 MTP 命令发送到设备,然后再传输媒体文件。 设备应尽快返回响应,以避免同步操作出现延迟。

Windows 媒体播放器将为响应中返回的每个修改的 POUID 的元数据中列出的属性请求值。 Windows 媒体播放器可能会在后续命令中将这些属性的更新值发送到设备。

如果用户的设置需要,可以再次将报告为已从设备中删除的文件复制到设备。

用于加速元数据传输的设备扩展