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="avc1.42E01E,mp4a.40.2":*" 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="avc1.42E01E,mp4a.40.2":*" 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
相关产品推荐
相关产品推荐

