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

Различия по версиям и платформам

Справка: что известно о различиях версий и платформ. Каждое фактическое предложение ссылается на claim id. Основа — claims с scope.firmware.from или несколькими версиями в seen. Версии прошивок из SDK — «с такой-то версии» по тексту документа; на какой ветке (Sigma или Android) они действуют, документ не уточняет.

Платформы: Sigma SMP86xx, SMP87xx, Android

Вопрос SMP86xx SMP87xx Android
Механизм плагинов (манифест, www/, www/cgi-bin) базовый как на SMP86xx (SDK)1 как на SMP87xx (SDK)2
Архитектура основной копии bin/, www/cgi-bin/ MIPS (SDK)3 ARM, файлы из .platform.87xx/ (SDK)3 см. «Расхождения»
.platform.87xx при установке удаляется (SDK)4 переносится в корень (SDK)4 по тексту SDK — переносится в корень (SDK)5; на tv188b r25 (device) удалён, а применён .platform.android (устройство r25)6
FlashLite — не поддерживается (SDK)7 не поддерживается (SDK)8
HTML / Dune STB JS API — поддерживаются, движок QtWebkit, возможны отличия (SDK)7 поддерживаются на другом движке (SDK)8
Плеер — на основе SMP86xx, плюс DASH и H.265 (SDK)9 иное ядро, добавлены 4Kp60 и Widevine DRM (SDK)8
Фоновое воспроизведение — есть, плагин должен это учитывать (SDK)10 —
dune_plugins на накопителе — — мешает noexec (SDK)11
Лог плагина /tmp/run/<plugin_name>.log, tail -F через telnet (SDK)12 то же (SDK)12 то же, busybox tail -F через telnet/ADB (SDK)12; на tv188b r25 (device) — $FS_PREFIX/tmp/run/<плагин>.log, лимит 3072000 байт (устройство r25)13
Перезапуск оболочки killall shell (SDK)14 killall shell (SDK)14 killall com.dunehd.shell (SDK)14; на tv188b r25 (device) после am force-stop com.dunehd.app приложение поднимается само за 1–2 с (устройство r25)15

«—» означает, что в базе нет утверждения для этой ячейки, а не что возможности нет.

Как плагины определяют платформу

  • Screenshoter читает /tmp/run/versions.txt и сводит platform_kind к 87xx, 864x, 867x, 865x или android (код)16.
  • globaltv считает устройство Android-платформой, если существует файл /system/dunehd/init (код)17.
  • widget_ext несёт разные сборки curl: curl.864x и curl.867x — curl 7.19.5 под mipsel, curl.87xx — curl 7.36.0 под ARM (код)18.
  • На tv188b r25 (device) /tmp/run/versions.txt — шесть строк key=value, среди них platform_kind=android, а ключа android_platform нет (устройство r25)19; платформа APK записана в $FS_PREFIX/firmware/config/fw_apk_platform.txt (s928x_android11) (устройство r25)20. Ответ /cgi-bin/do?cmd=status содержит product_id, firmware_version, app_version и product_name (устройство r25)21.

Расхождения

Правило для .platform.* на Android в SDK буквально говорит: .platform.android удаляется, а .platform.87xx переносится в корень (SDK)5. На tv188b r25 (device) установщик сделал наоборот: применил .platform.android (и затем .platform.android-arm-api19) (устройство r25)22 и удалил .platform.87xx (устройство r25)23; стороны связаны conflicts_with. Для других прошивок порядок не проверен; гипотеза аналитика — в «Не проверено». Подробнее — в guide/plugin-packaging.md.

Описание restart_gui в ChangeSettingsAction в SDK дословно то же, что у reboot («whether to reboot STB immediately») (SDK)24. На tv188b r25 (device) restart_gui=true при reboot=false перезапустил приложение Dune, а не приставку (устройство r25)25. Стороны связаны conflicts_with.

По SDK тайм-аут операций плагина по умолчанию — 10 с (SDK)26. На tv188b r25 (device) handle_user_input без operation_timeout стартует с «timeout=60.0s» (устройство r25)27. Стороны связаны conflicts_with.

Версии прошивки по SDK

С версии Что появилось Claim
120531_2200_beta тип движка plain для чистых FlashLite/HTML-плагинов (SDK)28
120531_2200_beta www/ и CGI плагина доступны из локальной сети (SDK)29
120531_2200_beta действия file_play, launch_media_url, change_behavior и др., события timer, playback_stop (SDK)30
120901 section_index и is_default_section (SDK)31
130315_b6 / 130515_2104_b6 global plugin actions (две версии в одном разделе) (SDK)32
130315_b6 show_action (не рекомендуется) (SDK)33
130424_b6 родительские папки root://video, root://games, root://setup и др. (SDK)34
130906_b8 section_index/is_default_section не только для root://applications (SDK)35
130914_b8 событие gui_start (SDK)36
130917_b9 событие boot_end (SDK)37
131106_b6 small_icon_url (SDK)38
150326_r10 собственная подпись плагинов, customer ID как signer ID (SDK)39
150430_r10 фоновая автопроверка обновлений check_update/auto (SDK)40

Тип plain расходится с разделом манифеста, где поддерживаемым назван только php (SDK)41 ↔ (SDK)28. Версия появления global plugin actions указана двояко (SDK)42 ↔ (SDK)43.

Сравнения версий прошивки в Expr прошивки r24 строковые (strcmp) (код r24)44 — сравнивать версии плагину лучше осторожно.

Android-прошивки: r22 → r24

Наблюдения по сравнению прошивок tv188b 250815_1012_r22 и 260827_0003_r24 и tv175u.

  • В firmware_features.txt r24 по сравнению с r22 добавлены флаги dunemdb_supplier_plugin_api_v7, sup_api_v8, movie_suppliers_order, lcfg_v2, light_stop (код r24)45.
  • В r22 DunePluginFw::invoke_operation не обрабатывает get_vod_stream_info, в r24 обрабатывает (код r22, r24)46.
  • В dune_api.php r22 нет ряда классов и констант, которые есть в r24 (ChooseFileActionData, PluginStreamInfo, GUI_EVENT_NETWORK_CHANGE и др.) (код r22, r24)47.
  • bootstrap.php, dune_config.php, dune_plugin.php и dunelib/dune_countries.php одинаковы в tv175u 240619_0210_r22, tv188b 250815_1012_r22 и r24-прошивках, а dunelib/config_utils, dune_languages, expr, utils в r22 отсутствуют (код r22, r24)48.
  • Все 10 PHP-файлов фреймворка в tv175u 260724_0207_r24 совпадают по sha256 с tv188b 260827_0003_r24 (код r24)49.

Android-прошивки: r24 → r25

Сравнение tv188b 260827_0003_r24 и 261021_0117_r25 (тестовая сборка, Android 11 та же (код r25)50). Код — code, наблюдения на устройстве r25 — device.

PHP-рантайм:

  • libphp5.so r25 — другой файл, чем в r24 (r24 совпадает с tv175u r24 и APK r24) (код r22, r24, r25)51. В strings r25 вместо _php_add_http_port — _php_add_fs_prefix_to_http (код r22, r24, r25)52 и новые пути /config/lcreg.txt, %s/config/lcreg_pairs.txt (код r25)53; что это меняет в поведении, не разобрано.
  • Строка версии — PHP/5.3.6 во всех пяти сборках (tv188b r22, r24, r25, tv175u r24, APK r24) (код r22, r24, r25)54, на r25 это подтверждает PHP_VERSION (устройство r25)55. Наборы имён curl_multi_* и CURLOPT_* в strings одинаковы у всех пяти (код r22, r24, r25)56.
  • CA-бандл одинаков во всех пяти сборках (SHA-256) (код r22, r24, r25)57, данные Mozilla от 11 октября 2022 года (код r22, r24, r25)58.

Флаги и окружение:

  • В firmware_features.txt r25 новый флаг downloads (код r25)59; при /tmp/flm.txt код r25 убирает его из набора (код r25)60. На устройстве r25 флаг есть (устройство r25)61, а /tmp/flm.txt нет (устройство r25)62.
  • Код r24 читает из versions.txt ключ android_platform (код r24)63, а в файле r25 его нет (устройство r25)19.

Поставщики «Фильмов» и история (подробно — guide/movie-suppliers.md):

  • r25 перечитывает поставщиков ещё и по mtime /tmp/movie_suppliers (код r25)64, обрезает хвостовые пробелы stdout поставщика до json_decode (код r25)65 и впервые читает fixed_trailer_files (код r25)66.
  • В r24 кнопки поставщиков в диалоге выбора воспроизведения sup_info не получали (код r24)67, в r25 его получает кнопка поставщика последней записи истории (код r25)68. Процент у кнопки r25 пишет только для недосмотренной записи (код r25)69.
  • shell_ext/android_apps/model.php (запуск приложений) в r24 такой же, как в r25 (код r24)70.
  • Нативный launch_ext_app r25 отличается от APK DMC 260724_0207_r24 только веткой dunehd_service (код r25)71: в r25 cmd с /system/dunehd/dunehd_service идёт в popen (код r25)72, в DMC такой ветки нет (код r24)73. В tv188b r24 (code) ветка dunehd_service есть: cmd с этим путём с начала строки идёт в popen-помощник, иначе — в apk_helper (код r24)74; apk_helper требует префикс am start, снимает кавычки и зовёт JNI startActivityFromArgs (код r24)75; ожидание фокуса и command_status — (код r24)76–(код r24)77. Поведение на устройстве r24 не проверялось.

Операции плагина (подробно — guide/plugin-operations.md):

  • В коде r24 отмена операции PHP-плагина по тайм-ауту только ставит флаг в дескрипторе (код r24)78; на r25 (device) по тайм-ауту php_server убит (устройство r25)79. Сборки разные; какая ветка кода останавливает процесс, claims не говорят.
  • В r25 php_server сам пишет /tmp/run/%s.pid, в r24 этой строки нет (код r25)80; в сообщениях исполнителя r25 новый формат «%s->%s(%s.%s)» (код r25)81.

Воспроизведение и загрузки по прошивкам

Подробно — guide/playback.md §5 и guide/downloads-torrserver.md §5.

  • r22 не обрабатывает get_vod_stream_info (код r22, r24)46, в его dune_api.php нет StreamMarker и PluginStreamInfo (код r22, r24)47. На r25 (device) оболочка читает markers серии (устройство r25)82, а get_vod_stream_info для ленивой серии не вызывался (устройство r25)83.
  • subtitles.php в r24 и r25 — один и тот же файл (код r24, r25)84; libvlc.so и libxxx_dune_mediainfo.so r24 по SHA256 отличаются от r25 (код r24, r25)85.
  • PluginVodInfo::buffering_ms на r25 (device) применяется: «setting buffering to 3000ms» (устройство r25)86; SDK называет поле нереализованным (SDK)87.
  • Плагин downloads в r25 добавлен к 13 плагинам r24 (код r25)88; dl_manager в r24 нет (код r24)89. Среди 12 встроенных плагинов APK r24 downloads нет (код r24)90.
  • TorrServer есть во всех трёх сборках: libxxx_ts.so и firmware/bin/ts в tv188b r24 (код r24)91 и r25 (код r25)92, libxxx_ts.so — TorrServer MatriX.134 в APK r24 (код r24)93.

Старые прошивки (форум)

По сообщениям пользователей, в Dune 301 (150721_0136_B9) предустановленные плагины лежат в firmware_ext (форум)94. Участник темы mydune перенёс dune_api.php из прошивки r11 в b9 (Dune 301), рассчитывая на sel_id и post_action в open_folder(); результат в теме не сообщён (форум)95. По мнению другого участника (Brigadir), такого переноса недостаточно: параметры уходят в шелл в виде JSON, и шелл тоже должен быть обновлён (форум r11)96. В прошивках tv188b и tv175u (r22 и r24) dune_api.php помечен как автогенерируемый (код r22, r24)97 (код r22, r24)98; что его генерирует сам шелл — только предположение (см. guide/unverified.md).

Не проверено

Что Claim Что показал r25 (device)
.platform.* на Android задумано как на SMP87xx: .platform.android — в корень, .platform.87xx — удаляется (inference) (вывод)99 так и было (устройство r25)6
Таймаут считает оболочка, PHP-вызов не прерывается (r24, inference, disputed) (вывод r24)100 в пределах срока sleep(15) доработал (устройство r25)101; по истечении срока php_server убит (устройство r25)79

Чего не хватает

  • Нет ни одной разобранной Sigma-прошивки: строки Sigma в таблице — только из SDK.
  • Версии SDK не привязаны к ветке прошивок (Sigma/Android); соответствие версий r22/r24 старым b6/b8/r10 в базе не установлено.

  1. doc-sdk-plugins.c128 · doc · sigma-smp86xx, sigma-smp87xx; прошивка — · Все возможности фреймворка PHP-плагинов и механизма плагинов (манифест, www/, www/cgi-bin) поддерживаются на SMP87xx так же, как на SMP86xx ↩

  2. doc-sdk-plugins.c134 · doc · sigma-smp87xx, android; прошивка — · Все возможности фреймворка PHP-плагинов и механизма плагинов поддерживаются на Android так же, как на Sigma (SMP87xx) ↩

  3. doc-sdk-plugins.c132 · doc · sigma-smp86xx, sigma-smp87xx; прошивка — · Платформенные файлы для SMP87xx (ARM) кладутся в .platform.87xx/ в корне плагина; основная копия (bin/, www/cgi-bin/) — для SMP86xx (MIPS) ↩↩

  4. doc-sdk-plugins.c133 · doc · sigma-smp86xx, sigma-smp87xx; прошивка — · При установке на SMP86xx содержимое .platform.87xx удаляется, на SMP87xx — переносится в корень каталога установки плагина ↩↩

  5. doc-sdk-plugins.c137 · doc · android; прошивка — · Текст документа буквально говорит: при установке на Android содержимое .platform.android удаляется, а содержимое .platform.87xx переносится в корень ↩↩

    • fw-tv188b-261021-0117-r25.c214 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 штатный установщик ZIP применил к корню плагина сначала .platform.android (скопировал only_android.txt и bin/marker.txt в корень), затем поверх — .platform.android-arm-api19 (bin/marker.txt перезаписан); в установленном плагине bin/marker.txt = «.platform.android-arm-api19» и есть only_android.txt. В shell.log — «[plugin_installer] applying /tmp/plugin_tmp/.platform.».
    • fw-tv188b-261021-0117-r25.c215 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 штатный установщик ZIP не применил .platform.87xx и .platform.foo и удалил все четыре каталога .platform.* (android-arm-api19, 87xx, android, foo: «[plugin_installer] removing /tmp/plugin_tmp/.platform.») до копирования; в установленном плагине нет ни каталогов .platform.*, ни only_87xx.txt.

    ↩↩

  6. doc-sdk-plugins.c129 · doc · sigma-smp87xx; прошивка — · SMP87xx не поддерживает FlashLite; HTML-приложения и Dune STB JS API поддерживаются, но на другом движке браузера (QtWebkit) с возможными отличиями ↩↩

  7. doc-sdk-plugins.c135 · doc · android; прошивка — · Android-платформы не поддерживают FlashLite; HTML/JS API поддерживаются на другом движке; ядро плеера иное, хотя добавлены 4Kp60 и Widevine DRM ↩↩↩

  8. doc-sdk-plugins.c130 · doc · sigma-smp87xx; прошивка — · Плеер SMP87xx основан на плеере SMP86xx, поддерживает те же протоколы и форматы и больше (например DASH и H.265), но возможны несовместимости ↩

  9. doc-sdk-plugins.c131 · doc · sigma-smp87xx; прошивка — · На SMP87xx есть фоновое воспроизведение (TOP MENU возвращает в меню при продолжении проигрывания); плагин должен учитывать навигацию по своим экранам во время своей сессии воспроизведения ↩

  10. doc-sdk-plugins.c136 · doc · android; прошивка — · На Android пользовательские накопители монтируются с noexec, что мешает механизму dune_plugins ↩

  11. doc-sdk-plugins.c139 · doc · sigma-smp86xx, sigma-smp87xx, android; прошивка — · Лог плагина — /tmp/run/.log (Sigma: tail -F через telnet; Android: busybox tail -F через telnet/ADB) ↩↩↩

  12. fw-tv188b-261021-0117-r25.c329 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 php_server при старте пишет «Starting logging to '/data/data/com.dunehd.app/tmp/run/<плагин>.log' (<= 3072000)»; в окружении php_server LOG_DIR=/tmp/run и LOG_MAX_FILE_SIZE=3072000. ↩

  13. doc-sdk-plugins.c141 · doc · sigma-smp86xx, sigma-smp87xx, android; прошивка — · Перезапуск процесса оболочки (перезагрузка всех плагинов): на Sigma — killall shell, на Android — killall com.dunehd.shell ↩↩↩

  14. fw-tv188b-261021-0117-r25.c084 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 после am force-stop com.dunehd.app приложение Dune поднимается само (новый pid) за 1–2 с, без am start. ↩

  15. plg-dc-screenshoter.c040 · code · sigma-smp86xx, sigma-smp87xx, android; прошивка — · HD::get_platform_kind() читает /tmp/run/versions.txt через parse_ini_file и сводит platform_kind к 87xx, 864x, 867x, 865x или android ↩

  16. plg-dc-globaltv.c060 · code · android; прошивка — · Android-платформу плагин определяет по существованию файла /system/dunehd/init. ↩

  17. plg-dc-widget-ext.c067 · code · sigma-smp86xx, sigma-smp87xx; прошивка — · Вложенные бинарники curl: curl.864x и curl.867x — curl 7.19.5 (mipsel-unknown-linux-gnu), curl.87xx — curl 7.36.0 (arm-buildroot-linux-gnueabi) из sigma-buildroot_2014.05 (bdk8756) ↩

  18. fw-tv188b-261021-0117-r25.c122 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 /tmp/run/versions.txt (145 байт, system:system) — шесть строк key=value: api_version=1.1.0, firmware_version=261021_0117_r25, product=tv188b, platform_kind=android, app_version=1.0.1-13-261021_0117_r25, app_version_code=13; ключа android_platform нет. ↩↩

  19. fw-tv188b-261021-0117-r25.c097 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 $FS_PREFIX/firmware/config/fw_apk_platform.txt содержит s928x_android11. ↩

  20. fw-tv188b-261021-0117-r25.c100 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 ответ /cgi-bin/do?cmd=status содержит product_id=tv188b, serial_number, firmware_version=261021_0117_r25, commercial_serial_number, app_version=1.0.1-13-261021_0117_r25 и product_name=«Pro 8K Plus» — те же значения, что в тот же момент лежат в product_id.txt, firmware_version.txt, /tmp/sysinfo.txt и /fconfig/mname.txt. ↩

  21. fw-tv188b-261021-0117-r25.c214 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 штатный установщик ZIP применил к корню плагина сначала .platform.android (скопировал only_android.txt и bin/marker.txt в корень), затем поверх — .platform.android-arm-api19 (bin/marker.txt перезаписан); в установленном плагине bin/marker.txt = «.platform.android-arm-api19» и есть only_android.txt. В shell.log — «[plugin_installer] applying /tmp/plugin_tmp/.platform.». ↩

  22. fw-tv188b-261021-0117-r25.c215 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 штатный установщик ZIP не применил .platform.87xx и .platform.foo и удалил все четыре каталога .platform.* (android-arm-api19, 87xx, android, foo: «[plugin_installer] removing /tmp/plugin_tmp/.platform.») до копирования; в установленном плагине нет ни каталогов .platform.*, ни only_87xx.txt. ↩

  23. doc-sdk-plugins--gui-actions.c122 · doc · any-documented; прошивка — · Поле reboot в ChangeSettingsAction определяет, перезагрузить ли приставку немедленно; описание restart_gui в документе дословно то же («whether to reboot STB immediately») ↩

  24. fw-tv188b-261021-0117-r25.c072 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 ChangeSettingsAction с restart_gui=true, reboot=false и пустыми settings перезапускает приложение Dune, а не приставку. Оболочка пишет «APK: trigger restart», pid com.dunehd.app меняется 17983 → 19586, а /proc/uptime растёт непрерывно (129033 → 129116 с). ↩

  25. doc-sdk-plugins.c042 · doc · any-documented; прошивка — · По SDK тайм-аут операций плагина по умолчанию составляет 10 секунд; operation_timeout задаёт общий () и потиповой (N) тайм-аут. ↩

  26. fw-tv188b-261021-0117-r25.c309 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 операция handle_user_input PHP-плагина без operation_timeout в манифесте (test_plugin5, test_plugin6; ENTER на точке входа с plugin_handle_user_input) стартует с тайм-аутом 60 с: в shell.log «…->handle_user_input(…): start (timeout=60.0s)». ↩

  27. doc-sdk-plugins.c102 · doc · any-documented; прошивка — · Для чистых FlashLite/HTML-плагинов вместо 'php' можно указать тип 'plain' — тогда PHP-программа и параметр program не нужны ↩↩

  28. doc-sdk-plugins.c096 · doc · any-documented; прошивка — · Файлы www/ и CGI из www/cgi-bin/ плагина доступны по HTTP не только локально, но и из локальной сети ↩

  29. doc-sdk-plugins.c104 · doc · any-documented; прошивка — · В 120531_2200_beta добавлены действия file_play, dvd_play, bluray_play, playlist_play, launch_media_url, change_behavior, show_black_screen, show_main_screen и события timer, playback_stop ↩

  30. doc-sdk-plugins.c033 · doc · any-documented; прошивка — · section_index и is_default_section (с прошивки 120901) выводят точку входа как раздел главного экрана в стиле «Folders»; is_default_section делает её фокусной при первом входе ↩

    • doc-sdk-plugins.c120 · doc · any-documented; прошивка — · Заголовок раздела «Global plugin actions» указывает доступность с прошивки 130315_b6
    • doc-sdk-plugins.c121 · doc · any-documented; прошивка — · Текст того же раздела указывает доступность global plugin actions с прошивки 130515_2104_b6

    ↩

  31. doc-sdk-plugins.c040 · doc · any-documented; прошивка — · show_action (с 130315_b6) — GUI-действие, код завершения которого (0 — показать) решает видимость точки входа; документ не рекомендует его и советует show_cookie_name ↩

  32. doc-sdk-plugins.c032 · doc · any-documented; прошивка — · Папки root://video, root://music_and_radio, root://news_and_weather, root://social_networks, root://games, root://setup доступны как родитель точки входа с прошивки 130424_b6 ↩

  33. doc-sdk-plugins.c034 · doc · any-documented; прошивка — · В прошивках, отличных от 130906_b8+, section_index и is_default_section действуют только при parent_media_url = root://applications ↩

  34. doc-sdk-plugins.c125 · doc · any-documented; прошивка — · Событие gui_start (с 130914_b8) срабатывает при старте штатного GUI (загрузка или выход из software standby), после мастера первоначальной настройки; при кастомном stb-home не срабатывает ↩

  35. doc-sdk-plugins.c124 · doc · any-documented; прошивка — · Событие boot_end (с 130917_b9) срабатывает в самом конце загрузки; /tmp/sysinfo.txt уже гарантированно есть; GUI-действия недоступны ↩

  36. doc-sdk-plugins.c036 · doc · any-documented; прошивка — · small_icon_url (с прошивки 131106_b6) — малая иконка плагина для path box и списка; поддерживаются URL plugin_file:// и gui_skin:// ↩

    • doc-sdk-plugins.c116 · doc · any-documented; прошивка — · Допустимые signer ID: «com.dune-hd» (только Dune HD) и customer ID кастомной прошивки (с 150326_r10)
    • doc-sdk-plugins.c119 · doc · any-documented; прошивка — · Собственная подпись (150326_r10+): DSA-ключи 2048 через openssl, подпись утилитой plugin_sign.x86 , публичный ключ кладётся в прошивку как /firmware/config/plugin_key.pem

    ↩

  37. doc-sdk-plugins.c109 · doc · any-documented; прошивка — · check_update/auto включает фоновую автопроверку обновлений (по умолчанию выключена), доступно с прошивки 150430_r10 ↩

  38. doc-sdk-plugins.c030 · doc · any-documented; прошивка — · Раздел манифеста утверждает, что из типов движка (dune_plugin->type) поддерживается только 'php' с единственным обязательным параметром 'program' — путём к главному PHP-файлу ↩

  39. doc-sdk-plugins.c120 · doc · any-documented; прошивка — · Заголовок раздела «Global plugin actions» указывает доступность с прошивки 130315_b6 ↩

  40. doc-sdk-plugins.c121 · doc · any-documented; прошивка — · Текст того же раздела указывает доступность global plugin actions с прошивки 130515_2104_b6 ↩

  41. fw-tv188b-260827-0003-r24--php-framework.c045 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Сравнения версий в Expr (fwv_ge/gt/le/lt) строковые: strcmp(firmware_version, аргумент) ↩

  42. fw-tv188b-260827-0003-r24.c040 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · По сравнению с 250815_1012_r22 в firmware_features.txt r24 добавлены флаги dunemdb_supplier_plugin_api_v7, sup_api_v8, movie_suppliers_order, lcfg_v2, light_stop ↩

  43. fw-tv188b-260827-0003-r24--php-framework.c079 · code · tv188b, android-dune-fw; прошивка 250815_1012_r22, 260827_0003_r24 · В 250815_1012_r22 (tv188b) DunePluginFw::invoke_operation не обрабатывает get_vod_stream_info, а в get_out_type_code нет PLUGIN_OP_GET_VOD_STREAM_INFO; в 260827_0003_r24 они есть ↩↩

  44. fw-tv188b-260827-0003-r24--php-framework.c080 · code · tv188b, android-dune-fw; прошивка 250815_1012_r22, 260827_0003_r24 · В dune_api.php 250815_1012_r22 (tv188b) нет классов ChangeMovieDataActionData, ChooseFileActionData, CreateNetworkFolderActionData, CustomIgnoreUpdateActionData, EditMovieDataActionData, FileChooserFilter, FileChooserUiParams, PluginExitFoldersActionData, PluginStreamInfo, PluginTvChannelChange, PluginUpdateTvInfoActionData, PluginVodGetStreamInfoInputData, StreamMarker, SyncMyCollectionActionData, WakeNetworkFolderActionData и соответствующих ACTION_ID, STREAM_MARKER, PLUGIN_OP_GET_VOD_STREAM_INFO, GUI_EVENT_CONFIRM_UPDATE, GUI_EVENT_KEY_FAVORITES, GUI_EVENT_NETWORK_CHANGE, GUI_EVENT_TOPMENU_REFRESH; в 260827_0003_r24 они есть ↩↩

  45. fw-tv188b-260827-0003-r24--php-framework.c082 · code · tv188b, tv175u, android-dune-fw; прошивка 240619_0210_r22, 250815_1012_r22, 260724_0207_r24, 260827_0003_r24 · bootstrap.php, dune_config.php, dune_plugin.php и dunelib/dune_countries.php одинаковы (sha256) в tv175u 240619_0210_r22, tv188b 250815_1012_r22 и r24-прошивках; dunelib/config_utils, dune_languages, expr, utils в r22-прошивках отсутствуют ↩

  46. fw-tv188b-260827-0003-r24--php-framework.c081 · code · tv188b, tv175u, android-dune-fw; прошивка 260724_0207_r24, 260827_0003_r24 · Все 10 PHP-файлов фреймворка в tv175u 260724_0207_r24 совпадают по sha256 с tv188b 260827_0003_r24 ↩

  47. fw-tv188b-261021-0117-r25.c004 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · Система r25 — та же база Android 11 (RD2A.211001.002), userdebug/test-keys, плата tyson; сборка от 2026-10-20 ↩

  48. fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c028 · code · android-atv, android-dune-fw; прошивка 260724_0207_r24, 260827_0003_r24, 240619_0210_r22, 250815_1012_r22, 261021_0117_r25 · libphp5.so APK 260724_0207_r24 совпадает по sha256 (e28ffc74…) с libphp5.so прошивок tv175u 260724_0207_r24 и tv188b 260827_0003_r24; в tv175u 240619_0210_r22 и tv188b 250815_1012_r22 файл другой (e7d22b70…), в tv188b 261021_0117_r25 — тоже (4a31ef48…) ↩

  49. fw-tv188b-261021-0117-r25--libphp5.c029 · code · android-dune-fw, android-atv; прошивка 261021_0117_r25, 260827_0003_r24, 250815_1012_r22, 260724_0207_r24, 1.0.1-1000-260724_0207_r24 · В strings libphp5.so tv188b r25 присутствует _php_add_fs_prefix_to_http вместо имени _php_add_http_port из r24 и r22. ↩

  50. fw-tv188b-261021-0117-r25--libphp5.c030 · code · android-dune-fw; прошивка 261021_0117_r25 · В strings libphp5.so tv188b r25 присутствуют пути /config/lcreg.txt и %s/config/lcreg_pairs.txt. ↩

  51. fw-tv188b-261021-0117-r25--libphp5.c001 · code · android-dune-fw, android-atv; прошивка 261021_0117_r25, 260827_0003_r24, 250815_1012_r22, 260724_0207_r24, 1.0.1-1000-260724_0207_r24 · В strings libphp5.so пяти исследованных сборок присутствует строка PHP/5.3.6. ↩

  52. fw-tv188b-261021-0117-r25--libphp5.c002 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В тестовом плагине test_plugin5 на tv188b 261021_0117_r25 значение PHP_VERSION равно 5.3.6. ↩

  53. fw-tv188b-261021-0117-r25--libphp5.c028 · code · android-dune-fw, android-atv; прошивка 261021_0117_r25, 260827_0003_r24, 250815_1012_r22, 260724_0207_r24, 1.0.1-1000-260724_0207_r24 · Наборы имён curl_multi_* (12) и CURLOPT_* (111) в strings libphp5.so совпадают у всех пяти исследованных сборок. ↩

  54. fw-tv188b-261021-0117-r25--libphp5.c036 · code · android-dune-fw, android-atv; прошивка 261021_0117_r25, 260827_0003_r24, 250815_1012_r22, 260724_0207_r24, 1.0.1-1000-260724_0207_r24 · CA-бандлы всех пяти исследованных сборок совпадают по SHA-256 722be2869ed2c2a949e5edb75b030f1e737e869ca8e8f70bc8d876dd93227ead. ↩

  55. fw-tv188b-261021-0117-r25--libphp5.c037 · code · android-dune-fw, android-atv; прошивка 261021_0117_r25, 260827_0003_r24, 250815_1012_r22, 260724_0207_r24, 1.0.1-1000-260724_0207_r24 · Заголовки CA-бандлов пяти исследованных сборок датируют данные Mozilla 11 октября 2022 года. ↩

  56. fw-tv188b-261021-0117-r25.c026 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · firmware_features.txt r25 содержит новый флаг downloads ↩

  57. fw-tv188b-261021-0117-r25.c025 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · ConfigUtils::load_firmware_features() в r25 убирает флаг downloads из набора, если есть файл /tmp/flm.txt (комментарий: оболочка создаёт его для «lite»-лицензии без загрузок) ↩

  58. fw-tv188b-261021-0117-r25.c101 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 /tmp/firmware_features.txt — по флагу в строке: tmpfs, dunemdb_supplier_plugin_api_v2…v7, sup_api_v8, tv_config, newgui2021, app_root_url_type, movie_suppliers_update, movie_suppliers_order, url_sdcard, lcfg_v2, light_stop, apk, fw_apk, drm_apps, downloads. ↩

  59. fw-tv188b-261021-0117-r25.c115 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 файла /tmp/flm.txt нет. ↩

  60. fw-tv188b-260827-0003-r24--php-framework.c041 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · ConfigUtils::load_product_and_fw() читает /tmp/run/versions.txt (key=value: firmware_version, product, platform_kind, android_platform); для fw_apk android_platform берётся из /firmware/config/fw_apk_platform.txt ↩

  61. fw-tv188b-261021-0117-r25.c052 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · Suppliers::reload_if_changed (в r24 — reload_suppliers_if_changed) перечитывает поставщиков не только при наличии флага-файла, но и при смене mtime каталога /tmp/movie_suppliers ↩

  62. fw-tv188b-261021-0117-r25--movie-suppliers.c016 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В r25 do_cmd обрезает завершающие пробельные символы stdout через rtrim до измерения длины, debug-печати и json_decode. ↩

  63. fw-tv188b-261021-0117-r25.c054 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В r25 suppliers.php впервые читает ключ описателя поставщика fixed_trailer_files (сам ключ был и в r24 — в описателе rutube): для трейлеров (ass_type 1) Suppliers берёт этот массив вместо запроса поиска файлов; не массив — пустой список ↩

  64. fw-tv188b-261021-0117-r25--shell-ext--entry-handler.c074 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · В r24 диалог выбора воспроизведения давал кнопкам play_online поставщиков только s, e и sup_id, без sup_info; wh_* доходили до поставщика лишь через entry/play_recent. ↩

  65. fw-tv188b-261021-0117-r25--shell-ext--entry-handler.c060 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В r25 диалог выбора воспроизведения строит для каждого поставщика (с дедупликацией по key_show_only_one) кнопку play_online с s, e, sup_id; только кнопке поставщика, чей id равен whi_sup_id последней записи истории, добавляется sup_info из get_wh_supplier_info. ↩

  66. fw-tv188b-261021-0117-r25--shell-ext--entry-handler.c059 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · MovieHelper::get_play_action_suffix (r25) даёт подпись кнопки только если запись истории фильма по ключу all или x имеет прогресс и whi_sup_id равен поставщику кнопки; процент («NN%», без скобок) пишется лишь для не досмотренной записи, а для всего фильма с эпизодом подпись — «[S: E NN%]» или «[S: E]». ↩

  67. fw-tv188b-261021-0117-r25--app-launch.c016 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · В r24 (tv188b) finalize_launch_cmd, plain_launch_app и чтение app_data.json в shell_ext/android_apps/model.php такие же, как в r25 (diff файлов — две строки, не про запуск). ↩

  68. fw-tv188b-261021-0117-r25--app-launch.c045 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В tv188b r25 функции libduneshell.so fcn.006f2b60 (apk_helper), fcn.00094884 (JNI startActivityFromArgs), fcn.00560a58 (ожидание фокуса), fcn.00560d20 и fcn.005605f4 (popen-помощники) совпадают с fcn.006e5630, fcn.00092710, fcn.0055b7c0, fcn.0055ba88 и fcn.0055b35c APK DMC по размеру и последовательности инструкций (без учёта адресов; в JNI различается путь исходника в __assert2), а обработчик launch_ext_app fcn.00560ee8 (580 байт) отличается от fcn.0055bc50 DMC (492 байта) веткой dunehd_service (c072, c057). ↩

  69. fw-tv188b-261021-0117-r25--app-launch.c072 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В tv188b r25 нативный обработчик launch_ext_app (fcn.00560ee8 libduneshell.so), если ветка остановки воспроизведения не вернула управление раньше, для cmd, в которой есть непробельный символ, сравнивает начало cmd с «/system/dunehd/dunehd_service» (strncmp на 0x1d символов, ведущие пробелы не пропускаются): при совпадении печатает «gui_action D: run command '%s'» и передаёт cmd помощнику fcn.00560d20 (popen), иначе печатает «gui_action D: launch activity for command '%s'» и передаёт cmd разборщику apk_helper fcn.006f2b60; если помощник вернул −1, cmd дополнительно уходит в ветку launch activity. ↩

  70. fw-tv188b-261021-0117-r25--app-launch.c030 · code · android-atv; прошивка 260724_0207_r24 · В APK DMC обработчик launch_ext_app (fcn.0055bc50, печатает «[gui_action] cmd '%s', ensure_playback_stopped %d, delay: %d») при непустой cmd с непробельным символом печатает «gui_action D: launch activity for command '%s'» и передаёт cmd целиком разборщику apk_helper (fcn.006e5630); ветки «run command», вызова popen или system в функции нет — shell-команды через launch_ext_app в DMC не выполняются. ↩

  71. fw-tv188b-261021-0117-r25--app-launch--native.c002 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · На этапе обработки cmd в tv188b r24 обработчик launch_ext_app fcn.0054a368 при наличии непробельного символа в cmd сравнивает первые 0x1d байт исходной cmd с «/system/dunehd/dunehd_service»: совпадение направляет cmd в fcn.0054a1a0, иначе — в apk_helper fcn.006d4c9c; ведущие пробелы перед путём при этом сравнении не пропускаются. ↩

    • fw-tv188b-261021-0117-r25--app-launch--native.c007 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · В tv188b r24 apk_helper fcn.006d4c9c пропускает ведущие пробельные байты помощником fcn.006d4784 с isspace и требует префикс «am start » (strncmp на 9 байт); при несовпадении пишет «unsupported command (1)» и возвращает -1.
    • fw-tv188b-261021-0117-r25--app-launch--native.c008 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · В tv188b r24 apk_helper fcn.006d4c9c ищет разделитель некавыченных аргументов после «am start » как байт 0x20 и снимает парные одинарные либо двойные кавычки; внутри двойных кавычек обратная косая увеличивает шаг сканирования до 2, но сохраняется в передаваемом сегменте; при незакрытой кавычке берётся остаток строки.
    • fw-tv188b-261021-0117-r25--app-launch--native.c010 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · В tv188b r24 apk_helper fcn.006d4c9c при непустом списке аргументов вызывает JNI-помощник fcn.00091b04, обращающийся к startActivityFromArgs с сигнатурой ([Ljava/lang/String;)Z; false даёт сообщение «jni returned error status» и статус -1, true — статус 0.

    ↩

  72. fw-tv188b-261021-0117-r25--app-launch--native.c011 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · В tv188b r24 ожидание потери фокуса fcn.00549ed8 сначала проверяет, потерян ли фокус уже (тогда результат 1), затем delay < 1 (тогда timed-out и 0); при положительном delay опрашивает фокус с usleep(100000) до истечения delay секунд, возвращая ненулевой результат при потере фокуса и 0 при тайм-ауте. ↩

  73. fw-tv188b-261021-0117-r25--app-launch--native.c013 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · В tv188b r24 обработчик fcn.0054a368 при нулевом статусе запуска либо пустой/пробельной cmd вызывает ожидание фокуса fcn.00549ed8 с полем +8 (delay): при результате 0 следующим действием становится результат помощника с полем +0x1c; при ненулевом результате вызывается помощник с полями +0xc/+0x10 и, если поле +0x14 не NULL, показывается тост. ↩

  74. fw-tv188b-260827-0003-r24--plugin-loader--php-runtime--opexec.c017 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Отмена операции PHP-плагина (php_plugin.c, fcn.00272050) находит дескриптор операции по id, печатает «Cancelling... Output-data: %p.» и ставит в дескрипторе байт-флаг отмены — и больше ничего: ни php_server, ни PHP-коду отмена не передаётся. ↩

  75. fw-tv188b-260827-0003-r24--plugin-loader--php-runtime--opexec.c032 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 по тайм-ауту handle_user_input оболочка останавливает php_server плагина и тем прерывает вызов: за «cancelling by timeout (N s)» следуют «FATAL ERROR detected (msg = operation timed out)», «[php] shutting down...», через ~0,25 с «killing PHP-server process...» и «stopped.», затем «canceling req N (fast: 1)», «PHP-FW was shut down. The operation fails.», «result status canceled» и «canceled in N s»; PHP-код вызова не доработал. ↩↩

  76. fw-tv188b-260827-0003-r24--plugin-loader--php-runtime.c036 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В r25 php_server содержит путь /tmp/run/%s.pid и импорт FS_writestring, которых нет в strings php_server r24 ↩

  77. fw-tv188b-260827-0003-r24--plugin-loader--php-runtime--opexec.c030 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В r25 (261021_0117_r25) набор сообщений исполнителя операций тот же, добавлены «plugin_opexec I: waiting for mc index validation», «plugin_opexec I: mc index now valid» и «plugin_opexec D: %s: %s» (вместо «still working...»), а сообщения операции получили формат «%s->%s(%s.%s)». ↩

  78. fw-tv188b-261021-0117-r25.c275 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 оболочка при старте VOD читает PluginVodSeriesInfo::markers начальной серии (playback_url_is_stream_url=true): для двух StreamMarker (intro from 2 to 12, closing_credits from 25 to 35) в shell.log «markers I: 2 markers added: 2..12,25..35». ↩

  79. fw-tv188b-261021-0117-r25.c281 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 для ленивой серии VOD оболочка вызвала только get_vod_stream_url; get_vod_stream_info не вызывалась ни разу, хотя плагин-тестовый плагин реализует оба метода. ↩

  80. fw-tv188b-261021-0117-r25--media-player.c038 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24, 261021_0117_r25 · subtitles.php в tv188b r24 и r25 имеет одинаковые размер 25911 байт и SHA256 b476a7eab854827cf514a5b02a644c7bc4ae5d4f8efd55629fc846fae32c249e. ↩

  81. fw-tv188b-261021-0117-r25--media-player.c039 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24, 261021_0117_r25 · libxxx_dune_mediainfo.so и libvlc.so в tv188b r25 отличаются по SHA256 от одноимённых ELF r24. ↩

  82. fw-tv188b-261021-0117-r25.c287 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 при старте VOD тестового плагина test_plugin6 с PluginVodInfo::buffering_ms=3000 оболочка пишет в shell.log «[player] setting buffering to 3000ms» и «[player] DEBUG: using special buffering 3000ms». ↩

  83. doc-sdk-plugins--operations.c107 · doc · any-documented; прошивка — · PluginVodInfo::buffering_ms (предбуферизация в мс) не реализован ↩

  84. fw-tv188b-261021-0117-r25.c006 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В r25 в firmware_ext/plugins 15 каталогов встроенных плагинов с dune_plugin.xml: к 13 из r24 добавлены downloads и s928x_dvfel ↩

  85. fw-tv188b-261021-0117-r25--downloads--manager-runtime.c040 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · В r24 (260827_0003) файла system/system/bin/libxxx_dl_manager.so нет: в отсортированном tree.tsv за libxxx_curl.so сразу идёт libxxx_do.so. ↩

  86. fw-apk-260724-0207-r24.c044 · code · android-atv; прошивка 260724_0207_r24 · В data.zip 12 встроенных плагинов: android_apps, bluray, dunemdb_supplier_generic, dunemdb_supplier_rutube, dunemdb_supplier_youtube, dunestore, ext_epg, kartina_tv_launcher, ktv_start, radiotime, shell_ext, widget ↩

    • fw-tv188b-260827-0003-r24.c018 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Утилиты Dune в /system/dunehd/firmware/bin/ — симлинки на /data/data/com.dunehd.app/lib/libxxx_<имя>.so (например php_server, run_plugin_cgi, ts, root)
    • fw-tv188b-260827-0003-r24.c019 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Сами исполняемые файлы libxxx_*.so лежат в /system/bin/ (37 ELF); крупнейший — libxxx_ts.so (44235376 байт)

    ↩

  87. fw-tv188b-261021-0117-r25--network-services.c047 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В r25 firmware/bin/ts — симлинк на /data/data/com.dunehd.app/lib/libxxx_ts.so; сам libxxx_ts.so в /system/bin занимает 44235376 байт. ↩

  88. fw-apk-260724-0207-r24.c054 · code · android-atv; прошивка 260724_0207_r24 · libxxx_ts.so (44235376 байт; firmware/bin/ts по apk_bin_map.txt) — программа на Go с идентификацией TorrServer/MatriX.134 (торрент-сервер), а не ядро медиаплеера ↩

  89. thr-mydune-108.c011 · forum · hdtv_301, unknown; прошивка 150721_0136_B9 · В прошивке Dune 301 предустановленные плагины лежат в firmware_ext, и их можно удалить, модифицировав прошивку ↩

  90. thr-mydune-108.c012 · forum · hdtv_301, unknown; прошивка 150721_0136_B9 · Участник перенёс dune_api.php из прошивки r11 в прошивку b9 (Dune 301), рассчитывая использовать sel_id и post_action в open_folder() ↩

  91. thr-mydune-108.c013 · forum · hdtv_301, unknown; прошивка 150721_0136_B9, 190919_0242_r11 · По мнению Brigadir, переноса dune_api.php из более новой прошивки недостаточно для новых возможностей API: параметры уходят в шелл в виде JSON, и шелл тоже должен быть обновлён ↩

  92. thr-mydune-108.c024 · code · android-dune-fw; прошивка 250815_1012_r22, 260827_0003_r24 · В прошивках tv188b r22 и r24 файл dune_api.php помечен как автогенерируемый ↩

  93. thr-mydune-108.c025 · code · unknown; прошивка 240619_0210_r22, 260724_0207_r24 · В прошивках tv175u r22 и r24 файл dune_api.php помечен как автогенерируемый ↩

  94. doc-sdk-plugins.c138 · inference · android; прошивка — · Вероятно, задумано по аналогии с SMP87xx: на Android содержимое .platform.android переносится в корень, а .platform.87xx удаляется ↩

  95. fw-tv188b-260827-0003-r24--plugin-loader--php-runtime.c016 · inference, disputed · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Тайм-аут операции (operation_timeout; по SDK по умолчанию 10 с, потиповой N может задать своё значение) отсчитывает оболочка: по истечении она отменяет операцию у себя и сообщает «Operation time exceeded», но PHP-вызов в php_server не прерывается — его результат приходит позже и отбрасывается («Received result for cancelled operation»). ↩

  96. fw-tv188b-261021-0117-r25.c310 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 handle_user_input test_plugin5 со sleep(15) при «start (timeout=60.0s)» доработал без отмены: результат («result action») пришёл через ~15 с после старта, сообщений об отмене по тайм-ауту нет, а следующий вызов исполнил тот же php_server 17676. ↩