В этой статье хотелось бы рассказать о том, как можно управлять на данный момент наиболее популярными мультимедиа центрами — KODI (XBMC) и Dune HD, с помощью HTTP GET запросов.

Здесь будут описаны только самые наиболее востребованные запросы, которыми можно управлять удаленно (например: в пределах домашней WiFi сети или при соответствующих настройках роутера из сети INTERNET), не только с помощью заранее написанных скриптов, но и простым вводом их в адресную строку браузера. Все запросы описывать здесь я не буду, так как: во — первых, многие из них используются крайне редко, а во — вторых, для этого есть полная документация. Данные запросы можно использовать так же, для управления мультимедиа центрами, при построении систем «Умный Дом», чем я собственно говоря и воспользовался при разработке своей.

Вот собственно те самые запросы:

1. Запуск файла на воспроизведение.

Ссылки на файлы должны быть прямыми, то есть явно указывать на воспроизводимый файл или поток, ссылки с Youtube таковыми не являются, поэтому работать не будут. Как получить прямую ссылку на ролик с Youtube можно посмотреть здесь.

  • 1.1 KODI (XBMC) — http://LOGIN:PASSWORD@ip-address:8080/jsonrpc?request={«jsonrpc»:«2.0»,«id»:«1»,«method»:«Player.Open»,«params»:{«item»:{«file»:"URL"}}}
  • 1.2 Dune HD — http://ip-address/cgi-bin/do?cmd=launch_media_url&media_url=URL

Здесь и далее по тексту:

LOGIN — логин установленный в настройках KODI (Веб-сервер -> Разрешить управление Kodi по HTTP).
PASSWORD — пароль установленный в настройках KODI (Веб-сервер -> Разрешить управление Kodi по HTTP).
URL — сетевой или интернет адрес воспроизводимого ресурса.
ip-address — IP адрес устройства в домашней или INTERNET сети.

Если настроить Dune HD так, что при нажатии кнопки POWER на пульте он уходит в режим Standby, то при запросе на воспроизведение файла он включится автоматически.

2. Регулировка громкости.

  • 2.1 KODI (XBMC) — http://LOGIN:PASSWORD@ip-address:8080/jsonrpc?request={«jsonrpc»:«2.0»,«id»:«1»,«method»:«Application.SetVolume»,«params»:{«volume»:35}}}
  • 2.2 Dune HD — http://ip-address/cgi-bin/do?cmd=set_playback_state&volume=35

Устанавливаем уровень громкости на значение 35.

3. Перемотка на определенную позицию.

  • 3.1 KODI (XBMC) — http://LOGIN:PASSWORD@ip-address:8080/jsonrpc?request={«jsonrpc»:«2.0»,«method»:«Player.Seek»,«params»:{«playerid»:0,«value»:50},«id»:«1»}
  • 3.2 Dune HD — http://ip-address/cgi-bin/do?cmd=set_playback_state&position=50

Внимание! Для KODI значение 50 указывается в процентах, а для Dune HD в секундах так как такой функции у него нет (я сделал так — написал небольшой скрипт, который получает полную продолжительность трека, и путем нехитрых вычислений устанавливал значение уже в процентах ).

Есть еще один нюанс — здесь и в дальнейшем для KODI предварительно нужно получать значение «playerid», это id активного плеера.

Получается он при помощи следующего запроса: http://LOGIN:PASSWORD@ip-address:8080/jsonrpc?request={«jsonrpc»:«2.0»,«method»:«Player.GetActivePlayers»,«id»:«1»}, если мне не изменяет память, то порядок примерно такой: для аудио — «playerid»:0, для видео — «playerid»:1, для фото — «playerid»:2. Значения должны быть типа integer, то есть целые числа без кавычек.

4. Пауза/Воспроизведение.

  • 4.1 KODI (XBMC) — http://LOGIN:PASSWORD@ip-address:8080/jsonrpc?request={«jsonrpc»:«2.0»,«id»:«1»,«method»:«Player.PlayPause»,«params»:{«playerid»:0}}
  • 4.2 Dune HD — http://ip-address/cgi-bin/do?cmd=set_playback_state&speed=0 — пауза/ 256 — воспроизведение

5. Следующий трек в плейлисте.

  • 5.1 KODI (XBMC) — http://LOGIN:PASSWORD@ip-address:8080/jsonrpc?request={«jsonrpc»:«2.0»,«id»:«1»,«method»:«Player.GoTo»,«params»:{«playerid»:0,«to»:«next»}} -
  • 5.2 Dune HD — http://ip-address/cgi-bin/do?cmd=ir_code&ir_code=E21DBF000

Для Dune HD нет явно указывающей команды, поэтому переход к следующему треку осуществляется путем эмуляции нажатия кнопки пульта. В документации коды команд написаны через одно место, поэтому я сделал файл с правильными командами, который можно взять тут.

6. Предыдущий трек в плейлисте.

  • 6.1 KODI (XBMC) — http://LOGIN:PASSWORD@ip-address:8080/jsonrpc?request={«jsonrpc»:«2.0»,«id»:«1»,«method»:«Player.GoTo»,«params»:{«playerid»:0,«to»:«previous»}} -
  • 6.2 Dune HD — http://ip-address/cgi-bin/do?cmd=ir_code&ir_code=B649BF00

Не забываем в запросах к KODI (XBMC) ставить свой «playerid».

Существует еще масса разного вида запросов, для данных мультимедиа центров, при помощи которых можно реализовать практически любой функционал. В итоге можно получить например вот такой web интерфейс управления, на котором будут отображаться все действия с пультом управления, или оснастить мультимедиа центр возможностью голосового поиска такого контента, как музыка или видео. Форматы ответов мультимедиа центров: KODI (XBMC) — JSON формат, Dune HD — XML формат. Управление можно реализовать на различных языках программирования, поддерживающих посылку HTTP GET запросов, и возможность работы с JSON, я для этих целей использовал всем известный php (curl, json_decode и для DuneHD simplexml_load_file).

Используемые материалы


JSON-RPC_API/v6 Kodi/XBMC
DUNE IP CONTROL DOCUMENTATION

Комментарии (7)


  1. NorthDakota
    21.12.2015 17:31
    +1

    с помощью HTTP GET запросов

    Это называется REST API


    1. arbuzmaster
      21.12.2015 21:10

      Спасибо! Буду теперь знать, как это называется по научному! :-)


    1. GamePad64
      22.12.2015 02:52
      +2

      GET, который изменяет состояние сервера не является stateless и не соответствует REST. Так что это-таки просто HTTP.


  1. pehat
    23.12.2015 02:52

    Передавать логин и пароль в незашифрованном виде как часть урла? Серьёзно?


    1. Urvin
      23.12.2015 08:35

      Basic HTTP auth ;)


      1. pehat
        23.12.2015 13:32

        Неправда ваша. Basic HTTP auth хотя бы в заголовки base64-строку прячет. https://en.wikipedia.org/wiki/Basic_access_authentication


    1. arbuzmaster
      23.12.2015 12:41

      На практике к XBMC можно подключиться и передавать запросы вообще без авторизации — нужно просто подключиться telnet — ом к порту 9090.