Перейти к содержанию

IP Control (/cgi-bin/do) для разработчика плагина

Глава (2026-10-29, дополнена 2026-11-01). Что даёт IP Control плагину и его отладке: версии протокола, ответ status, запуск плагина по launch_media_url, ожидание при долгой операции, управление VOD, нажатия и ввод текста. Нажатия и текст снаружи и то, как плагины эмулируют пульт, — также в input-dialogs.md. Источники: официальный документ IP Control, протоколы 1–5 (doc, без даты); strings libduneshell.so и libxxx_do.so tv188b 260827_0003_r24 (code); наблюдения на tv188b r24 и на одном устройстве tv188b 261021_0117_r25 (device); код плагинов Dune Backup 2.9.2, ProIPTV 9.1.1938, screenshoter 1.0.6, altIPTV 5.2.9, Torrent Center 2.0.4 и Remote Control 5.1.52 (code, платформа и прошивка не установлены) — §6. Это не полный справочник команд. Каждое фактическое предложение ссылается на claim id.

Коротко: вопрос → ответ

Вопрос Ответ Где
Какой протокол отвечает прошивка? tv188b r24, device: protocol_version=6, а документ кончается протоколом 5 (устройство r24, SDK)1 §1
Как запустить точку входа плагина снаружи? launch_media_url с plugin_launcher://{name=…}{ep_media_url=…}; на r25 работает, а open_path root://applications/… — нет (устройство r25)2 §2
Как вызвать действие плагина без точки входа? plugin_launcher://{name=…}{action_id=…}; на r25 так запускается open_magnet у downloads (устройство r25)3 §2
Ответит ли IP Control во время долгой операции плагина? r25, device: только после её конца (устройство r25)4 §3
Как передать данные действию плагина? r25, device: парами {ключ=значение} в plugin_launcher://…{action_id=…}, переданном в launch_media_url напрямую, — они приходят в user_input буквально, без URL-декодирования (устройство r25)5; в M3U доходит {from=…} (устройство r25)6 §2
Узнает ли плагин о паузе и перемотке через set_playback_state? r25, device: только событием playback_state_changed, без playback_user_action (устройство r25)7 §4
Как нажать кнопку пульта или ввести текст снаружи? cmd=ir_code с NEC-кодом (SDK)8; get_text и set_text — только при активном редакторе (SDK)9 §5
Как плагин нажимает кнопки сам? локальный IP Control ir_code или запись кода в /proc/ir/button (код)10 §6

1. Протокол и ответ

По документу:

  • Ответ — XML command_result с элементами <param name="…" value="…"/> (SDK)11; command_status — ok, failed или timeout (SDK)12, при failed есть error_kind и error_description (SDK)13.
  • Ответ приходит по завершении команды или по тайм-ауту (по умолчанию 20 с); при тайм-ауте плеер продолжает выполнять команду (SDK)14. Параметр timeout (секунды, минимум 1) задаёт свой срок (SDK)15.
  • С протокола 5 все команды отвечают JSON при result_syntax=json (SDK)16.
  • HTTP-порт — 80, кроме сертифицированных Google ATV-моделей, где 11080 (SDK)17; на ATV-моделях IP Control ограничен (SDK)18.
  • Документ описывает протоколы 1–5, о протоколе 6 в нём ничего нет (SDK)19.

Что есть в прошивке сверх документа:

  • tv188b r24, device: cmd=status отвечает protocol_version=6 (устройство r24)20 и параметрами, которых нет в документе: phv_md5, android_app_active, android_md5, md5, playback_volume_index, playback_volume_index_max, app_version (устройство r24)21.
  • tv188b r24, code: в strings есть команды, которых нет в документе, — set_next_url, light_stop, bt_command, key_action, voice_action, overall_state, ui_action_scroll, photo_viewer_action, generic_action, get_config, set_config, reset_settings, в libxxx_do.so ещё reboot (код r24)22; все команды документа, кроме status, тоже есть (код r24)23.
  • tv188b r24, code: CGI do разбирает timeout сам («invalid timeout '%s' ignored») (код r24)24 и знает форматы XML, JSON и TEXT (text/plain) (код r24)25.
  • tv188b r25, device: cmd=status отвечает, не меняя mtime ни одного файла /tmp/run/ext_command.* (устройство r25)26.
  • tv188b r25, device: во время VOD cmd=status отдаёт playback_speed, playback_duration, playback_position_version, playback_is_buffering, playback_volume, playback_mute, is_video, pause_is_available, teletext_available, scrambling_detected, audio_track.0.*, playback_caption, playback_extra_caption, playback_picture (устройство r25)27.

2. Запуск плагина: launch_media_url

По документу launch_media_url с plugin_launcher://{name=<плагин>} запускает плагин, с {ep_media_url=…} — заданную точку входа, с {action_id=…} — действие, объявленное в манифесте (SDK)28.

На r25 (device):

Команда Результат Claim
open_path&url=root://applications/<подпись пункта> command_status=ok, но точка входа не вызвана (устройство r25)2
launch_media_url, plugin_launcher://{name=<плагин>}{ep_media_url=<media_url точки входа>} точка входа запущена (устройство r25)2
то же, с тестовым плагином ({name=test_plugin9}{ep_media_url=kbp9_ping}) точка входа запущена: число вызовов ping выросло 0 → 1 (устройство r25)29
то же перед запуском — проверка обновления плагина, update_info грузится с тайм-аутом 1 (устройство r25)30
launch_media_url, plugin_launcher://{name=downloads}{action_id=open_magnet}{magnet_url=…} «launching plugin 'downloads' (ep (null), action open_magnet)», handle_user_input(entry.open_magnet) с тайм-аутом 300 с (устройство r25)3
launch_media_url с голой magnet:?xt=… failed, invalid_parameters, «qualified url is expected» (устройство r25)31
launch_media_url с HTTPS-URL файла .torrent ни воспроизведения, ни downloads (устройство r25)32
launch_media_url с M3U по HTTP (с компьютера или из www плагина) из одной строки plugin_launcher://…{action_id=…}{from=…} действие вызвано, from — в user_input (устройство r25)6
launch_media_url, plugin_launcher://{name=test_plugin9}{action_id=kv}{k1=v1}{k2=a b}{k3=x=y}{k4=%41} действие kv запущено, пары в user_input буквально: k2 = «a b», k3 = «x=y», k4 = «%41» (без URL-декодирования) (устройство r25)5

Для сравнения, не IP Control: GUI-действие launch_media_url с тем же M3U из www плагина тоже вызывает действие и передаёт from=gui (устройство r25)33, а am start -n PlayerProxyActivity -t audio/x-mpegurl без VIEW действие не вызывает (устройство r25)34.

Пары {ключ=значение} доходят до данных действия, когда plugin_launcher передан в launch_media_url прямо (устройство r25)5, и когда он лежит в M3U: там проверена пара {from=…} (устройство r25)6. При прямом запуске значение берётся как есть: пробел и второй = сохраняются, %41 не декодируется (устройство r25)5: URL-кодированное значение плагин получит закодированным. Пара только из {name} и отказ на необъявленный action_id на устройстве не проверялись.

3. IP Control и долгая операция плагина

На r25 (device) команды IP Control ждут, пока идёт handle_user_input плагина: launch_media_url через 4 с после начала 20-секундной операции получил ответ только после её конца — и для того же плагина, и для другого (устройство r25)4. cmd=main_screen такую операцию не отменяет (устройство r25)35. Подробнее об очереди операций, в том числе как cmd=main_screen ждёт обработчик таймера, — plugin-operations.md §1.2.

4. set_playback_state во время VOD плагина

На r25 (device) IP Control управляет plugin VOD: speed=0 ставит паузу (устройство r25)36, speed=256 возобновляет (устройство r25)37, position=30 перематывает к 30-й секунде (устройство r25)38. Плагин узнаёт об этом только событием playback_state_changed, без playback_user_action (устройство r25)7. Пауза и продолжение с пульта (IR PAUSE/PLAY) приходят иначе — playback_user_action с Pause/Resume (устройство r25)39. Остальные параметры команды по документу (black_screen, hide_osd, несколько в одном запросе) — в «Не проверено».

5. Нажать клавишу или ввести текст снаружи: IP Control

Объект: команды IP Control по документу протокола (doc, any-documented; версии протокола — у команд) и строки tv188b r24 (code, android-dune-fw, 260827_0003_r24).

Для отладки и автоматизации те же кнопки можно нажимать по сети; протокол и общие команды — §1. Команды идут в /cgi-bin/do параметром cmd (SDK)40. Команда cmd=ir_code посылает ИК-код кнопки пульта в параметре ir_code (SDK)41; код — 4-байтный NEC-код с байтами в обратном порядке: кнопка RIGHT 00 BF 18 E7 даёт ir_code=E718BF00, команда описана с протокола 1 (прошивка 110127_2105_beta) (SDK)8. В libduneshell.so r24 рядом с этой командой лежат строка /proc/ir/button и сообщения «'ir_code' parameter is invalid/missing», «failed to pass IR-code» (код r24)42; гипотеза о реализации — в input-dialogs.md §6.

Коды, которые встречаются в источниках базы (как плагины их посылают — §6):

Код Чем назван в источнике Где Claim
E718BF00 кнопка RIGHT документ IP Control (SDK)8
B24DBF00 ANGLE/ROTATE документ IP Control (SDK)41
A15EBF00 DISCRETE_POWER_OFF reboot.bash плагина Remote Control 5.1.52 (код)43
A05FBF00 DISCRETE_POWER_ON там же (код)43
ef10bf00 без названия: режим IR-кода скриншота screenshoter 1.0.6 (код)44
AF50BF00, EB14BF00, EA15BF00 без названия: блокировка строки <no_choice> Dune Backup 2.9.2 (код)45
EA15BF00, E916BF00 без названия: после zoom_apply altIPTV 5.2.9 (код)46

Значения кодов без названия в базе не установлены; гипотезы о A15EBF00 и ef10bf00 — в input-dialogs.md §6.

С протокола 5 (прошивка 181228_0252_r13) есть команды уровня интерфейса: ui_action_return[&count=-1|N] — как RETURN (по умолчанию на один экран назад, -1 — на главный) (SDK)47, ui_action_enter&item_id=… — выбор пункта и ENTER (SDK)48, ui_action_popup_menu&item_id=… — выбор пункта и POP UP MENU (SDK)49. В libduneshell.so r24 есть сообщение «wrong 'item_id' parameter: not found in current folder» (код r24)50.

Пока активен текстовый редактор, get_text возвращает редактируемую строку в параметре text, а set_text&text=… заменяет её (UTF-8); без активного редактора обе команды завершаются failed; обе описаны с протокола 3 (прошивка 120531_2200_beta) (SDK)9. В libduneshell.so r24 есть сообщения «set_text failed: text editor not active», «set_text failed: 'text' parameter not specified» и «text not available» (код r24)51. Команда key_action есть в строках r24, но в документе IP Control не описана (код r24)22; гипотеза о её параметре — в input-dialogs.md §6.

6. Нажать кнопку пульта из плагина: IP Control и /proc/ir/button

Объект: Dune Backup 2.9.2, ProIPTV 9.1.1938, screenshoter 1.0.6, altIPTV 5.2.9, Torrent Center 2.0.4, Remote Control 5.1.52 (code; платформа и прошивка не установлены). Коды кнопок — таблица §5.

Плагины нажимают кнопки двумя путями. Первый — локальный IP Control: Dune Backup шлёт ir_code на http://127.0.0.1 (с портом :11080 при flag_apk) (код)45; ProIPTV — командой wget с проверкой ответа command_status value="ok", и комментарий в его коде утверждает, что в отличие от /proc/ir/button это работает на ATV (limited APK) (код)52; screenshoter в режиме IR-кода делает скриншот запросом cmd=ir_code&ir_code=ef10bf00 (код)44; reboot.bash Remote Control шлёт коды DISCRETE_POWER_OFF/DISCRETE_POWER_ON раз в секунду (код)43. Второй — запись кода в /proc/ir/button: screenshoter для выключения (код)53, altIPTV после zoom_apply (код)46, Torrent Center в cron-строке таймера сна (код)54. Что запись в /proc/ir/button эмулирует нажатие, — гипотеза (input-dialogs.md §6).

7. Расхождения

Все три пары связаны conflicts_with. В первых двух сторона r24 — вывод по strings (inference), поэтому здесь только сторона документа.

  • Окно видео. Документ, протокол 2: set_playback_state с video_fullscreen, video_x, video_y, video_width, video_height (SDK)55. В strings r24 этих имён нет, а есть window_fullscreen и window_rect_* (код r24)56; вывод о том, что окно задаётся ими, — в «Не проверено».
  • playback_dvd_menu. Документ, протокол 1: параметр есть в ответе при воспроизведении (SDK)57; строки playback_dvd_menu в r24 нет (вывод — в «Не проверено»).
  • open_path. Документ: протокол 4 добавил open_path для открытия папки, раздела меню или запуска пункта по root://…, с примером root://applications/RadioTime (SDK)58; на r25 (device) точка входа так не запустилась (устройство r25)2.

8. Не проверено

Утверждение Статус Claim
Документ: set_playback_state управляет параметрами speed (0 — пауза, 256 — продолжить), position (секунды), black_screen, hide_osd, их можно сочетать. speed 0/256 и position подтверждены на устройстве (§4), остальное не проверялось doc, disputed (SDK)59
r24 реализует не описанный протокол 6 inference (вывод r24)60
r24: блок имён playback_* в libduneshell.so — ключи ответа status (на r25 ключи видны в ответе, §1) inference, verified (вывод r24)61
r24 не сообщает playback_dvd_menu inference (вывод r24)62
Окно видео в r24 задают window_fullscreen, window_rect_*, а не video_x… inference (вывод r24)63
Недопустимый timeout игнорируется, действует умолчание inference (вывод r24)64
Есть недокументированный текстовый формат ответа; значение result_syntax для него неизвестно inference (вывод r24)65
Пары {ключ=значение} в plugin_launcher://…{action_id=…}, переданном в launch_media_url прямо, доходят до данных действия; r25, device: доходят, буквально (устройство r25)5 (§2) inference, verified (вывод r25)66
r24: команды, требующие исполнения оболочкой, передаются через /tmp/run/ext_command.request/.response (на r25 status файлы не трогает, §1) inference (вывод r24)67

    • fw-tv188b-260827-0003-r24--http-api--ext-command-params.c061 · device · tv188b, android-dune-fw; прошивка 260827_0003_r24 · На tv188b r24 cmd=status отвечает XML command_result с protocol_version=6 — на единицу больше последней версии, описанной в документе IP Control (5)
    • fw-tv188b-260827-0003-r24--http-api--ext-command-params.c055 · doc · any-documented; прошивка — · Документ IP Control описывает версии протокола 1–5; последний раздел — протокол 5 (с прошивки 181228_0252_r13), о протоколе 6 и далее в нём ничего нет

    ↩

  1. fw-tv188b-260827-0003-r24--http-api--ext-command-params.c093 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 cmd=open_path&url=root://applications/<подпись пункта> отвечает command_status=ok, но точку входа плагина не запускает (вызовов 0 → 0), а launch_media_url с plugin_launcher://{name=<плагин>} {ep_media_url=} её запускает (0 → 1). ↩↩↩↩

  2. fw-tv188b-260827-0003-r24--http-api--ext-command-params.c094 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 launch_media_url с plugin_launcher://{name=downloads}{action_id=open_magnet}{magnet_url=} запускает публичное действие плагина без точки входа: «[plugin_launcher] launching plugin 'downloads' (ep (null), action open_magnet)» и handle_user_input(entry.open_magnet) с тайм-аутом 300 с. ↩↩

  3. fw-tv188b-260827-0003-r24--http-api--ext-command-params.c098 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 команды IP Control ждут, пока идёт handle_user_input плагина: launch_media_url, отправленный через 4 с после начала 20-секундной операции, получил ответ только после её конца — и для точки входа того же плагина, и для другого плагина. ↩↩

  4. fw-tv188b-261021-0117-r25.c342 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 plugin_launcher://{name=test_plugin9}{action_id=kv}{k1=v1}{k2=a b}{k3=x=y}{k4=%41} запустил действие kv, и пары дошли в user_input буквально: k2 = «a b», k3 = «x=y», k4 = «%41» (без URL-декодирования). ↩↩↩↩↩

  5. fw-tv188b-261021-0117-r25--media-player.c068 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 IP Control launch_media_url с одноэлементным M3U по HTTP (компьютер либо www плагина), содержащим plugin_launcher, вызывает действие b3 и передаёт from в user_input. ↩↩↩

  6. fw-tv188b-261021-0117-r25--media-player.c058 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 команды set_playback_state speed=0, speed=256 и position=30 вызывают у VOD-плагина playback_state_changed без playback_user_action для этих команд. ↩↩

  7. fw-tv188b-260827-0003-r24--http-api--ext-command-params.c021 · doc · any-documented; прошивка — · Параметр ir_code команды ir_code — 4-байтный NEC-код кнопки пульта с байтами в обратном порядке: кнопка RIGHT 00 BF 18 E7 → ir_code=E718BF00 ↩↩↩

    • fw-tv188b-260827-0003-r24--http-api--ext-command-params.c035 · doc · any-documented; прошивка — · cmd=get_text возвращает редактируемую сейчас строку в параметре text; без активного редактора текста — command_status failed
    • fw-tv188b-260827-0003-r24--http-api--ext-command-params.c036 · doc · any-documented; прошивка — · cmd=set_text&text=… заменяет редактируемую строку заданной (UTF-8); без активного редактора — failed

    ↩↩

    • plg-dc-dune-backup.c124 · code · unknown; прошивка — · Строку в списке # плагин блокирует, отправляя локальные IR-коды через http://127.0.0.1<:11080 при flag_apk>/cgi-bin/do?cmd=ir_code&ir_code=…: AF50BF00 и EB14BF00 при выборе, EA15BF00 и EB14BF00 при подтверждении.
    • plg-gh-kocourkuba-proiptv.c080 · code · android-atv; прошивка — · send_ir_code_http для ключа из DuneIrControl::$key_codes отправляет ИК-код через локальный HTTP API /cgi-bin/do?cmd=ir_code&ir_code=<код> командой wget и проверяет ответ на command_status value="ok"; для неизвестного ключа возвращает false. Комментарий: в отличие от /proc/ir/button это работает на ATV (limited APK), где событие всё равно доходит до плагина.
    • plg-dc-screenshoter.c027 · code · unknown; прошивка — · Пункт меню power_off пишет код A15EBF00 в /proc/ir/button через shell_exec

    ↩

  8. fw-tv188b-260827-0003-r24--http-api--ext-command-params.c024 · doc · any-documented; прошивка — · Ответ — XML с корнем command_result и элементами (protocol_version, command_status, player_state, playback_*) ↩

  9. fw-tv188b-260827-0003-r24--http-api--ext-command-params.c025 · doc · any-documented; прошивка — · В ответе command_status принимает значения ok|failed|timeout, а protocol_version в протоколе 1 равен 1 ↩

  10. fw-tv188b-260827-0003-r24--http-api--ext-command-params.c027 · doc · any-documented; прошивка — · При command_status=failed ответ содержит error_kind (unknown_command|invalid_parameters|illegal_state|internal_error|operation_failed) и error_description ↩

  11. fw-tv188b-260827-0003-r24--http-api--ext-command-params.c022 · doc · any-documented; прошивка — · Ответ приходит по завершении команды или по таймауту (по умолчанию 20 с); при таймауте клиент получает статус timeout, а плеер продолжает выполнять команду — состояние можно опрашивать командой status ↩

  12. fw-tv188b-260827-0003-r24--http-api--ext-command-params.c023 · doc · any-documented; прошивка — · Параметр timeout (секунды, минимум 1) задаёт свой таймаут ожидания ответа для любой команды ↩

  13. fw-tv188b-260827-0003-r24--http-api--ext-command-params.c044 · doc · any-documented; прошивка — · Протокол 5 (с прошивки 181228_0252_r13): все команды могут отвечать JSON при параметре result_syntax=json; новая ui_state требует result_syntax=json, остальные поддерживают оба формата ↩

  14. fw-tv188b-260827-0003-r24--http-api--ext-command-params.c002 · doc · any-documented; прошивка — · По документу HTTP-порт IP Control — 80 на всех моделях, кроме сертифицированных Google ATV-моделей, где порт 11080 ↩

  15. fw-tv188b-260827-0003-r24--http-api--ext-command-params.c003 · doc · any-documented, android-atv; прошивка — · По документу на ATV-моделях (BOXY, Homatics Box R 4K Plus, Premier 4K Pro) поддержка IP Control ограничена — нужно установленное приложение Dune HD Media Center, и IP Control управляет только им ↩

  16. fw-tv188b-260827-0003-r24--http-api--ext-command-params.c055 · doc · any-documented; прошивка — · Документ IP Control описывает версии протокола 1–5; последний раздел — протокол 5 (с прошивки 181228_0252_r13), о протоколе 6 и далее в нём ничего нет ↩

  17. fw-tv188b-260827-0003-r24--http-api--ext-command-params.c061 · device · tv188b, android-dune-fw; прошивка 260827_0003_r24 · На tv188b r24 cmd=status отвечает XML command_result с protocol_version=6 — на единицу больше последней версии, описанной в документе IP Control (5) ↩

  18. fw-tv188b-260827-0003-r24--http-api--ext-command-params.c063 · device · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Ответ cmd=status на tv188b r24 содержит параметры, которых нет в документе IP Control 1–5: phv_md5, android_app_active, android_md5, md5, playback_volume_index, playback_volume_index_max, app_version ↩

  19. fw-tv188b-260827-0003-r24--http-api--ext-command-params.c060 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · В r24 есть строки команд, которых нет в документе IP Control 1–5: set_next_url, light_stop, bt_command, key_action, voice_action, overall_state, ui_action_scroll, photo_viewer_action, generic_action, get_config, set_config, reset_settings, а в libxxx_do.so ещё reboot ↩↩

  20. fw-tv188b-260827-0003-r24--http-api--ext-command-params.c059 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Все команды документа IP Control (протоколы 1–5), кроме status, есть строками в libduneshell.so и libxxx_do.so r24: start_file_playback, start_dvd_playback, start_bluray_playback, start_playlist_playback, launch_media_url, set_playback_state, playback_action, dvd_navigation, main_screen, black_screen, standby, ir_code, get_text, set_text, open_path, ui_state, ui_action_return, ui_action_enter, ui_action_popup_menu, get_file ↩

  21. fw-tv188b-260827-0003-r24--http-api--ext-command-params.c086 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · CGI libxxx_do.so r24 содержит сообщение «handle_http_request invalid timeout '%s' ignored» ↩

    • fw-tv188b-260827-0003-r24--http-api--ext-command-params.c088 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · CGI libxxx_do.so r24 содержит строки выбора формата ответа: result_syntax, «handle_http_request: syntax '%s'», «Warning: skipping adding ui_state response (json syntax required)» и MIME-тип application/json
    • fw-tv188b-260827-0003-r24--http-api--ext-command-params.c089 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · CGI libxxx_do.so r24 содержит проверку «extcmd_syntax == EXTCMD_SYNTAX_XML || extcmd_syntax == EXTCMD_SYNTAX_TEXT» и MIME-тип text/plain

    ↩

  22. fw-tv188b-260827-0003-r24--http-api--ext-command-params.c092 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 cmd=status отвечает, не меняя mtime ни одного файла /tmp/run/ext_command.* (request, response, status, state, ui_state и др.). ↩

  23. fw-tv188b-261021-0117-r25--media-player.c071 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 ответ cmd=status во время VOD содержит playback_speed, playback_duration, playback_position_version, playback_is_buffering, playback_volume, playback_mute, is_video, pause_is_available, teletext_available, scrambling_detected, audio_track.0.*, playback_caption, playback_extra_caption и playback_picture. ↩

  24. fw-tv188b-260827-0003-r24--http-api--ext-command-params.c042 · doc · any-documented; прошивка — · launch_media_url с media_url plugin_launcher://{name=<плагин>} запускает плагин; с {ep_media_url=…} — заданную точку входа, с {action_id=…} — действие, которое должно быть определено в манифесте плагина ↩

  25. fw-tv188b-261021-0117-r25.c341 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 cmd=launch_media_url с plugin_launcher://{name=test_plugin9}{ep_media_url=kbp9_ping} запустил точку входа плагина: число вызовов ping выросло 0 → 1. ↩

  26. fw-tv188b-260827-0003-r24--plugin-loader--online-upgrade.c078 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 запуск точки входа плагина по IP Control (launch_media_url plugin_launcher://{name=…}{ep_media_url=…}) вызывает проверку обновления check_update schema 2: оболочка грузит update info из check_update/url с тайм-аутом 1 («loading update info with timeout 1»), тогда как фоновая автопроверка — с тайм-аутом 5. ↩

  27. fw-tv188b-260827-0003-r24--http-api--ext-command-params.c096 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 launch_media_url с голой magnet-ссылкой (magnet:?xt=urn:btih:…) отклоняется: command_status=failed, error_kind=invalid_parameters, «'media_url' parameter value '…' is invalid: qualified url is expected»; в shell.log «[extcmd] launch_media_url failed: invalid media_url specified». ↩

  28. fw-tv188b-260827-0003-r24--http-api--ext-command-params.c097 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 launch_media_url с HTTPS-URL файла .torrent не запустил ни воспроизведение, ни плагин downloads: в shell.log только «[bp_dialog] root item #0 type URL caption ''» без строки элемента «#1: …», каталог /tmp/run/dl_input не изменился. ↩

  29. fw-tv188b-261021-0117-r25--media-player.c069 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 GUI-действие launch_media_url с M3U из www плагина вызывает b3 по plugin_launcher и передаёт from=gui. ↩

  30. fw-tv188b-261021-0117-r25--media-player.c070 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 am start -n PlayerProxyActivity -t audio/x-mpegurl без VIEW с URL M3U из www не вызывает b3: счётчик вызовов остаётся 1 → 1, активна MainActivity. ↩

  31. fw-tv188b-260827-0003-r24--plugin-loader--php-runtime--opexec.c037 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 cmd=main_screen и запуск по IP Control точки входа другого плагина, отправленные через 4 с после начала 20-секундного handle_user_input, эту операцию не отменяют: она дорабатывает до конца («end long», «result action null»), строк «q-removing … deactivate» и «canceled» нет. ↩

  32. fw-tv188b-261021-0117-r25--media-player.c055 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 IP Control set_playback_state speed=0 ставит plugin VOD на паузу. ↩

  33. fw-tv188b-261021-0117-r25--media-player.c056 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 IP Control set_playback_state speed=256 возобновляет plugin VOD после паузы. ↩

  34. fw-tv188b-261021-0117-r25--media-player.c057 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 IP Control set_playback_state position=30 перематывает plugin VOD к 30-й секунде. ↩

  35. fw-tv188b-261021-0117-r25--media-player.c059 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 IR PAUSE/PLAY при actions=color дают VOD-плагину playback_user_action с playback_event_type Pause/Resume. ↩

  36. fw-tv188b-260827-0003-r24--http-api.c053 · doc · any-documented; прошивка — · main_screen и ir_code — значения параметра cmd в /cgi-bin/do (IP Control); для ir_code код передаётся параметром ir_code ↩

  37. fw-tv188b-260827-0003-r24--http-api.c055 · doc · any-documented; прошивка — · cmd=ir_code в IP Control посылает ИК-код кнопки пульта (пример: ANGLE/ROTATE — ir_code=B24DBF00, код 00 BF 4D B2) ↩↩

  38. fw-tv188b-260827-0003-r24--http-api.c031 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · libduneshell.so содержит /proc/ir/button и сообщения «'ir_code' parameter is invalid/missing», «failed to pass IR-code» ↩

  39. plg-dune-remote-control.c067 · code · unknown; прошивка — · reboot.bash отправляет в /firmware/ext_command/cgi-bin/do запросы cmd=ir_code&ir_code=… с кодами DISCRETE_POWER_OFF=A15EBF00 и DISCRETE_POWER_ON=A05FBF00 раз в секунду: сначала до player_state=standby, затем до выхода из standby. ↩↩↩

  40. plg-dc-screenshoter.c069 · code · unknown; прошивка — · В режиме IR-кода скриншот делается запросом http:///cgi-bin/do?cmd=ir_code&ir_code=ef10bf00; путь файла плагин не знает и возвращает screenPath = auto ↩↩

  41. plg-dc-dune-backup.c124 · code · unknown; прошивка — · Строку в списке # плагин блокирует, отправляя локальные IR-коды через http://127.0.0.1<:11080 при flag_apk>/cgi-bin/do?cmd=ir_code&ir_code=…: AF50BF00 и EB14BF00 при выборе, EA15BF00 и EB14BF00 при подтверждении. ↩↩

  42. plg-gh-mdpuma-dune-plugin-altiptv.c085 · code · unknown; прошивка — · После zoom_apply плагин пишет EA15BF00 и E916BF00 в /proc/ir/button через shell_exec. ↩↩

  43. fw-tv188b-260827-0003-r24--http-api--ext-command-params.c051 · doc · any-documented; прошивка — · cmd=ui_action_return[&count=-1|N] — как нажатие RETURN в TV UI: -1 — на главный экран, N — назад на N экранов (по умолчанию 1) ↩

  44. fw-tv188b-260827-0003-r24--http-api--ext-command-params.c052 · doc · any-documented; прошивка — · cmd=ui_action_enter&item_id=… — как выбор пункта с этим ID на текущем экране TV UI и нажатие ENTER ↩

  45. fw-tv188b-260827-0003-r24--http-api--ext-command-params.c053 · doc · any-documented; прошивка — · cmd=ui_action_popup_menu&item_id=… — как выбор пункта с этим ID на текущем экране TV UI и нажатие POP UP MENU ↩

  46. fw-tv188b-260827-0003-r24--http-api--ext-command-params.c083 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · libduneshell.so r24 содержит сообщения о параметре item_id: «%s failed: 'item_id' parameter not specified» и «%s failed: wrong 'item_id' parameter: not found in current folder»; строка item_id стоит рядом с ui_action_enter в блоке ext_command_server ↩

  47. fw-tv188b-260827-0003-r24--http-api--ext-command-params.c079 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · libduneshell.so r24 содержит сообщения set_text: «set_text failed: text editor not active» и «set_text failed: 'text' parameter not specified», а также «text not available» ↩

  48. plg-gh-kocourkuba-proiptv.c080 · code · android-atv; прошивка — · send_ir_code_http для ключа из DuneIrControl::$key_codes отправляет ИК-код через локальный HTTP API /cgi-bin/do?cmd=ir_code&ir_code=<код> командой wget и проверяет ответ на command_status value="ok"; для неизвестного ключа возвращает false. Комментарий: в отличие от /proc/ir/button это работает на ATV (limited APK), где событие всё равно доходит до плагина. ↩

  49. plg-dc-screenshoter.c027 · code · unknown; прошивка — · Пункт меню power_off пишет код A15EBF00 в /proc/ir/button через shell_exec ↩

  50. plg-dc-torrent-center.c128 · code · unknown; прошивка — · Для ненулевого числового sleep_time Movie создаёт cron-строку выключения через echo A15EBF00 > /proc/ir/button с пометкой #sleep. ↩

  51. fw-tv188b-260827-0003-r24--http-api--ext-command-params.c030 · doc · any-documented; прошивка — · В протоколе 2 set_playback_state получил параметры video_enabled, video_zoom, video_fullscreen, video_x, video_y, video_width, video_height, volume и mute ↩

  52. fw-tv188b-260827-0003-r24--http-api--ext-command-params.c069 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · В том же блоке параметров r24 есть имена, которых нет в документе IP Control 1–5: open_playlist_item, set_repeat, set_shuffle, set_slideshow, loop_mode, shuffle_mode, black_screen_tmp, action_on_exit, volume_index, audio_track, subtitles_track, window_fullscreen, window_rect_x/y/width/height, clip_rect_, video_source_rect_, video_on_top, pip_zorder, video_zorder, osd_zorder, teletext_key, initial_audio_pid, pip_alpha_level, playlist_index; restart_playback в документе есть только как значение action_on_finish ↩

  53. fw-tv188b-260827-0003-r24--http-api--ext-command-params.c028 · doc · any-documented; прошивка — · При player_state file_playback или dvd_playback ответ содержит playback_speed, playback_duration (-1 или 0 — неизвестна), playback_position (-1 — неизвестна), playback_dvd_menu (1 — показано DVD-меню) и playback_is_buffering ↩

  54. fw-tv188b-260827-0003-r24--http-api--ext-command-params.c040 · doc · any-documented; прошивка — · В описании IP Control указано, что протокол 4 добавил cmd=open_path&url=URL для открытия папки, раздела меню или запуска пункта по root://…; приведён пример root://applications/RadioTime. ↩

  55. fw-tv188b-260827-0003-r24--http-api--ext-command-params.c015 · doc, disputed · any-documented; прошивка — · set_playback_state управляет воспроизведением параметрами speed (0 — пауза, 256 — продолжить), position (перемотка в секундах), black_screen и hide_osd; их можно сочетать в одном запросе ↩

  56. fw-tv188b-260827-0003-r24--http-api--ext-command-params.c064 · inference · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Документ IP Control (протоколы 1–5) для r24 неполон — прошивка, вероятно, реализует не описанный там протокол 6, к которому относятся недокументированные команды и параметры ответа ↩

  57. fw-tv188b-260827-0003-r24--http-api--ext-command-params.c066 · inference · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Блок имён c065, вероятно, — ключи состояния воспроизведения, которые ext_command отдаёт в ответе cmd=status (и в /tmp/run/ext_command.state); имена из документа (playback_speed, playback_duration, playback_is_buffering, teletext_available, playback_volume, playback_mute, playback_caption, playback_extra_caption, playback_picture, is_video) в нём совпадают ↩

  58. fw-tv188b-260827-0003-r24--http-api--ext-command-params.c067 · inference · tv188b, android-dune-fw; прошивка 260827_0003_r24 · r24, вероятно, не сообщает playback_dvd_menu из протокола 1: строки playback_dvd_menu нет в strings libduneshell.so (без обрезки) и libxxx_do.so tv188b, нет её и в tv175u, хотя соседние параметры документа (playback_speed, playback_duration, playback_is_buffering) есть ↩

  59. fw-tv188b-260827-0003-r24--http-api--ext-command-params.c070 · inference · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Окно видео в r24, вероятно, задаётся параметрами window_fullscreen и window_rect_x/y/width/height, а не video_fullscreen, video_x, video_y, video_width, video_height из протокола 2: последних строк нет в strings libduneshell.so и libxxx_do.so (video_width/video_height — только внутри playback_video_width/height) ↩

  60. fw-tv188b-260827-0003-r24--http-api--ext-command-params.c087 · inference · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Параметр timeout разбирает CGI do (не исполнитель в оболочке); недопустимое значение, вероятно, игнорируется, и действует таймаут по умолчанию ↩

  61. fw-tv188b-260827-0003-r24--http-api--ext-command-params.c090 · inference · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Кроме XML и JSON CGI do r24, вероятно, умеет недокументированный текстовый формат ответа (EXTCMD_SYNTAX_TEXT, text/plain); значение result_syntax для него неизвестно ↩

  62. fw-tv188b-260827-0003-r24--http-api--ext-command-params.c095 · inference · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 дополнительные пары {ключ=значение} в plugin_launcher://{name=…}{action_id=…}{ключ=значение}, по-видимому, доходят до данных запускаемого действия: open_magnet плагина downloads, который без magnet_url возвращает null, вернул следующее действие entry.ensure_ts. ↩

  63. fw-tv188b-260827-0003-r24--http-api.c022 · inference · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Вероятно, на tv188b r24 команды HTTP API, требующие исполнения оболочкой, передаются между процессами через /tmp/run/ext_command.request (с rename) и .response, со статусом/блокировкой .status/.lock; CGI ждёт ответа до таймаута. ↩