Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
IEC 29341-18-4 标准定义了 MediaRenderer(媒体渲染器)设备,它是 UPnP 音视频架构中的核心组件。MediaRenderer 是一种逻辑设备,负责渲染或播放来自家庭网络中 MediaServer 或其他控制点的音视频内容。典型的实现包括智能电视、网络媒体播放器、无线扬声器和数字机顶盒。该标准规定了 MediaRenderer 必须公开的强制性和可选服务:AVTransport(用于播放控制)、RenderingControl(用于音量和画面调节)以及 ConnectionManager(用于管理数据连接)。这些服务通过 SOAP 调用公开操作,其状态变量通过 GENA 事件机制发布,使控制点能够随时与渲染器的当前状态保持同步。
AVTransport 服务是 MediaRenderer 的核心,提供了 Play、Pause、Stop、Seek、Next、Previous 和 SetAVTransportURI 等操作。每个 AVTransport 实例对应一个逻辑传输通道。拥有多个渲染端点的设备可以暴露多个 AVTransport 实例,每个实例拥有独立的实例 ID。该服务维护 AVTransportURI 状态变量和 TransportState 状态机,在 STOPPED、PLAYING、PAUSED_PLAYBACK、TRANSITIONING 和 NO_MEDIA_PRESENT 状态之间转换。
| 操作 | 描述 | 关键参数 |
|---|---|---|
| SetAVTransportURI | 设置要播放的媒体 URI | InstanceID, CurrentURI, CurrentURIMetaData |
| Play | 开始或恢复播放 | InstanceID, Speed(通常为 1) |
| Pause | 暂停播放 | InstanceID |
| Stop | 停止播放并重置位置 | InstanceID |
| Seek | 跳转到指定时间位置 | InstanceID, Unit(REL_TIME/ABS_TIME), Target |
| GetPositionInfo | 返回当前播放位置 | InstanceID |
Seek 操作要求目标媒体支持跳转。某些流媒体协议不支持跳转功能,会返回 PRAY_SEEK_MODE_NOT_SUPPORTED 错误。始终先调用 GetMediaInfo 确认是否支持跳转。RenderingControl 服务管理音量、静音、亮度、对比度和均衡器等输出参数。其主要操作包括 SetVolume、GetVolume、SetMute 和 GetMute,每个操作针对指定声道。ConnectionManager 服务负责协调 MediaServer 与 MediaRenderer 之间的数据流建立。它提供 GetProtocolInfo(声明支持的传输协议和内容格式)、PrepareForConnection(为新连接预留资源)和 ConnectionComplete(释放连接资源)。
GetCurrentConnectionIDs 操作允许控制点枚举所有活动连接。这对于实时监控家庭网络音视频会话的诊断面板来说非常有价值。SetAVTransportURI 这样的 UPnP 控制操作绝不应从外部网络访问,否则攻击者可以强制设备播放任意内容或发起缓冲区耗尽攻击。实现 MediaRenderer 时需特别关注 TransportState 状态机的设计。状态转换必须是原子的,并且必须立即触发事件通知;延迟的 LastChange 事件会导致控制点界面显示过时的播放状态。对于内存受限的嵌入式设备,建议在将 AVTransportURI 传递给解码管线之前预先验证其格式和协议方案,以降低恶意构造 URI 耗尽堆空间的风险。
http-get:*:audio/mpeg:*、http-get:*:video/mp4:* 和 rtsp-rtp-udp:*:video/H264:*。具体支持范围通过 ConnectionManager 的 GetProtocolInfo 操作声明。