UPnP AV Remote Control в Java или C # - PullRequest
4 голосов
/ 06 мая 2011

Мне нужно создать какой-то пульт дистанционного управления, который может взаимодействовать с медиа-сервером UPnP.

Я читал, что существует три типа приложений для UPnP AV стека: медиа-сервер, медиа-рендерер, контрольная точка. Сначала я подумал, что контрольная точка - это то, что я хочу запрограммировать, однако после просмотра документов нескольких библиотек мне кажется, что контрольная точка все еще хочет воспроизводить мультимедийные файлы, которые сервер предоставляет на самом устройстве. контрольная точка работает с использованием внешнего программного обеспечения (в отличие от средства визуализации мультимедиа, которое воспроизводит файлы самостоятельно).

Правильно ли я понял это или я совершенно не прав?

Кроме того, я не смог найти библиотеку, которая казалась достаточно простой в использовании. Вероятно, это связано с моими плохими навыками, но у меня также есть ощущение, что документация многих библиотек довольно плохая и неполная.

Я не помню всех библиотек, с которыми мне приходилось сталкиваться, но они включали часто упоминаемые имена, такие как Cling, Fraunhofer FOKUS и CyberLink. Я прочитал большую часть материалов на их сайтах, включая некоторые документы, и не мог понять, как я могу использовать их так, как я хочу.

Мне просто нужно что-то, что позволяет мне подключаться к серверу, индексировать списки медиа , чтобы я мог перейти на любую дорожку, и только у меня есть возможность воспроизводить, останавливать, приостанавливать Далее следуйте и управляйте громкостью . Однако файлы должны быть воспроизведены на сервере .

Знаете ли вы что-нибудь такое замечательное для Java или C #? Заранее большое спасибо. :)

1 Ответ

1 голос
/ 09 июня 2011

Сначала я подумал, что контроль Дело в том, что я хочу запрограммировать, однако, пролистав документы нескольких библиотек, кажется, мне, что контрольная точка все еще хочет проигрывать медиа файлы на сервере обеспечивает на самом устройстве, контрольная точка работает, используя внешний программное обеспечение (в отличие от медиа рендерера, который воспроизводит файлы сам).

Для совместимости с UPnP AV программные приложения или аппаратные устройства должны включать как минимум одно устройство UPnP AV (MediaServer, ControlPoint или MediaRenderer) и его обязательные службы. Есть приложения, обеспечивающие несколько устройств, таким образом, логическое разделение может не быть найдено на практике. Часто проигрыватели видео реализуют службы ControlPoint только для просмотра сервера и загрузки его содержимого (содержимое может находиться даже на другом сервере).

Мне просто нужно что-то, что позволяет мне подключиться к серверу, проиндексировать медиа списки, чтобы я мог перейти к чему угодно трек и только дай мне возможность играть, остановиться, остановиться, Далее, предыдущий и контролировать громкость. однако файлы должны быть воспроизведены серверный.

UPnP определяет несколько сервисов, которые должны быть реализованы устройством (например, MediaServer должен предоставлять DirectoryService). Каждый сервис имеет обязательные и необязательные действия (например, служба каталогов может быть просмотрена с помощью метода Browse). Чтобы достичь того, чего вы хотите, на вашем сервере должен быть реализован UPnP MediaServer (необходимый для просмотра его содержимого) и UPnP MediaRenderer (необходимый для управления воспроизведением). UPnP ControlPoint действует как своего рода пульт дистанционного управления. Он используется для просмотра сервера и выбора сервера для воспроизведения файлов.

Запрос на просмотр выглядит следующим образом (ObjectID 0 всегда обозначает корень дерева):

<Browse xmlns:u =" urn:schemas-upnp-org:service:ContentDirectory:1 ">
<ObjectID>0</ObjectID>
<Filter></Filter>
<RequestedCount>0</RequestedCount>
<StartingIndex >0</StartingIndex>
<SortCriteria ></ SortCriteria>
<BrowseFlag> BrowseDirectChildren </BrowseFlag >
</u:Browse>

Сервер отвечает ответом, который может выглядеть следующим образом:

<DIDL-Lite>
<item id="1" parentID ="0" restricted ="1">
<upnp:class>object.item.videoItem </upnp:class>
<dc:title>Video file</dc:title>
<upnp:artist>John Doe</upnp:artist>
<upnp:genre>Action</ upnp:genre>
<upnp:director>John Doe Jr.</upnp:director>
<res protocolInfo="http-get:*:video/mpeg:*" resolution ="352x288">
http://10.20.30.40:12345/ExportContent?id=1
</res>
</item>
</DIDL-Lite >

В этом случае на сервере имеется только один элемент видео (обычно на сервере имеется несколько папок, содержащих много элементов). Элемент res содержит информацию о самом ресурсе (где он находится, какой транспортный протокол должен использоваться, тип mime, ...). В вашем случае сервер может даже ответить с «localhost» в качестве адреса, предотвращая загрузку файла. Часть MediaRenderer вашего сервера должна иметь к нему доступ в любом случае.

Я не помню все библиотеки, которые я сталкивался, но включал часто упомянутые имена, такие как Cling, Фраунгофер ФОКУС и CyberLink.

Лично я бы порекомендовал CyberLink для Java . Я использовал его для реализации MediaServer, однако он предлагает достаточно для реализации ControlPoint или MediaRenderer. Кроме того, вы должны получить инструмент разработчика UPnP, такой как Инструменты разработчика для UPnP (первоначально инструменты Intel UPnP) или GUPnP для Linux . GUPnP также предоставляет библиотеку UPnP для C. Эти инструменты разработчика позволяют вам вызывать и отлаживать команды UPnP и очень удобны во время разработки. Другим полезным ресурсом являются описания устройств UPnP от консорциума UPnP.

...