c++ DMS с поддержкой субтитров на смарт-телевизоре LG с платиновой библиотекой

Я пытаюсь реализовать простую DMS, которая может предоставлять информацию о субтитрах DMR -LG SmartTV - с использованием библиотеки platinium.

Мне уже удалось отобразить видео на 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)

Спасибо


person Nuno    schedule 14.01.2013    source источник
comment
Расскажите мне, что вы уже получили с Platinum. Вы скомпилировали тестовую DMS из Source/Tests/FileMediaServer? Или, возможно, даже создали свою собственную реализацию на основе Source/Devices/MediaServer/PltFileMediaServer?   -  person Pavel Zdenek    schedule 15.01.2013
comment
Да, я расширяю FileMediaServerTest, я создаю новый проект (сервис win32) и использую код в проекте FileMediaServerTest из тестовых проектов platinium.   -  person Nuno    schedule 15.01.2013
comment
И это работает для вас, так что DMR может воспроизводить файлы, обслуживаемые Platinum, и речь идет только о добавлении ‹res› для субтитров?   -  person Pavel Zdenek    schedule 15.01.2013
comment
тяп, работает, проблема в том, что не отображаются субтитры и не показывает превью картинки (видео тоже, но это для второй версии :))   -  person Nuno    schedule 15.01.2013


Ответы (1)


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

  • поместите свой файл SRT в ту же папку, что и медиафайл, с тем же именем, каким-то разумным способом, который впоследствии будет легко отличить.
  • в PltMimeType.cpp добавьте "srt","text/srt" к PLT_HttpFileRequestHandler_DefaultFileTypeMap. Platinum не знает SRT из коробки.
  • PltFileMediaServer.cpp довольно тупой, он по умолчанию показывает все файлы, найденные в каталоге. Ведь это пример. Вам нужно отфильтровать SRT из видимого списка, внедрив фильтр 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> не затерлось с id профиля DLNA.
person Pavel Zdenek    schedule 16.01.2013
comment
Большое спасибо всем, что вы говорите, что это правильно, и я успешно отображаю субтитры в своем DMR с помощью своего программного обеспечения, теперь мне нужно только сделать это более красивым, показывая превью изображений и превью видео... вы знаете, где я могу найти документацию для этого? (только информация dlna) или некоторые примеры кода тоже. Спасибо еще раз. - person Nuno; 17.01.2013
comment
Понятия не имею, что вы подразумеваете под предварительным просмотром изображения или предварительным просмотром видео. Вы можете захотеть реализовать транскодирование изображений и/или видео в меньший размер и представить его как альтернативный ресурс для каждого элемента. Но с точки зрения UPnP/DLNA это будет просто альтернативный ресурс, а будет ли он их отображать, полностью зависит от реализации DMR. Например, UPnP поддерживает определенные albumArtURI для музыки (и DLNA имеет для этого множество спецификаций), но мой личный опыт показывает, что реальные DMR предпочитают отображать изображение, найденное как тег IDv3 в MP3, и игнорировать ваши драгоценные данные UPnP. - person Pavel Zdenek; 17.01.2013
comment
Если вы считаете, что можете четко объяснить, чего хотите, задайте новый вопрос. Использование другого вопроса с не относящимся к делу заголовком — плохая практика, потому что это усложняет поиск знаний. - person Pavel Zdenek; 17.01.2013
comment
не надо, вы уже указали мне правильное направление. еще раз спасибо - person Nuno; 17.01.2013