ISO/IEC 29341-9-11 — UPnP AV Transport v3

AVTransport v3 服务规范

ISO/IEC 29341-9-11 定义了 AVTransport v3 服务,这是 UPnP AV 架构中最复杂的服务。AVTransport 负责控制音频/视频播放——包括播放、暂停、停止、跳转、速度控制和曲目管理——涵盖所有类型的 AV 设备。ConnectionManager 管理流式传输连接,而 AVTransport 管理连接建立后内容发生的情况:如何播放、曲目的呈现顺序以及用户如何与播放体验交互。

AVTransport v3 代表了从 v2 的重大演进,引入了多曲目播放列表管理、无缝播放支持、增强的跳转模式(包括帧精确跳转)以及多房间音频场景的改进同步能力。它还正式化了播放队列概念,允许控制点构建、重新排序和操作内容项队列,而无需在渲染器上使用单独的 ContentDirectory 服务。

一、AVTransport v3 架构

AVTransport v3 架构围绕一个包含六种传输状态的正式状态机构建:STOPPED(停止)、PLAYING(播放中)、PAUSED_PLAYBACK(播放暂停)、PAUSED_RECORDING(录制暂停)、RECORDING(录制中)和 TRANSITIONING(过渡中,无缝播放激活时曲目之间的瞬态状态)。每种状态定义了哪些操作有效——例如,Stop() 在所有状态下都有效,Play() 仅在 STOPPED、PAUSED_PLAYBACK 和 TRANSITIONING 状态下有效,而 Record() 仅在 STOPPED 和 PAUSED_RECORDING 状态下有效。无效操作调用返回错误码 701(转换不可用)。

该服务管理多个独立的传输实例,每个实例由 InstanceID(整数,从 0 开始)标识。每个 InstanceID 维护其自己的完整传输状态:AVTransportURI(当前内容 URI)、TransportState(传输状态)、PlayMode(播放模式)、录制质量、当前曲目元数据(TrackMetaData)和位置信息(RelativeTimePosition、AbsoluteTimePosition、TrackDuration)。这种多实例设计允许单个设备支持多个同时播放会话——例如画中画或多个音频区。InstanceID 由 SetAVTransportURI() 操作动态分配,并在传输返回 STOPPED 状态且没有下一个 URI 时释放。

关键参数

Feature AVTransport v2 AVTransport v3
Transport states 5 (no TRANSITIONING) 6 (+ TRANSITIONING for gapless)
Seek modes TRACK_NR, ABS_TIME, REL_TIME + ABS_FRAME, REL_FRAME (frame-accurate)
Playlist management Single track Multi-track with NextAVTransportURI
Gapless playback Not supported Full support with pre-buffering
Multi-room sync Not supported AVTransportSyncGroup (+/-5 ms)
Play modes 4 (no REPEAT_ALL_SHUFFLE) 5 (+ REPEAT_ALL_SHUFFLE)
Max InstanceIDs 1 (implicit) Multiple, dynamically allocated
对于无缝播放,在当前曲目结束前至少 10 秒使用 SetNextAVTransportURI() 预加载下一曲目。这给解码器足够的时间初始化而不会产生间隙。
帧精确跳转(ABS_FRAME、REL_FRAME)需要媒体文件具有帧索引。如果索引缺失,Seek() 操作应回退到关键帧精确跳转并返回成功代码,同时在 additionalInfo 响应字段中提供警告。
多实例 InstanceID 设计允许单个智能音箱同时播放流式音频(InstanceID 0)、处理语音命令(InstanceID 1)和缓冲下一播放列表曲目(InstanceID 2)——全部在单个 AVTransport 服务内完成。
+/-5 毫秒容差的多房间同步对网络抖动极为敏感。在抖动超过 10 毫秒的 Wi-Fi 网络上,可能出现音频中断或回声伪像。强烈建议同步组成员使用有线以太网或专用 5 GHz 频段。

二、传输状态机与操作

AVTransport v3 定义了一套全面的传输操作,分为功能组。播放控制操作:Play()、Stop()、Pause()、Next()、Previous()。跳转操作:Seek() 支持模式 TRACK_NR(曲目选择)、ABS_TIME(绝对时间)、REL_TIME(从当前位置的相对时间)、ABS_FRAME(帧精确)和 REL_FRAME。播放列表管理操作:SetAVTransportURI()、SetNextAVTransportURI()、GetPositionInfo()、GetTransportInfo()、GetTransportSettings()。设备能力:GetDeviceCapabilities() 返回支持的播放模式、跳转模式和录制质量模式。

v3 中的无缝播放功能使用 NextAVTransportURI 机制。当控制点在内容播放期间调用 SetNextAVTransportURI() 时,服务会预缓冲下一曲目。当当前曲目到达末尾时,传输通过 TRANSITIONING 状态过渡(通常 0-500 毫秒,取决于缓冲)并自动开始播放下一曲目。如果下一个 URI 无法解码,SetNextAVTransportURI() 操作返回错误 705。对于无缝循环,控制点可以在播放结束前将 NextAVTransportURI 设置为等于 AVTransportURI。

v3 中的播放模式支持五种标准模式:NORMAL(顺序播放,结束时停止)、REPEAT_ONE(循环当前曲目)、REPEAT_ALL(循环整个播放列表)、SHUFFLE(随机化播放顺序)和 REPEAT_ALL_SHUFFLE(随机并重复)。CurrentTrackUri 和 CurrentTrackMetaData 状态变量在传输经过曲目时自动更新。NumberOfTracks 状态变量指示播放列表总大小,而 CurrentTrack 指示活动位置(基于 1 的索引)。

多实例 InstanceID 设计允许单个智能音箱同时播放流式音频(InstanceID 0)、处理语音命令(InstanceID 1)和缓冲下一播放列表曲目(InstanceID 2)——全部在单个 AVTransport 服务内完成。
+/-5 毫秒容差的多房间同步对网络抖动极为敏感。在抖动超过 10 毫秒的 Wi-Fi 网络上,可能出现音频中断或回声伪像。强烈建议同步组成员使用有线以太网或专用 5 GHz 频段。

三、工程最佳实践

正确实现 AVTransport v3 需要严格的状态机管理。传输状态机必须是线程安全的,因为多个控制点和内部事件(曲目完成、缓冲欠载)可能同时触发状态转换。推荐的实现模式是单线程事件循环配合状态转换队列:操作将状态更改请求加入队列,事件循环按顺序处理它们,并在每次转换完成时发送事件。这避免了竞态条件,而无需细粒度的锁。

位置跟踪性能对用户体验至关重要。RelativeTimePosition 和 AbsoluteTimePosition 状态变量必须至少每秒更新一次(UPnP AV 调节指南)。实现应使用高分辨率计时器(微秒精度)作为基础时间基准,但将位置格式化为 H:MM:SS.F(小时:分钟:秒.分数,默认为 1/10 秒,如果 DLNA.ORG_PARMAP 指示更高精度则为 1/100 秒)。GetPositionInfo() 操作应在 50 毫秒内响应,以保持在控制点上响应迅速的进度条渲染。

对于多房间音频同步,v3 引入了 AVTransportSyncGroup 概念。同一同步组内的设备共享公共时钟参考,并将播放时序协调在 +/-5 毫秒以内。GroupID 和 GroupCoordinatorID 状态变量标识同步组,而 GroupPlaybackMode 确定所有设备播放相同内容(SAME)还是共享播放列表中的不同曲目(DISTINCT)。此功能的实现需要操作系统级的时间协议支持(NTP 或 IEEE 1588 PTP)和仔细的音频缓冲管理以补偿网络抖动。

常见问题

问:ABS_TIME 和 REL_TIME 跳转模式有什么区别?
答:ABS_TIME 跳转到从曲目开始的绝对位置(例如 0:02:30 表示 2 分 30 秒)。REL_TIME 相对于当前位置跳转——正值向前跳转,负值向后跳转(例如 0:00:15 向前跳转 15 秒)。两者使用相同的 H:MM:SS.F 时间格式。
问:AVTransport 如何处理受保护内容的播放?
答:受保护内容的播放通过扩展能力框架管理。AVTransport 服务通过 TrackMetaData 状态变量(使用 元素)将内容报告为受保护。控制点必须在播放开始前调用适当的 DRM 许可证获取协议。如果在没有有效许可证的情况下尝试播放,AVTransport 返回错误 712(内容受保护)。
问:AVTransport v3 能否与 v2 控制点互操作?
答:可以,但有限制。v2 控制点可以使用 v2 操作集发现和控制 v3 设备(它们不会看到 v3 特定的操作,如帧精确跳转或无缝功能)。然而,连接到 v2 设备的 v3 控制点不得使用 v3 特定操作,应在调用高级操作前检查 GetDeviceCapabilities() 以确定支持的功能。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注