0

我正在尝试实现一个简单的 DMS,它可以使用铂库向 DMR -LG SmartTV 提供字幕信息。

我已经成功地在 DMR 上渲染了视频,并且我已经找到了 DMR 接收与视频文件相关联的字幕信息的位置。

来自 DMR 的样本请求:

    POST /upnp/services/ContentDirectory/control HTTP/1.1
HOST: 192.168.1.3:54444
CONTENT-LENGTH: 735
CONTENT-TYPE: text/xml; charset="utf-8"
SOAPACTION: "urn:schemas-upnp-org:service:ContentDirectory:1#Browse"
USER-AGENT: Linux/2.6.39.4.ps-110224-lg1152 UPnP/1.0 DLNADOC/1.50 INTEL_NMPR/2.0 LGE_DLNA_SDK/1.6.0

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"
s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
  <s:Body>
    <u:Browse xmlns:u="urn:schemas-upnp-org:service:ContentDirectory:1">
      <ObjectID>ea06</ObjectID>
      <BrowseFlag>BrowseDirectChildren</BrowseFlag>
      <Filter>@id,@parentID,@restricted,@childCount,dc:title,dc:creator,upnp:artist,upnp:class,dc:date,upnp:album,upnp:genre,res,res@size,res@duration,res@protection,res@bitrate,res@resolution,res@protocolInfo,res@nrAudioChannels,res@sampleFrequency,upnp:albumArtURI,upnp:albumArtURI@dlna:profileID, res@dlna:cleartextSize</Filter>
      <StartingIndex>0</StartingIndex>
      <RequestedCount>24</RequestedCount>
      <SortCriteria></SortCriteria>
    </u:Browse>
  </s:Body>
</s:Envelope>

现在来自支持字幕显示的有效 DMS 的响应是:

HTTP/1.1 200 OK
SERVER: WINDOWS/5.1 UPnP/1.0 DLNADOC/1.50 Nero-MediaHome/4.5.20.145
CONTENT-TYPE: text/xml; charset=utf-8
EXT:
DATE: Mon, 14 Jan 2013 22:12:35 GMT
TRANSFER-ENCODING: chunked
CONNECTION: Keep-Alive
...
          <item id="ea13" parentID="ea06" restricted="1">
            <dc:date>2012-10-25</dc:date>
            <dc:title>video.avi</dc:title>
            <upnp:album>Filmes</upnp:album>
            <upnp:class>object.item.videoItem.movie</upnp:class>
            <res 
              bitrate="257570" duration="1:37:32" nrAudioChannels="6" 
              protocolInfo="http-get:*:video/avi:DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=01700000000000000000000000000000" 
              resolution="720x304" sampleFrequency="48000" size="1507196928">http://192.168.1.3:54444/server/80402875-CA74-4CCE-B7E0-D81CEF1913A2/D5E59F25/ea13?unknown-id</res>
            <res protocolInfo="http-get:*:text/srt:*">http://192.168.1.3:54444/server/80402875-CA74-4CCE-B7E0-D81CEF1913A2/3A2C7131/ea13?sub=video.srt</res>
          </item>

现在我正在尝试在我的自定义 DMS 中实现相同的功能,任何人都可以指出我正确的方向或显示任何实现存储在 res 元素中的字幕信息的示例:srt_URL(响应的内容类型是 text/srt)

谢谢

4

1 回答 1

2

要将 SRT 资源标签添加到 Platinum 中的 UPnP 项目,您至少应该执行以下操作。我不声称该列表是功能性的、完整的或经过测试的。这只是我对需要更改的最佳猜测。如果它不能立即按预期工作,我可能无法更具体地为您提供帮助。这是导航提示,而不是驾驶辅助

  • 将您的 SRT 文件与媒体文件放在同一个文件夹中,以某种合理的方式命名相同的名称,以便您以后轻松区分。
  • PltMimeType.cpp添加"srt","text/srt"PLT_HttpFileRequestHandler_DefaultFileTypeMap. Platinum 不知道开箱即用的 SRT。
  • PltFileMediaServer.cpp有点笨,默认情况下它会显示在目录中找到的所有文件。毕竟,这是一个例子。您需要通过实施PltFileMediaServer::ProcessFile过滤器从可见列表中过滤掉 SRT。
  • 仍然在PltFileMediaServer.cpp中有一个方法PLT_FileMediaServerDelegate::BuildFromFilePath。这filepath是您的媒体文件的路径(仅此而已)。在文件路径之外,您需要在文件夹中查看是否有正确命名的字幕文件(使用一些NPT_File方法,查找它)。
  • 如果有,您必须PLT_MediaItemResourcePLT_MediaObject* object. 已经有一个resource实例,但它专门用于媒体资源本身。不要重复使用它。您需要添加另一个,而 IMO 您只需设置resource.m_Uri(使用 BuildResourceUri)和resource.m_ProtocolInfo.
  • 对于m_ProtocolInfo,您需要PLT_ProtocolInfo::GetProtocolInfo使用参数调用,false以便protocolInfo您新添加<res>的 DLNA 配置文件 ID 不会被破坏。
于 2013-01-16T16:34:28.957 回答