Amazon Fire TV

aftv-01

Я давно пользуюсь сетевыми мультимедийными проигрывателями, но менять мне их приходится нечасто, очень нечасто. Первым из таких устройств был Popcorn Hour A-110 на SoC от Sigma Designs, который проработал у меня дольше остальных — чуть более 4 лет.

Так как вся библиотека фильмов, сериалов и музыки хранится у меня на домашнем сервере со «скромной» емкостью в 12TB, то одним из критериев была и остается беспроблемная работа по NFS протоколу без предварительного транскодинга и возможностью прямого вывода звука на ресивер. Popcorn всем этим требованиям удовлетворял. Но время бежит и технологии совершенствуются. Так долго девайсы у меня как правило не задерживаются. Нет, не потому, что я неаккуратен и они ломаются (как раз наоборот, от меня они переходят в состоянии как будто только что из коробки), а потому что непреодолима тяга к новым технологиям. Поэтому хотелось замены, причем замены на что-то менее прожорливое, более компактное и меньше греющееся.

aftv-02

Год назад такой заменой для меня стал Raspberry Pi. Крошечный, малопотребляющий (питание вообще взял с портов телевизора для первого и с портов монитора для второго), проигрывающий практически любые рипы (с покупкой лицензий на VC-1 и MPEG2 кодеки за скромные £3.00 GBP), за малым исключением сложных и тяжелых ремуксов. В качестве всеядного проигрывателя выступал XBMC с настроенной синхронизацией между двумя Raspberry Pi через общую MySQL базу. Поставил на паузу на одном устройстве и продолжил смотреть на другом, красота да и только. Прекрасно и в то же время ужасно такое решение еще было и поддержкой HDMI-CEC, когда управление возможно с пульта телевизора. Прекрасно оно тем, что количество пультов сводится к минимуму — телевизионный и для ресивера. Все кнопочки довольно несложно переназначаются в XBMC правкой xml-конфига. Ужасно же оно своей тормознутостью, протокол явно неспешный. Кому как, а мне хотелось перемещаться по меню с большей скоростью.

aftv-03

Я давно присматривался к 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 кнопок для родного пульта. Жирным выделены переназначенные кнопки:

aftv-04

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, то и будем использовать его в качестве основного ланчера.

aftv-07

Скачиваем новый конфигурационный файл для 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):

Модифицировал оригинальную клавиатуру, добавив русскую раскладку. Теперь устройством можно пользоваться более полноценно.

aftv-08

Скачиваем русскую клавиатуру для 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):

aftv-09

Скачиваем русскую клавиатуру для 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. Есть возможность ручной сортировки, скрытия и показа необходимых приложений. Со вкусом и ничего лишнего. Перевел его на русский язык и выставил более подходящую цветовую схему. Так это выглядит:

aftv-10

Скачиваем HALauncher-RU. Распаковываем и устанавливаем:

adb install halauncher-android-tv-1.0.11.0-ru-ZeroLab.NeT.apk

В настройках выставляем:

Основной фон:
FF 000000
Цвет колонки с меню:
FF 12171B

Наслаждайтесь.