Реализация AndroidTV TvInputService

У меня проблемы с реализацией TvInputService.

У меня есть вся информация с сервера о каналах (время окончания/начала, адреса Uri, идентификатор, имя и т. д.)

Моя цель — создать приложение для настройки каналов потоковой передачи на основе этой информации, полученной с сервера. Я попробовал это http://developer.android.com/training/tv/tif/tvinput.html ... даже если я понимаю теорию (в основном), я все еще новичок в этом, и, поскольку на веб-сайте нет примеров кодирования и подробного объяснения, это действительно расстраивает. Я также попробовал образец, предоставленный Android, но он слишком сложен для того, что я пытаюсь сделать, и это еще больше сбивает меня с толку.

Может ли кто-нибудь помочь мне, объяснив (если возможно, простым способом) с некоторыми примерами все о реализации TvInputService? Благодарю вас!


person Mokrab    schedule 13.04.2016    source источник


Ответы (3)


Вы можете использовать мою библиотеку ChannelSurfer, которая значительно упрощает разработку служб ввода ТВ.

Чтобы создать службу ввода, необходимо выполнить несколько основных шагов.

  1. Объявите, какие каналы доступны.
  2. Объявите, какие программы будут воспроизводиться на каждом канале
  3. Когда пользователь настроится на ваш канал, как будет отображаться видео

Обычно это делается с помощью SyncAdapters и сервисов, хотя эта библиотека сводит все к одному классу, который вы создаете на основе ваших собственных спецификаций.

Также есть пример приложения, если вам нужна дополнительная помощь.

person Nick Felker    schedule 24.04.2016
comment
Спасибо, попробую :) - person Mokrab; 26.04.2016
comment
У меня также есть небольшая проблема с пониманием того, как, что и где, в целом все, что касается действия по настройке ... Я прочитал ваши примеры, но я все еще запутался, потому что они оба очень разные, не могли бы вы объяснить в дилетантские термины о том, что должно быть внутри, небольшие примеры, настолько подробные, насколько это возможно? Это бы мне очень помогло :) - person Mokrab; 05.05.2016
comment
@Mokrab, вы убедились, что у вас есть правильные разрешения и данные манифеста? Начнем с простого InputProvider: @Override public List‹Channel› getAllChannels(Context mContext) { Log.d(TAG, Получить все каналы); List‹Channel›channels = new ArrayList‹›(); channels.add(новый канал() .setName(Time.Is) .setNumber(1)); обратные каналы; } Это создает каналы для вашего сервиса. - person Nick Felker; 06.05.2016
comment
@Override public List‹Program› getProgramsForChannel(Контекст игнорируется, Uri channelUri, Channel ChannelInfo, long startTimeMs, long endTimeMs) { p = new Program.Builder(getGenericProgram(channelInfo)) .setTitle(Который сейчас час?) .setInternalProviderData(time.is) .setDescription(веб-сайт, который постоянно обновляется) .build(); } Это добавит новую программу на канал и появится в гиде. - person Nick Felker; 06.05.2016
comment
@Override public boolean onTune(канал канала) { play(getProgramRightNow(channel).getInternalProviderData()); } Когда пользователь настроится на определенный канал, вы скажете системе начать воспроизведение видео, которое соответствует текущей программе в гиде. - person Nick Felker; 06.05.2016
comment
Мне что-то удалось, но я стремлюсь использовать StreaminginputProvider, потому что мне нужно использовать URL-адреса, полученные с сервера. После тестирования некоторых он не выдает ошибку, но застревает при применении пакетного обновления, а на экране он застревает при настройке каналов, я, черт возьми, не могу заставить каналы и программы отображаться на экране. , уже давно этим занимаюсь. Мистер Ник Фелкер, можно ли как-то связаться с вами напрямую, я очень расстроен этим, и мало кто знает, как это сделать. Я был бы очень признателен за вашу помощь. - person Mokrab; 01.06.2016
comment
Я могу получить информацию о канале от tvdb, но как воспроизвести контент, не определено ни в одном документе. У вас есть какие-либо идеи об этом @NickFelker? - person yadunath.narayanan; 27.01.2020

На основании этой документации те, кто реализует Службы телевизионного ввода обычно должны делать это, наследуя этот класс и предоставляя собственную реализацию сеанса на основе TvInputService.Session.

Манифест вашего приложения должен объявить ваш TvInputService, а затем указать разрешение BIND_TV_INPUT, чтобы разрешить службе подключать вход телевизора к системе.

<service android:name="com.example.sampletvinput.SampleTvInput"
    android:label="@string/sample_tv_input_label"
    android:permission="android.permission.BIND_TV_INPUT">
    <intent-filter>
        <action android:name="android.media.tv.TvInputService" />
    </intent-filter>
    <meta-data android:name="android.media.tv.input"
      android:resource="@xml/sample_tv_input" />
</service>

Вы можете проверить это пример на GitHub.

person abielita    schedule 14.04.2016
comment
Спасибо, я добавил код в манифест в начале, но часть, которую я застрял, — это сам класс TvInputService. Кажется, я не могу понять, что нужно сделать по методу TvInputService.Session. - person Mokrab; 14.04.2016

Я получаю сообщение «Невозможно запустить автоматическое сканирование для авторизации» после попытки установить каналы. Я использую файлы от ChannelSurfer, мне удалось создать провайдера и, НАДЕЮСЬ, настроить (все еще не понимаю), но я застрял в этой части... Консоль не выдает ни одной ошибки, но телевизор говорит вышеприведенное утверждение. Почему это происходит и каковы возможные исправления?

person Mokrab    schedule 05.05.2016