You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DLNA服务器ContentDirectory响应异常:媒体无法被识别显示

DLNA服务器ContentDirectory响应格式修复方案

问题分析

当前的DIDL-Lite响应存在多处不符合DLNA规范的问题,导致Roku和PlayStation播放器无法识别媒体内容:

  • 容器嵌套错误:将<item>直接放在<container>内部,DLNA要求<container>和<item>必须是<DIDL-Lite>的直接子元素,不能嵌套。
  • 根容器属性设置不当:根容器restricted属性设为false,通常根目录应设为true(表示不可修改/删除)。
  • 元数据缺失:部分设备需要额外元数据字段才能识别媒体。
  • protocolInfo不够具体:部分设备需要明确指定编码格式,而非通配符。

修正后的Browse响应示例

<?xml version='1.0'?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Body>
    <u:BrowseResponse xmlns:u="urn:schemas-upnp-org:service:ContentDirectory:1">
      <DIDL-Lite xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/">
        <!-- 根容器 -->
        <container id="0" parentID="-1" restricted="true" searchable="true">
          <dc:title>My Video Container</dc:title>
          <upnp:class>object.container.storageFolder</upnp:class>
        </container>
        <!-- 视频Item,作为DIDL-Lite的直接子元素 -->
        <item id="1" parentID="0" restricted="false">
          <dc:title>[VideoName].mp4</dc:title>
          <dc:creator>Unknown</dc:creator>
          <dc:date>2024-01-01</dc:date>
          <upnp:class>object.item.videoItem.movie</upnp:class>
          <res protocolInfo="http-get:*:video/mp4;codecs=&quot;avc1.42E01E,mp4a.40.2&quot;:*" size="123456789">http://192.168.0.40:6589/live/bingex.mp4</res>
        </item>
        <item id="2" parentID="0" restricted="false">
          <dc:title>[Videoname].mp4</dc:title>
          <dc:creator>Unknown</dc:creator>
          <dc:date>2024-01-01</dc:date>
          <upnp:class>object.item.videoItem.movie</upnp:class>
          <res protocolInfo="http-get:*:video/mp4;codecs=&quot;avc1.42E01E,mp4a.40.2&quot;:*" size="987654321">http://192.168.0.40:6589/live/tvex</res>
        </item>
      </DIDL-Lite>
      <NumberReturned>3</NumberReturned>
      <TotalMatches>3</TotalMatches>
      <UpdateID>1</UpdateID>
    </u:BrowseResponse>
  </s:Body>
</s:Envelope>

关键修改点说明

  • 结构调整:将<item>移到<DIDL-Lite>下,与<container>同级,确保DLNA设备能正确解析目录层级。
  • 根容器属性修正:restricted="true"符合DLNA对根目录的规范要求。
  • 类型优化:使用object.container.storageFolder作为容器类型,object.item.videoItem.movie更贴合视频文件类型(兼容性优于videoProgram)。
  • 补充元数据:添加<dc:date>字段,部分播放器依赖该字段识别媒体。
  • protocolInfo具体化:明确指定视频(H.264)和音频(AAC)编码格式,同时添加size属性指定文件大小,提升设备兼容性。
  • 计数更新:返回1个容器+2个item,因此NumberReturned和TotalMatches改为3。

额外检查项

  • SCPD文件验证:确保/cds.xml中的Browse动作定义正确,参数(如ObjectID、BrowseFlag)和返回值符合UPnP ContentDirectory 1.0规范。
  • HTTP响应头设置:返回Browse响应时,需设置正确的Content-Type:Content-Type: text/xml; charset="utf-8",同时确保SOAPAction头正确。
  • 媒体可访问性测试:确认res中的URL能直接在浏览器中打开播放,保证DLNA设备可正常访问媒体文件。

内容的提问来源于stack exchange,提问作者Zokage269s

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 18:40:55