Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
ISO/IEC 29341-15-10:2011定义了ConnectionManager:2服务,这是负责在UPnP音视频架构中建立和管理媒体源与接收端之间数据传输连接的组件。ConnectionManager服务充当ContentDirectory服务的内容发现功能与AVTransport和RenderingControl服务的播放控制功能之间的中间层。它提供的关键功能包括协商双方支持的传输协议和媒体格式、分配必要的资源以及跟踪每个媒体流的生命周期。
该服务的正式服务类型为urn:schemas-upnp-org:service:ConnectionManager:2。它引入了一个正式的连接模型,每个流会话由一个ConnectionID整数表示。该服务通过CurrentConnectionIDs状态变量维护一个有序的活动连接列表。SourceProtocolInfo和SinkProtocolInfo状态变量分别枚举设备可以作为源发送或作为接收端接收的所有传输格式。每条协议信息条目遵循格式:protocol:network:contentFormat:additionalInfo。例如,http-get:*:video/mpeg:DLNA.1.5表示支持通过HTTP GET传输MPEG视频并带有DLNA 1.5扩展。
ConnectionManager:2版本引入了功能列表的概念——描述基本协议协商之外的设备能力的XML文档。这允许设备广告对特定编解码器、分辨率、DRM系统和传输增强的支持。功能列表在PrepareForConnection()协商阶段交换,实现源能力到接收端需求的智能匹配。这在来自不同厂商的媒体服务器和渲染器可能支持同一基础协议不同子集的异构环境中尤为重要。
ConnectionManager:2中的连接生命周期遵循一个明确的序列:(1)通过PrepareForConnection()预留资源,(2)数据传输并可选监控,(3)通过ConnectionComplete()释放资源。PrepareForConnection()动作接收远程设备的协议信息、对等ConnectionManager URL和媒体流方向(输入或输出)。服务随后检查其能力表,选择双方兼容的协议,分配内部资源,并返回唯一的ConnectionID以及协商后的协议信息。
| 状态变量 | 类型 | 描述 |
|---|---|---|
| SourceProtocolInfo | string (CSV) | 设备可作为源支持的协议 |
| SinkProtocolInfo | string (CSV) | 设备可作为接收端支持的协议 |
| CurrentConnectionIDs | string (CSV) | 活动连接ID的逗号分隔列表 |
| CurrentProtocolInfo | string (CSV) | 每个活动连接的协议信息 |
| FeatureList | XML字符串 | 功能能力XML文档 |
| A_ARG_TYPE_ConnectionID | int4 | 用于动作参数的连接标识符 |
ConnectionManager:2中的协议协商使用两阶段匹配算法。在第一阶段,服务比较本地和远程协议信息集的交集,以识别共同的传输协议和内容格式。在第二阶段,对于每个兼容的协议,服务检查是否有足够的资源(带宽、解码器实例、内存)来支持该连接。如果存在多个兼容协议,服务选择最大化偏好度量的协议。所选协议的完整信息字符串返回给调用者,调用者随后使用它来配置实际的传输通道。
GetCurrentConnectionInfo()动作使控制点能够通过ConnectionID查询单个连接的状态。返回的信息包括与该连接关联的RenderingControlServiceID和AVTransportServiceID,使控制点能够发现哪些播放服务正在管理该流。它还返回实际使用的ProtocolInfo和当前Status(OK、ContentFormatMismatch、InsufficientBandwidth等)。这些诊断信息对于在多厂商环境中排查流传输故障非常有价值。
资源管理是ConnectionManager服务的核心职责。PrepareForConnection()动作必须检查以下资源的可用性:(a)足够支持请求流的网络带宽,(b)空闲连接槽位(设备特定的最大值),(c)可用的硬件解码器实例以处理请求的格式,以及(d)传输管道的内存缓冲区。如果任何资源不可用,服务返回相应的错误代码:703(资源不足)、704(协议不兼容)或705(不支持连接)。
ConnectionManager:2服务使用GENA事件通知来通知已订阅的控制点连接状态的变化。CurrentConnectionIDs变量支持事件——任何变化都会触发包含更新后的活动连接ID列表的通知。订阅此变量的控制点可以维护所有活动媒体流的实时视图。CurrentProtocolInfo变量提供每个连接的协议详情,并支持事件以支持需要跟踪网络上正在使用的格式的监控应用。
在资源受限的环境中,事件通知优化值得仔细关注。在快速状态变化期间,ConnectionManager应将200ms窗口内的事件通知合并,以避免冗余的GENA消息淹没网络。LastChange事件负载应使用XML结构,将窗口内的所有更改聚合到单个通知中。实现者还应支持事件键序列化,以帮助控制点在高频更新期间检测到丢失的通知。
实现健壮的ConnectionManager:2服务需要解决几个实际挑战。协议信息字符串解析必须实现为状态机,处理各种边界情况,如空字段、转义字符和来自非兼容设备的格式错误条目。使用按逗号分割同时保留引号字符串的词法分析器,并根据格式验证每个token。拒绝不符合要求的条目并返回402错误,而不是静默忽略它们。
另一个关键方面是处理控制点崩溃或断开连接而未调用ConnectionComplete()的场景。ConnectionManager应实现一个非活动监视器,监控每个连接的传输活动。如果在一个可配置的超时时间内没有数据流过连接,服务应自动释放连接资源并更新CurrentConnectionIDs状态变量。这种自愈机制防止了资源泄漏,否则在多用户环境中会随时间推移降低系统性能。
PrepareForConnection()动作分配设备资源。未经身份验证的调用者可以重复调用此动作以耗尽连接槽位,造成拒绝服务条件。对生产部署实施速率限制和基于IP的访问控制。UPnP设备保护服务为保护敏感操作提供认证机制。通过UPnP AV认证测试套件的互操作性测试揭示了几个反复出现的问题。最常见的合规性失败是在GetCurrentConnectionInfo()响应中错误传播RenderingControlServiceID和AVTransportServiceID。这些服务ID必须与设备描述XML中广告的服务ID完全匹配。任何不匹配都会导致控制点在尝试将播放控件绑定到流时失败。在设备初始化期间实施一个自我测试,验证设备描述、ConnectionManager和相关服务实例之间的服务ID一致性。