C ++ DMS с поддержкой субтитров на LG Smart TV с платиновой библиотекой

Я пытаюсь реализовать простую 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)

Спасибо

0

Решение

Чтобы добавить тег ресурса SRT к элементу UPnP в Platinum, вы должны сделать по крайней мере следующее. Я не утверждаю, что список является функциональным, полным или проверенным. Это просто мое лучшее предположение о том, что нужно изменить. Если это не сработает сразу же, как я ожидал, я не смогу помочь вам более конкретно. Это подсказка по навигации, а не помощь при вождении.

  • поместите ваш файл SRT в ту же папку, что и файл мультимедиа, названный таким же образом некоторым разумным способом, который впоследствии будет легко различить.
  • в PltMimeType.cpp добавлять "srt","text/srt" в PLT_HttpFileRequestHandler_DefaultFileTypeMap, Платина не знает СТО из коробки.
  • PltFileMediaServer.cpp это довольно глупо, по умолчанию отображаются все файлы, найденные в каталоге. В конце концов, это пример. Вам необходимо отфильтровать СТО из видимого списка, выполнив PltFileMediaServer::ProcessFile фильтр.
  • до сих пор внутри PltFileMediaServer.cpp есть метод PLT_FileMediaServerDelegate::BuildFromFilePath, Сейчас начнется filepath это путь к вашему медиафайлу (и ТОЛЬКО это). Вне пути к файлу, вам нужно посмотреть в папке, есть ли файл с правильными именами субтитров (с некоторыми NPT_File методы, ищите это).
  • если есть, вы должны добавить дополнительные PLT_MediaItemResource к PLT_MediaObject* object, Уже есть один resource например, но это используется исключительно для самого медиа-ресурса. Не используйте это снова. Вам нужно добавить еще один, и IMO вам нужно только установить resource.m_Uri (с BuildResourceUri) и resource.m_ProtocolInfo,
  • за m_ProtocolInfoнужно позвонить PLT_ProtocolInfo::GetProtocolInfo с параметром false таким образом protocolInfo из ваших недавно добавленных <res> не засоряется идентификатором профиля DLNA.
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]