Amazon Fire TV
Я давно пользуюсь сетевыми мультимедийными проигрывателями, но менять мне их приходится нечасто, очень нечасто. Первым из таких устройств был Popcorn Hour A-110 на SoC от Sigma Designs, который проработал у меня дольше остальных — чуть более 4 лет.
Так как вся библиотека фильмов, сериалов и музыки хранится у меня на домашнем сервере со «скромной» емкостью в 12TB, то одним из критериев была и остается беспроблемная работа по NFS протоколу без предварительного транскодинга и возможностью прямого вывода звука на ресивер. Popcorn всем этим требованиям удовлетворял. Но время бежит и технологии совершенствуются. Так долго девайсы у меня как правило не задерживаются. Нет, не потому, что я неаккуратен и они ломаются (как раз наоборот, от меня они переходят в состоянии как будто только что из коробки), а потому что непреодолима тяга к новым технологиям. Поэтому хотелось замены, причем замены на что-то менее прожорливое, более компактное и меньше греющееся.
Год назад такой заменой для меня стал Raspberry Pi. Крошечный, малопотребляющий (питание вообще взял с портов телевизора для первого и с портов монитора для второго), проигрывающий практически любые рипы (с покупкой лицензий на VC-1 и MPEG2 кодеки за скромные £3.00 GBP), за малым исключением сложных и тяжелых ремуксов. В качестве всеядного проигрывателя выступал XBMC с настроенной синхронизацией между двумя Raspberry Pi через общую MySQL базу. Поставил на паузу на одном устройстве и продолжил смотреть на другом, красота да и только. Прекрасно и в то же время ужасно такое решение еще было и поддержкой HDMI-CEC, когда управление возможно с пульта телевизора. Прекрасно оно тем, что количество пультов сводится к минимуму — телевизионный и для ресивера. Все кнопочки довольно несложно переназначаются в XBMC правкой xml-конфига. Ужасно же оно своей тормознутостью, протокол явно неспешный. Кому как, а мне хотелось перемещаться по меню с большей скоростью.
Я давно присматривался к TV коробочкам на Android, но все что было на рынке — доверия не внушало и выглядело откровенно хреново. В прошлом месяце на рынке был представлен Amazon Fire TV, я сразу понял: это — оно. Качество на очень высоком уровне, прекрасный подбор компонентов, высокая отзывчивость UI и очень удобный пульт управления. С таким пультом перемещаться по меню теперь стало одно удовольствие.
Amazon поступил правильно, открыв девелоперам возможность работы с устройством в userspace. root’ового доступа из коробки хоть и нет, но возможность ставить в userspace на закрытой и кастомизированной Amazon операционной системе Android — уже дорогого стоит.
Устанавливаем ADB Utility под свою операционную систему и включаем ADB Debugging на Amazon Fire TV:
Settings -> System -> Developer Options -> ADB Debugging -> ON
Конечная цель — XBMC в качестве основного проигрывателя мультимедиа. Приступим.
Посмотрите свой IP в System -> About -> Network. Подключемся по adb к Amazone Fire TV:
adb connect IP
Amazon Fire TV в своих настройках залочен на американские временные зоны, выставить необходимую нам временную зону можно при помощи приложения TimeZone Changer. Скачиваем, распаковываем на рабочий стол, к примеру, и устанавливаем:
cd ~/Desktop
adb install TimeZoneChanger.apk
Заходим в Settings -> Applications -> TimeZone Changer -> Launch Application. Находим свою временную зону и выставляем.
Для того, чтобы XBMC самостоятельно запускался при включении приставки, запускался при выходе приставки из сна, чтобы приставка автоматически переходила в режим сна через 15 секунд в том случае, если вы при этом находитесь в меню родного ланчера от Amazon, нам необходимо установить приложение Llama и настроить реакцию на необходимые события. В режим сна в XBMC и в других приложениях приставка будет переходить через 10 минут неактивности.
Для XBMC при этом необходимо в дальнейшем после установки дополнительно выставить следующие настройки:
System -> Settings -> System -> Power saving
Shutdown function timer = 10 min
Shutdown function = Quit
Скачиваем Llama. Распаковываем, устанавливаем приложение и копируем готовые конфигурационные файлы настроек событий:
adb install com.kebab.Llama.apk
adb push Llama /sdcard/Llama/
Запускаем приложение и импортируем настройки: Нажмите кнопку ‘Menu‘ на пульте к Amazon Fire TV -> Import/Export Data -> Import From USB Storage -> Accept.
Теперь приступим непосредственно к установке XBMC. Скачиваем установочный пакет под Android (ARM). На сегодняшний день самая свежая версия Helix — 14.2, ее и будем ставить.
adb install kodi-14.2-Helix-armeabi-v7a.apk
Производим первый запуск, чтобы создалась необходимая структура каталогов и файлов в пользовательском разделе. Теперь сделаем как минимум Remap кнопок для родного пульта. Жирным выделены переназначенные кнопки:
remote.xml:
<?xml version="1.0" encoding="UTF-8"?>
<keymap>
<Global>
<keyboard>
<rewind>PageUp</rewind>
<fastforward>PageDown</fastforward>
<play_pause>XBMC.ActivateWindow(Home)</play_pause>
</keyboard>
</Global>
<Home>
<keyboard>
<menu>XBMC.ActivateWindow(favourites)</menu>
</keyboard>
</Home>
<FullscreenVideo>
<keyboard>
<menu>SmallStepBack</menu>
<backspace>Stop</backspace>
<up>AudioNextLanguage</up>
<down>ShowSubtitles</down>
<rewind>SkipPrevious</rewind>
<fastforward>SkipNext</fastforward>
<play_pause>Pause</play_pause>
</keyboard>
</FullscreenVideo>
</keymap>
Сохраняем в файл и переносим на устройство:
adb push remote.xml /sdcard/android/data/org.xbmc.kodi/files/.kodi/userdata/keymaps
Далее уже по вкусу, мне, например, необходимо синхронизировать базу между несколькими устройствами с XBMC (версии XBMC должны быть одинаковыми).
На машине с MySQL сервером выполняем (в примере 192.168.1.2):
GRANT ALL ON `MyVideos%`.* TO 'xbmc'@'%' IDENTIFIED BY 'password';
GRANT ALL ON `MyMusic%`.* TO 'xbmc'@'%' IDENTIFIED BY 'password';
Для XBMC создаем advancedsettings.xml:
<?xml version="1.0" encoding="UTF-8"?>
<advancedsettings>
<videodatabase><type>mysql</type>
<host>192.168.1.2</host>
<port>3306</port>
<user>xbmc</user>
<pass>password</pass>
</videodatabase>
<musicdatabase>
<type>mysql</type>
<host>192.168.1.2</host>
<port>3306</port>
<user>xbmc</user>
<pass>password</pass>
</musicdatabase>
<videolibrary><importwatchedstate>true</importwatchedstate>
<importresumepoint>true</importresumepoint>
</videolibrary>
</advancedsettings>
Отправляем на устройство:
adb push advancedsettings.xml /sdcard/android/data/org.xbmc.kodi/files/.kodi/userdata
Если вы уже пользуетесь XBMC и у вас уже есть когда-то набитый список сетевых ресурсов, то вы можете их легко перенести, хранятся они в файле sources.xml.
Для примера структура файла:
<sources>
<programs>
<default pathversion="1"></default>
</programs>
<video>
<default pathversion="1"></default>
<source>
<name>Прочее</name>
<path pathversion="1">nfs://192.168.1.2/hdd2/Downloads/Прочее/</path>
<path pathversion="1">nfs://192.168.1.2/hdd3/Downloads/Прочее/</path>
<allowsharing>true</allowsharing>
</source>
<source>
<name>Мультфильмы</name>
<path pathversion="1">nfs://192.168.1.2/hdd2/Downloads/Мультфильмы/</path>
<path pathversion="1">nfs://192.168.1.2/hdd3/Downloads/Мультфильмы/</path>
<allowsharing>true</allowsharing>
</source>
<source>
<name>Сериалы</name>
<path pathversion="1">nfs://192.168.1.2/hdd1/Downloads/Сериалы/</path>
<path pathversion="1">nfs://192.168.1.2/hdd2/Downloads/Сериалы/</path>
<path pathversion="1">nfs://192.168.1.2/hdd3/Downloads/Сериалы/</path>
<allowsharing>true</allowsharing>
</source>
<source>
<name>Фильмы</name>
<path pathversion="1">nfs://192.168.1.2/hdd2/Downloads/Фильмы/</path>
<path pathversion="1">nfs://192.168.1.2/hdd3/Downloads/Фильмы/</path>
<allowsharing>true</allowsharing>
</source>
</video>
<music>
<default pathversion="1"></default>
<source>
<name>Музыка</name>
<path pathversion="1">upnp://4e913d96-195a-306e-2d72-b5a52490dc52/1%243/</path>
<allowsharing>true</allowsharing>
</source>
</music>
<pictures>
<default pathversion="1"></default>
</pictures>
<files>
<default pathversion="1"></default>
</files>
</sources>
Для переноса непосредственно на устройство:
adb push sources.xml /sdcard/android/data/org.xbmc.kodi/files/.kodi/userdata
В заключение немного об обновлении XBMC, для этого просто скачиваем новую версию и выполняем (на примере 14.3):
adb install -r kodi-14.3-Helix-armeabi-v7a.apk
На этом можно отключиться от устройства:
adb disconnect
Добавлено (23.06.2014):
Как сторонник минимализма, решил максимально упростить работу с устройством, уменьшив количество манипуляций настолько, насколько это возможно. Так как большую часть времени пользоваться приходится XBMC, то и будем использовать его в качестве основного ланчера.
Скачиваем новый конфигурационный файл для Llama. Распаковываем, устанавливаем и настраиваем по уже приведенной ранее схеме.
Теперь каждый раз при нажатии клавиш ‘Home’ и ‘Mic’ будет запускаться XBMC, доступа к стандартному ланчеру не будет. XBMC позволяет запускать Android приложения. Для удобства из меню программ добавим необходимые приложения в избранное.
Programs -> Android Apps -> на добавляемом приложении нажмите кнопку ‘Menu’ -> Set as Favorite
Я немного обновил Remap кнопок в посте, кто использовал старые настройки — обратите на это внимание. Теперь по кнопке ‘Menu’ вызывается избранное, а по кнопке ‘Play/pause’ в основном меню программы в один клик можно попасть на домашний экран.
Рано или поздно, безусловно, вам понадобится доступ к родному ланчеру, для покупки игр, к примеру, или другого контента из Amazon Appstore. Заходим в настройки Llama и отключаем правило ‘Run XBMC’, далее как обычно по кнопке ‘Home’ переходим в родной ланчер. После того как закончили, можно снова включить правило.
Предвосхищая вопрос по поводу root’а, да, не так давно вышел универсальный root exploit для свежих версий Android, который применим и для Amazon Fire TV, но до тех пор, пока закрыт bootloader, использование его считаю преждевременным. Прежде всего нужен рабочий программный механизм восстановления устройства, в случае ошибок и порчи его в ходе экспериментов. Сомневаюсь, что найдется много желающих делать это при помощи JTAG. Поэтому, пока, трюк с Llama — мой выбор. Просто и со вкусом.
Добавлено (03.07.2014):
Появился способ войти в Recovery Mode на Amazon Fire TV, теперь можно и root получить, а в случае проблем сделать Factory Reset (если вы конечно не умудритесь убить bootloaders).
Для начала, как войти в режим восстановления. Для этого нам понадобится USB клавиатура с кнопками ‘Print Screen‘ или ‘SysRq‘. Думаю, подойдет любая PC’шная, а вот клавиатура для Mac’а точно в пролете. Подключите клавиатуру, после этого отключите питание у приставки. Включите питание и во время загрузки и начала показа логотипа amazon fireTV с цветной анимацией вокруг него нажмите сочетание клавиш ‘Alt + Print Screen + i‘, это пошлет команду ‘kill all tasks‘. После первого посыла команды, приставка перезагрузится, вам необходимо снова во время загрузки нажать вышеприведенное сочетание клавиш, и так до тех пор (может потребоваться от 3 до 5 перезагрузок), пока приставка не выведет сообщение ‘The System Update was not successful‘. Это будет означать, что приставка перешла в режим восстановления. После того как вы вошли в этот режим, нажмите кнопку ‘Home‘ на своей клавиатуре, это вызовет меню. Используя клавиши со стрелками, выберите ‘Wipe data/factory reset‘ и нажмите кнопку ‘Enter‘.
Теперь перейдем к получению root доступа и как цель к назначению XBMC в качестве основного ланчера без костыля в виде Llama. На этом этапе Llama следует удалить, либо отключить правила для XBMC.
Скачиваем архив, распаковываем и последовательно выполняем:
adb install tr.apk
Запустите приложение ‘Towelroot’ и нажмите ‘Make it Ra1n’. Выйдите из приложения и немного подождите, ваша приставка перезагрузится. Теперь установим SU в систему и сопутствующее приложение для управления правами доступа для суперпользователя:
adb install Superuser.apk
Запустите ‘Superuser’ и установите SU в нормальном режиме. Для проверки, к примеру, выполним важное действие, отключим автообновление системы:
adb shell
su
pm disable com.amazon.dcp
При вводе ‘su’ будут запрошены права на повышение привелегий, выдайте их. После ввода последней команды в случае успеха будет выведено ‘Package com.amazon.dcp new state: disabled’.
Теперь установим Xposed Framework, модули для нашей приставки, Settings, MoreLocale и XBMC Launcher.
adb install de.robv.android.xposed.installer_v32_de4f0d.apk
adb install RboxFireTvMods_1.3.apk
adb install HDXPosed-1.3.apk
adb install Settings.apk
adb install jp.co.c_lis.ccl.morelocale.apk
adb install se.blunden.xbmclauncher.apk
Запустите ‘Xposed Installer -> Framework -> Install/Update -> Allow Reboot’. После перезагрузки снова запустите ‘Xposed Installer -> Modules -> активируйте RboxFireTvMods и HDXPosed (без мыши это не удастся)’. Теперь необходимо перезагрузиться, либо передерните питание, либо зажмите клавиши ‘Select’ и ‘Play/pause’, это пошлет команду на перезагрузку. Если вам привычнее терминал, то можно сделать через него:
adb shell
su
reboot
Теперь XBMC будет работать в качестве основного ланчера.
Чтобы приставка уходила в сон при активном XBMC, установим дополнение Android Power Options screensaver (xbmc.repo.elmerohueso-1.0.zip). Установите, отключите режим экономии энергии (выход их XBMC через 10 минут простоя), если ранее его включали. Теперь перейдите в ‘XBMC Settings -> Appearance -> Screensaver’ и выберите только что установленный скринсейвер. Перейдите в настройки скринсейвера, нажмите ‘Check SU Permissions’ и предоставьте права суперпользователя для XBMC. Выберите интервал, при котором будет включаться скринсейвер. На этом все, теперь при неактивности приставка будет уходить в сон через выбранный интервал времени.
Добавлено (07.07.2014):
Модифицировал оригинальную клавиатуру, добавив русскую раскладку. Теперь устройством можно пользоваться более полноценно.
Скачиваем русскую клавиатуру для Amazon Fire TV. Распаковываем и устанавливаем (необходим root):
adb push BuellerIME.apk /sdcard/
adb shell
su
mount -o rw,remount /dev/block/platform/msm_sdcc.1/by-name/system /system
cp /sdcard/BuellerIME.apk /system/app
mount -o ro,remount /dev/block/platform/msm_sdcc.1/by-name/system /system
rm /sdcard/BuellerIME.apk
reboot
Наслаждайтесь русским вводом.
Добавлено (11.07.2014):
В последних версиях системной прошивки клавиатура деодексирована, но в прошивках младше 51.1.1.0 она была одексирована. Если у вас старая прошивка и после замены клавиатуры на модифицированную она перестала работать, то просто необходимо удалить ‘BuellerIME.odex’.
adb shell
su
mount -o rw,remount /dev/block/platform/msm_sdcc.1/by-name/system /system
rm /system/app/BuellerIME.odex
mount -o ro,remount /dev/block/platform/msm_sdcc.1/by-name/system /system
reboot
После этого клавиатура должна без каких-либо проблем заработать.
Добавлено (29.03.2015):
Сделал русскую клавиатуру для последней на сегодняшний день прошивки (51.1.5.0_515020820):
Скачиваем русскую клавиатуру для Amazon Fire TV (51.1.5.0_515020820). Распаковываем и устанавливаем (необходим root):
adb push FireTVIME.apk /sdcard/
adb shell
su
mount -o rw,remount /dev/block/platform/msm_sdcc.1/by-name/system /system
cp /sdcard/FireTVIME.apk /system/app
mount -o ro,remount /dev/block/platform/msm_sdcc.1/by-name/system /system
rm /sdcard/FireTVIME.apk
reboot
Добавлено (03.04.2015):
Попался мне на глаза неплохой лаунчер в стиле Google TV – HALauncher. Есть возможность ручной сортировки, скрытия и показа необходимых приложений. Со вкусом и ничего лишнего. Перевел его на русский язык и выставил более подходящую цветовую схему. Так это выглядит:
Скачиваем HALauncher-RU. Распаковываем и устанавливаем:
adb install halauncher-android-tv-1.0.11.0-ru-ZeroLab.NeT.apk
В настройках выставляем:
Основной фон: FF 000000 Цвет колонки с меню: FF 12171B
Наслаждайтесь.