ISO/IEC 29341-9-13:UPnP AV ConnectionManager v3 — 媒体流连接管理

ConnectionManager:3 详细指南——协议协商、多连接支持、连接生命周期、增强的错误报告和流传输最佳实践。

UPnP AV ConnectionManager v3 概述

ISO/IEC 29341-9-13 定义了 UPnP AV ConnectionManager 服务的第三版,该组件负责管理 UPnP AV 设备之间的媒体流连接。媒体服务器和渲染器处理内容存储和播放,而 ConnectionManager 服务则是建立、维护和拆除流连接的编排者。第三版通过增强的连接功能扩展了协议:支持每个方向多个同时连接、协议无关的连接参数协商以及改进的流错误报告。

ConnectionManager 服务充当媒体服务器(源端)和媒体渲染器(宿端)之间的中间人。它将传输协议细节——无论流使用 HTTP、RTP、RTSP 还是专有协议——从控制点抽象出来,允许单一控制接口管理多种流技术。该服务通过 GetProtocolInfo 操作公开可用的传输协议和数据格式,并通过 PrepareForConnectionConnectionComplete 操作管理活动连接。

在尝试建立连接之前,始终在源设备和宿设备上都调用 GetProtocolInfo。这确保控制点选择两个设备都支持的协议和内容格式,避免不必要的连接失败和重试。

协议与格式协商

GetProtocolInfo 操作从每个设备返回两项关键信息:其支持的接收协议列表(宿端能力)和发送协议列表(源端能力)。每个协议使用包含网络协议、内容格式 MIME 类型和附加传输参数的协议信息字符串描述。控制点比较源端的发送能力和宿端的接收能力,以找到兼容的协议-格式对。

字段 描述 示例(HTTP 流)
Protocol 网络传输协议 http-get
MIME Type 内容格式标识符 video/mpeg
Additional Info 协议特定参数 *.mpeg, *.mpg

在 v3 中,协议信息字符串已扩展以支持高级参数,如流比特率限制、加密要求和 DRM 方案标识符。这允许媒体服务器指示特定内容只能通过 HTTPS 以至少 2 Mbps 的比特率使用 AES-128 加密进行流传输。然后控制点必须找到能够满足所有这些要求的宿端,或者选择限制较少的不同内容项。

v3 中扩展的协议信息增加了匹配算法的复杂性。在基本协议字段上执行简单字符串匹配的朴素实现可能错误地将不兼容的流视为兼容。在做出兼容性确定之前,始终解析完整的协议信息结构,包括附加参数。

连接生命周期管理

ConnectionManager:3 中的连接生命周期遵循明确的序列。首先,控制点在宿端设备上调用 PrepareForConnection,该操作分配内部资源并返回连接 ID 和 CurrentConnectionIDs 更新。控制点类似地在源端设备上准备,尽管在某些情况下源端准备是隐式的(例如,使用 HTTP GET 流时,源端只需在渲染器请求时提供内容)。一旦两个对等体都准备就绪,实际数据传输通过协商的协议开始。最后,在每个设备上调用 ConnectionComplete 以释放资源。

阶段 操作 描述
准备 PrepareForConnection 分配资源、分配 ConnectionID、返回传输参数
传输 (协议特定) 通过协商的协议进行实际媒体流传输
拆除 ConnectionComplete 释放资源、从活动列表中移除连接
查询 GetCurrentConnectionInfo 检索活动连接的状态和参数

v3 的一个关键增强是每个方向支持多个活动连接。媒体渲染器现在可以同时接收多个流——例如,主视频流和替代音频解说轨道——并在内部混合它们。PrepareForConnection 返回的 AVTransportIDRcsID 允许控制点将每个连接与适当的 AV Transport 和 RenderingControl 服务实例关联。

利用 v3 的多连接支持实现画中画功能。为主视频流打开一个连接,为画中画流打开第二个连接,每个连接都与渲染器上自己的 AV Transport 服务实例关联。

稳健流传输的设计见解

ConnectionManager:3 中最有价值的补充之一是通过 ConnectionError 状态变量增强的错误报告。当连接在中途失败时,该服务将此变量设置为机器可读的错误代码和人类可读的描述。常见的错误代码包括 NETWORK_FAILUREPROTOCOL_MISMATCHRESOURCE_UNAVAILABLEDRM_AUTHENTICATION_FAILED。这种结构化错误报告使控制点能够实现智能重试逻辑并向用户提供有意义的反馈。

对于设计 AV 流系统的工程师,ConnectionManager 服务的实现应仔细关注资源限制。每个活动连接消耗缓冲内存、可能一个网络套接字以及渲染器上可能的硬件解码器资源。控制点应使用 GetCurrentConnectionInfo 操作来监控资源利用率并避免超过容量。

在流结束后未能调用 ConnectionComplete 将在源端和宿端设备上泄漏资源。随着时间的推移,这可能耗尽可用连接并阻止建立新流。始终实现超时或看门狗机制来拆除孤立的连接。

常见问题

问:

ConnectionManager:3 如何处理 DRM 保护的内容?

答:

第三版扩展了协议信息字符串以包含 DRM 方案标识符。控制点负责在建立连接之前确保源端和宿端支持相同的 DRM 方案。如果不支持,连接将失败并返回 DRM_AUTHENTICATION_FAILED 错误。

问:

我可以将 ConnectionManager:3 用于纯音频连接吗?

答:

当然可以。该服务与媒体类型无关。协议信息协商涵盖音频 MIME 类型,如 audio/mpeg、audio/aac 和 audio/flac,与视频类型一样有效。相同的连接生命周期适用。

问:

支持的最大同时连接数是多少?

答:

这取决于设备。标准未指定最大值,但设备通常支持 8 到 64 个同时连接。可以使用 GetCurrentConnectionInfo 操作查询当前连接数并检测何时接近限制。

问:

v3 是否支持两个媒体服务器之间的点对点连接?

答:

不支持。ConnectionManager 服务设计用于服务器到渲染器的连接。服务器之间的点对点媒体传输需要单独的 UPnP 服务或本标准范围之外的直接应用层实现。

发表回复

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