Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
ISO/IEC 29341-9-11 定义了 AVTransport v3 服务,这是 UPnP AV 架构中最复杂的服务。AVTransport 负责控制音频/视频播放——包括播放、暂停、停止、跳转、速度控制和曲目管理——涵盖所有类型的 AV 设备。ConnectionManager 管理流式传输连接,而 AVTransport 管理连接建立后内容发生的情况:如何播放、曲目的呈现顺序以及用户如何与播放体验交互。
AVTransport v3 代表了从 v2 的重大演进,引入了多曲目播放列表管理、无缝播放支持、增强的跳转模式(包括帧精确跳转)以及多房间音频场景的改进同步能力。它还正式化了播放队列概念,允许控制点构建、重新排序和操作内容项队列,而无需在渲染器上使用单独的 ContentDirectory 服务。
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 |
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 的索引)。
正确实现 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)和仔细的音频缓冲管理以补偿网络抖动。