Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
ISO/IEC 29341-17-1 定义了 UPnP AV 架构中的 MediaServer 设备组件,这是现代家庭媒体网络的基石。MediaServer 负责在家庭网络中存储、编目和向 MediaRenderer 设备交付媒体内容——包括音乐、照片和视频。该标准已被广泛应用于从网络附加存储(NAS)设备到智能电视、游戏机以及运行 Plex、Emby 和 Jellyfin 等平台的专用媒体服务器等消费电子产品中。
MediaServer 的核心是 ContentDirectory 服务,它提供对媒体库的分层浏览和搜索接口。内容组织为对象(Object)和容器(Container)的树形结构,类似于文件系统中的文件和文件夹。对象代表单个媒体项(一首歌、一张照片、一个视频),而容器代表集合(一个专辑、一个文件夹、一个播放列表)。每个对象和容器由标准 DIDL-Lite(数字项目声明语言)模式中定义的一组元数据属性描述。
浏览模型支持两种主要操作:Browse(浏览)和 Search(搜索)。Browse 从指定容器遍历内容树,返回子对象和容器。Search 使用 DIDL-Lite 元数据属性的子集(如标题、创作者、流派或日期)在整个内容树(或其子树)中执行查询。两种操作都批量返回结果,通过偏移量和限制参数支持大型库的分页检索。
| 动作 | 描述 | 关键参数 |
|---|---|---|
| Browse | 枚举容器的子对象 | ObjectID, BrowseFlag (BrowseDirectChildren | BrowseMetadata), Filter, StartingIndex, RequestedCount |
| Search | 查询符合搜索条件的容器 | ContainerID, SearchCriteria, Filter, StartingIndex, RequestedCount |
| GetSortCapabilities | 获取支持的排序条件 | SortCaps(出)——逗号分隔的属性列表 |
| GetSystemUpdateID | 获取内容树变更计数器 | Id(出)——任何内容变更时递增 |
| GetSearchCapabilities | 获取可搜索的元数据属性 | SearchCaps(出)——逗号分隔的属性列表 |
MediaServer 还实现了 ConnectionManager 服务,负责管理服务器与渲染器之间媒体传输连接的建立和拆除。连接管理协议协商传输协议和数据格式,确保双方就媒体内容的交付方式达成一致。支持的传输协议包括 HTTP GET(用于直接流式传输)、RTSP(用于带传输控制的实时流式传输)以及适用于共享本地总线设备的内部传输协议。
协议协商过程包括:MediaServer 通过 GetProtocolInfo 动作通告其可用的传输协议和格式,MediaRenderer 选择兼容的组合,然后通过 PrepareForConnection 动作建立连接。ConnectionManager 跟踪活跃连接并通过状态变量(包括 CurrentConnectionIDs 和每个连接的详细 A_ARG_TYPE_ConnectionInfo 结构)提供状态信息。
构建高性能 MediaServer 需要应对若干工程挑战。元数据管理是最重要的挑战——设计良好的内容目录可以处理数百万个项目并实现亚秒级浏览响应时间。关键策略包括:维护规范化的数据库元数据模式、使用物化路径或嵌套集模型进行容器层次查询、为标题和描述搜索实现全文搜索索引,以及缓存频繁访问的浏览结果。
转码支持是另一个关键考虑因素。虽然标准定义了原生格式支持,但实际部署中对于渲染器无法原生处理的格式,实时转码非常有益。MediaServer 可以将转码后的内容版本作为内容目录中的虚拟对象暴露,转码格式在资源元数据中指示。工程师应将转码实现为具有可配置质量预设和硬件加速支持的异步管道。
内容更新通知通过系统更新 ID 机制处理。每当内容目录发生变化(添加、删除或修改媒体)时,系统更新 ID 递增。控制点可以轮询或订阅此状态变量以检测变化并刷新其浏览状态。标准还通过 ContainerUpdateIDs 状态变量支持细粒度的变更通知,该变量跟踪自上次通知以来哪些特定容器发生了变化。