设备信息: Meta Quest 3 | Skybox VR v1.2.1
问题描述:
升级到 v1.2.1 后,Skybox 不再识别 DLNA 服务器通过标准协议 <upnp:albumArtURI> 传递的自定义封面图片,而是强制从视频文件中提取帧作为缩略图。
技术背景(供开发团队参考):
我使用自己开发的 DLNA Media Server,严格遵循 UPnP AV / DLNA ContentDirectory:1 协议标准。在 Browse 响应中,每个视频条目均包含标准的 <upnp:albumArtURI> 元素:
<upnp:albumArtURI dlna:profileID="JPEG_TN">
http://{server_ip}:8200/poster/{stable_id}
</upnp:albumArtURI>
同时附带 <res> 元素声明海报的 DLNA 属性:
<res protocolInfo="http-get:*:image/jpeg😃LNA.ORG_PN=JPEG_TN">
http://{server_ip}:8200/poster/{stable_id}
</res>
海报以 image/jpeg 格式返回 300px 缩略图,并带有 Cache-Control: max-age=3600 头。
升级前后的差异:
旧版本(v1.2.1 之前): 正确解析 <upnp:albumArtURI> 并展示自定义封面。
v1.2.1 之后: 不再请求该 URI,改为直接通过网络流读取视频文件的 moov atom 元数据并提取视频帧(服务端日志中可见大量 bytes=0- 和 bytes={file_size}- 范围请求)。
带来的问题:
自定义封面被随机视频帧替换,视频库封面杂乱无章。
Quest 3 上批量读取数百个视频文件提取帧,速度极慢,界面长时间显示“加载中”。
占用大量不必要的网络带宽和播放器性能,影响整体使用体验。
建议改进方向:
优先使用标准协议:即使内建了帧提取功能,也应优先使用 <upnp:albumArtURI>,仅在服务器未提供封面时才回退到本地帧提取。
增加开关选项:提供一个设置项,让用户选择“优先使用 DLNA 服务器提供的封面”还是“优先从视频文件中提取帧”。