c++ DLNA字幕显示实现与platinium库

Posted

技术标签:

【中文标题】c++ DLNA字幕显示实现与platinium库【英文标题】:c++ DLNA subtitle display implementation with platinium library 【发布时间】:2013-01-13 17:03:04 【问题描述】:

在不转码视频文件的情况下播放媒体文件(视频)时,是否有可能获得可用外部字幕(.srt 文件)的 DLNA 标准传递信息。

如果可能的话,谁能告诉我这在 DLNA 标准中的解释是什么?或者如何实现?

我正在尝试使用 platinium 库来实现这一点,但不知道该怎么做,也不知道这是否可行。

谢谢

【问题讨论】:

【参考方案1】:

可能吗?是的。标准化?不,可靠吗?绝对不。在 UPnP 或 DLNA 中都没有关于如何正确制作字幕的规范。这最终是一个问题,即 DMR 如何希望 DMS 提供字幕,因此这在很大程度上取决于您要使用的特定 DMR。一些 DMR 需要在媒体描述中使用特定的非标准 DIDL-Lite 字段(三星电视似乎在宣传 <sec:CaptionInfoEx>),一些 DMR 对有点标准的 <res protocolInfo="http-get:*:text/srt:*"> 感到满意。当然,这两种情况都包含您的 SRT 文件的 URL。您的 DMR 完全有可能根本不支持字幕。 UPnP 或 DLNA 中都没有这样的要求(我已经说过了吗?)。

所以 Platinum 没有任何开箱即用的字幕支持。您可以使用现有逻辑创建 <res> 标记 - 将 PLT_ProtocolInfo 设置为 text/srt 的 ContentType 并将您的 SRT 文件(由您的 DMS 提供)的 m_Uri 分配给 PLT_MediaItemResource

添加一个新字段比较棘手,PLT_Didl 有一组固定的字段,您必须与 PLT_MediaObject::ToDidl 一起扩展,这在其操作中是相当固定的。与框架其余部分的可见设计工作相比,我认为 Platinum 的这一部分有些仓促。

无论如何,您的 DMS 还必须准备好充当您的字幕的 HTTP 服务器,这意味着将权力赋予您作为 PLT_MediaServerDelegate::ProcessFileRequest 实现的任何类。

【讨论】:

感谢 Pavel 的回答,我还没有标记为正确,因为我想看看是否有人说得更多。在我看来,您对图书馆非常了解,您能否指出您在说什么的任何源示例,目标 DMR 是 LG 智能电视,您知道它是请求 srt 文件的请求吗?你也有这样的例子吗? (如果没有示例,您能否为我指出正确的文档来完成此操作?) 我不知道哪一种适用于您的电视机。我建议您尽可能多地尝试第 3 方 DMS,当您找到一个可以正确显示字幕的第三方 DMS 时,请使用 Wireshark 查看协议。 Naming your subtitle file in a specific way might help. 一旦您找到方法,我可能会帮助您完成,但请针对代码的具体更改提出具体问题。有关如何使用 Platinum 进行 DMS 的通用示例,请查看源代码中的示例,/Devices/MediaServer/PltFileMediaServer 和 /Tests/FileMediaServer。

以上是关于c++ DLNA字幕显示实现与platinium库的主要内容,如果未能解决你的问题,请参考以下文章

DLNA开发

在哪里可以找到完整的 DLNA 规格?

我在哪里可以找到DLNA的完整规格?

upnp协议和dlna源码理解与修改

DLNA开发中兼容性问题

Android UPnP/DLNA 应用以及cling 2.1.1依赖库