projektovanje namenskih računarskih struktura · motivacija obezbediti korisniku najbolji mogući...

62
Univerzitet u Novom Sadu Fakultet tehničkih nauka Odsek za računarsku tehniku i računarske komunikacije Projektovanje Namenskih Računarskih Struktura Sistemsko programiranje u Androidu AndroidTV (evolucija, koncept, softverska arhitekura) Zimski semestar školske godine 2018/2019

Upload: others

Post on 04-Sep-2019

8 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

Univerzitet u Novom Sadu

Fakultet tehničkih nauka

Odsek za računarsku tehniku i računarske komunikacije

Projektovanje NamenskihRačunarskih Struktura

Sistemsko programiranje u Androidu

AndroidTV

(evolucija, koncept, softverska arhitekura)

Zimski semestar školske godine 2018/2019

Page 2: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

Agenda

Motivacija

Istorijat

GoogleTV

AndroidTVMotivacija

Arhitektura

Životni vek

Zaštita

PNRS 22018

Page 3: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

Agenda

Motivacija

Istorijat

GoogleTV

AndroidTVMotivacija

Arhitektura

Životni vek

Zaštita

PNRS 32018

Page 4: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

Motivacija

Zašto Android u TV uređajima?

PNRS 42018

Page 5: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

Agenda

Motivacija

Istorijat

GoogleTV

AndroidTVMotivacija

Arhitektura

Životni vek

Zaštita

PNRS 52018

Page 6: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

IstorijatGoogleTV vs Android TV

Istorijat:

Prvi uređaji su pušteni na tržište 2010 (Sony i Logitech)

Bazirani na x86 arhitekturi (kasnije ARM)

Chrome podrška prisutna, ali limitirana podrška Google play store aplikacijama

Specijalizovana pretraga (optimizovana za TV, sa podrškom za glasovnupretragu)

Juna 2014, GoogleTV je zvanično nasleđen sa Android TV platformom

Sličnosti:

Zvanična Google implementacija TV servisa u Android okruženje

Softverska arhitektura

Razlike:

GoogleTV je platforma koja nije otvorenog koda

U početku (v2-v3) nije imala podršku za NDK (glibc integrisan, zbog

Chrome)

PNRS 62018

Page 7: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

Agenda

Motivacija

Istorijat

GoogleTV

AndroidTVMotivacija

Arhitektura

Životni vek

Zaštita

PNRS 72018

Page 8: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

Agenda - detaljnije

GoogleTVArhitektura

Protok podataka

Podrška za pretragu

GoogleTV Media Player

PNRS 82018

Page 9: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

GoogleTVSoftverska arhitektura

Pokušaj da se objedine multimedijalne potrebe

Bazirana na MDS(MediaDeviceService)

Višestruki CMD(Custom Media Devices)

Dostupni kroz MDV(MediaDeviceView)

PNRS 92018

Page 10: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

GoogleTVJednosmerna vs Dvosmerna

komunikacija

PNRS 102018

Page 11: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

GoogleTVTV aplikacija

PNRS 112018

Page 12: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

GoogleTVCustom Media Device (CMD)

Discovery (raspoloživost za uparivanje, obznanjivanje mogućnosti

Setup (uparivanje, specijalizovan setup, ako ima)

Controlling (channel up, down, itd)

Digital TV stek (EPG, Teletext) i PVR

PNRS 122018

Page 13: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

GoogleTVCMD primer

MAL (Middleware Abstraction Layer) API

Platform Drivers

DTV Middleware System Service

Middleware

CHAL

Middleware top level API

DTV Service

iWedia Media Device

Setup

DeviceTunner

Controller

Media Device View

TV Player App

(LiveTV)

Media Devices Service

Media Devices Session

iWedia DVB Player

iWedia Framework

Components

Vendor Components

iWedia DVB Middleware

Components

Google TV Components

PNRS 132018

Page 14: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

Agenda - detaljnije

GoogleTVArhitektura

Protok podataka

Podrška za pretragu

GoogleTV Media Player

PNRS 142018

Page 15: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

GoogleTVStruktura/protok podataka

Protok podataka i komandi:

TV aplikacija (LiveTV ili neka druga) instancira MDV

Korisničke akcije se prosleđuju direktno do MDV, koji korišćenjem MDS dobavlja referencu uparenog MD kontrolera (pomoću sesije)

Ovo omogućuje direktnu Binder komunikaciju između TV aplikacije i MD kontrolera (komunikacija može biti jednosmerna ili dvosmerna u zavisnosti od samog kontrolera i prati MDS spregu)

MD kontroler ima otvorenu Binder (najčešće, može i direktna JNI) vezu ka TV middleware softveru

PNRS 152018

Page 16: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

GoogleTVStruktura/protok podataka

Akcije raspoložive TV aplikaciji (samim tim i korisniku):

Prebacivanje na željeni TV servis

Prebacivanje na sledeći TV servis

Prebacivanje na naredni TV servis

Akcije raspoložive ka QSB aplikaciji:

Dobavljanje EPG i TTX sadržaja putem MDS od CMD

Pristup informacijama o TV servisima

Pristup listi kanala (engl. tv service lineup)

PNRS 162018

Page 17: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

Agenda - detaljnije

GoogleTVArhitektura

Protok podataka

Podrška za pretragu

GoogleTV Media Player

PNRS 172018

Page 18: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

GoogleTVPodrška za pretragu

Putem specijalizovane QSB aplikacije (GoogleTV QSB)

Bez upotrebe Google backend (Google serveri) Lokalno iz DVB toka, putem TV middleware

Kombinovani rezultati sa drugim servisima: Youtube, Web

Proširenja dvosmerne komunikacije: Predložena od strane RT-RK

PNRS 182018

Page 19: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

GoogleTVPodrška za pretragu (primer)

PNRS 19

Platform Drivers

DTV Middleware System Service

Middleware

CHAL

Middleware top level API

DTV Service

iWedia Media Device

Setup

DeviceTunner

Controller

iWedia Framework

Components

Vendor Components

iWedia DVB Middleware

Components

Google TV Components

Media Devices Service

Media Devices Session

iWedia DVB Player

EPG

Database

TTX

Database

QSB

2018

Page 20: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

GoogleTVPretraga – Korisnički scenariji

EPG

Pretraživo: Ime TV servisa, ime emisije koja se prikazuje (trenutno i u bližoj budućnosti), kratak/dugačak opis emisije

Propratna akcija: prebacivanje na pronađeni TV servis

PNRS 202018

Page 21: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

GoogleTVPretraga – Korisnički scenariji

TTX

Pretraživo: Naslov TTX strane, sadržaj svih TTX stranica na TV servisu koji se trenutno gleda

Propratna akcija:

Pronađeni tekst je dodatno naznačen (engl. highlighted)

Prikaz pronađene TTX stranice

PNRS 212018

Page 22: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

Agenda - detaljnije

GoogleTVArhitektura

Protok podataka

Podrška za pretragu

GoogleTV Media Player

PNRS 222018

Page 23: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

GoogleTVMedia Player

GoogleTV Media Player se zove MooPlayer

Mora biti prisutan i portovan na ciljnu platformu

Ima podršku za rukovanje resursima

GoogleTV ekstenzije standardnom MM okruženju:

OMX IL potpun graf (tunelovan)

Više “izvora” i lako proširivih “ekstraktora”

Bolja podrška za DRM (Widevine, Playready) + TrustedVideo Path

Višestruke audio/(video)/prevod trake

QoS (Quality of Service) pomoćna sprega

PNRS 232018

Page 24: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

GoogleTVMedia Player

Prenosivi uređaji (telefon, tablet) imaju potpuno drugačija očekivanja od strane korisnika, vezano za video reprodukciju

Kod TV uređaja, prikaz TV (video) sadržaja je primarna aktivnost, koja ne sme biti ometena i prekinuta (usled neregularnog zaustavljanja neke aplikacije)

Istovremeni prikaz dva video sadržaja je očekivan (PiP, PaP), gde svi izvori video sadržaja ne moraju da budu vezani za TV servise (npr. Youtube, GooglePlay movies)

Stoga je bilo neophodno uvesti mehanizam za sinhronizaciju hardverskih resursa (A/V dekoderi, DMX, renderer) između više aplikacija

Uveden je Menadžer resursima (engl. ResourceManager) kao standardna komponenta GoogleTV sistema

PNRS 242018

Page 25: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

GoogleTVMenadžer resursima

Uloga menadžera resursima je:

Sinhronizuje hardverske resurse ciljne platforme

Omogući da aplikacije zatraže neophodne resurse

Omogući da aplikacije oslobode neophodne resurse kada im više nisu potrebni

Spreči neograničeno (vremenski nepredvidivo) zaključavanje resursa

Ukoliko neka aplikacija uđe u ANR stanje

Ukoliko se aplikacija nasilno zaustavi i ne oslobodi svoje resurse

Obezbedi arbitražu prioriteta

Koja aplikacija ima veći prioritet prilikom dodele/oduzimanja resursa (LiveTV)

Spreči oduzimanje resursa TV aplikaciji (i time obezbedi neometanu reprodukciju TV sadržaja)

U pitanju je nezavisni izvršni servis (pozadinski proces), kojeg svaki izvršni MediaPlayer mora da koristi, po jasno definisanoj sprezi.

PNRS 252018

Page 26: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

GoogleTVMenadžer resursima

PNRS 262018

Page 27: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

GoogleTVMenadžer resursima

PNRS 272018

Page 28: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

GoogleTVNDK

NDK podrška za GoogleTV platformu je uvedena tek sa verzijom 4

Bazirana na JB 4.2.2

U prethodnim verzijama je nedostajala zbog libc

biblioteke:

v4 ponovo koristi Bionic

Prethodne verzije su koristile glibc

Dozvoljava (skoro) sve regularne Android aplikacije sa GooglePlay Store servisa da se izvršavaju na GoogleTVuređaju:

Touch? GPS? Gyro?

PNRS 282018

Page 29: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

GoogleTVMane

GooglePlay Store servis

Zahteva sertifikaciju i prolazak CTS testova

Sertifikacija ima više koraka:

CTS + TV-CTS

DRM

MDS sprega je dosta limitirana (nedostaje joj veći deo funkcija neophodnih za razvoj moderne TV platforme)

Upotreba CMD je obavezna!

Mnogo oštriji zahtevi sa stanovišta mogućnosti softvera i hardvera

PNRS 292018

Page 30: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

Agenda

Motivacija

Istorijat

GoogleTV

AndroidTVMotivacija

Arhitektura

Životni vek

Primeri

PNRS 302018

Page 31: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

Agenda

Motivacija

Istorijat

GoogleTV

AndroidTVMotivacija

Arhitektura

Životni vek

Primeri

PNRS 312018

Page 32: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

Android TVMotivacija

Obezbediti korisniku najbolji mogući korisnički ugođaj

Standardizovati API Jedan TV Input A na uređaju X, takođe radi i na uređaju Y

Jedna TV aplikacija, koja radi na svim uređajima

Unificirani TV ugođaj Korišćenje jedne TV aplikacije za sve izvore TV sadržaja (kako

preinstalirane tako i naknadno instalirane preko Google Play store)

Integracija TV u Android na standardan način

Bez održavanja posebne grane (GoogleTV pristup)

Integracija sa pretragom (+glasovna pretraga)

PNRS 322018

Page 33: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

Android TVMotivacija

PNRS 332018

Page 34: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

Android TVMotivacija

PNRS 342018

Page 35: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

Android TVMotivacija

PNRS 352018

Page 36: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

Android TVMotivacija

PNRS 362018

Page 37: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

Agenda

Motivacija

Istorijat

GoogleTV

AndroidTVMotivacija

Arhitektura

Životni vek

Primeri

PNRS 372018

Page 38: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

Android TVSoftverska arhitektura

PNRS 382018

Page 39: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

Android TVPregled glavnih komponenti

TV App: com.google.android.tv

Glavna (i jedina) aplikacija koja služi za gledanje TV sadržaja.

Proizvođači uređaja mogu da prilagode GUI ove aplikacije (umesto da pišu svoju od početka).

TV Input Manager Service: com.android.server.tv

Sistemski servis koji upravlja TV ulazima.

TV Input: android.media.tv

Individualna implementacija jednog TV ulaza (Tuner, HDMI, etc.).

TV Provider: com.android.providers.tv ContentProvider za upravljanje listom TV kanala/emisija.

PNRS 392018

Page 40: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

Android TVTV Input Manager Service

Sistemski servis koji arbitrira interakciju TV aplikacije i TV ulaza (putem sesije)

Pravi sesiju koja obezbeđuje pristup individualnim TV ulazima i održava stanje sesije

Pokreće čišćenje TV Provider baze podataka, kada se aplikacija sa TV ulazom obriše iz sistema

PNRS 402018

Page 41: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

Android TVTV Input Manager Service

PNRS 412018

Page 42: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

Android TVTV Provider

ContentProvider za TV koji čuva listu kanala i emisija.

Obezbeđuje prethodno skladištene podatke aplikacijama kroz ContentResolver spregu

Ima podršku za proveru prava pristupa (TV ulaz vidi samo svoje kanale)

Format kanala (TV servisa) i programa (EPG) su definisani u: android.media.tv.TvContract.Channels.COLUMN_*

android.media.tv.TvContract.Programs.COLUMN_*

PNRS 422018

Page 43: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

Android TVTV Provider

PNRS 432018

Page 44: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

Android TVTV Input

Android servis (Java) koji obezbeđuje TV sadržaj

Postoje dva tipa podržana: Tuner: ugrađeni tuner, IPTV tuner, TV ulaz baziran na protokolu

(streaming)

Passthrough: HDMI, Component

Glavno zaduženje: Reakcija na onTune(...)i prikaz TV sadržaja u obezbeđenu video

površinu (Surface)

PNRS 442018

Page 45: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

Android TVTV Input

PNRS 452018

Page 46: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

Android TVTV Input - Klase

TvInputService

TvInputService.Session

TvContract

TvContract.Program

TvContract.Channels

TvContentRating

TvInputInfo

TvTrackInfo

TvInputManager

PNRS 462018

Page 47: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

Agenda

Motivacija

Istorijat

GoogleTV

AndroidTVMotivacija

Arhitektura

Životni vek

Primeri

PNRS 472018

Page 48: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

Android TVTV Input – Životni vek

PNRS 482018

Page 49: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

Agenda

Motivacija

Istorijat

GoogleTV

AndroidTVMotivacija

Arhitektura

Životni vek

Primeri

PNRS 492018

Page 50: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

AndroidTVPrimeri

Definisanje TvInputService u AndroidManifest.xml:

Definisanje XML za metadata podatke TV ulaza:

PNRS 50

<service android:name="com.vendor.tvinput.VendorTvInput"

android:label="@string/vendor_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/vendor_tv_input" />

</service>

<!-- xml/vendor_tv_input.xml -->

<tv-input xmlns:android="http://schemas.android.com/apk/res/android"

android:setupActivity="com.vendor.tvinput.VendorSetupActivity"

android:settingsActivity="com.vendor.tvinput.VendorSettingsActivity" />

2018

Page 51: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

AndroidTVPrimeri - Setup

TV aplikacija je zadužena za pokretanje aktivnosti za podešavanje (engl. SetupActivity) kada TV ulaz nije podešen

Obično ovaj korak uključuje skeniranje kanala (TV servisa)

Tokom ove aktivnosti, podatke o pronađenim TV servisima je potrebno uneti u TV Provider bazu podataka.

Definisanje aktivnosti podešavanja:

PNRS 51

<activity android:name=".VendorSetupActivity" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

</intent-filter>

</activity>

2018

Page 52: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

AndroidTVPrimeri - Setup

Unos jednog TV servisa u bazu podataka:

PNRS 52

ContentValues values = new ContentValues();

values.put(Channels.COLUMN_DISPLAY_NUMBER, channel.mNumber);

values.put(Channels.COLUMN_DISPLAY_NAME, channel.mName);

values.put(Channels.COLUMN_ORIGINAL_NETWORK_ID, channel.mOriginalNetworkId);

values.put(Channels.COLUMN_TRANSPORT_STREAM_ID, channel.mTransportStreamId);

values.put(Channels.COLUMN_SERVICE_ID, channel.mServiceId);

values.put(Channels.COLUMN_VIDEO_FORMAT, channel.mVideoFormat);

values.put(Channels.COLUMN_INTERNAL_PROVIDER_DATA, channel.mPrivateData);

Uri uri = getContentResolver().insert(Channels.CONTENT_URI, values);

2018

Page 53: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

AndroidTVPrimeri – Podaci o TV servisima

Unos jednog TV servisa u bazu podataka:

Kada se unosi veća količina podataka, bolje je koristiti bulkInsert() ili applyBatch() funkcije:

PNRS 53

ContentValues values = new ContentValues();

values.put(Channels.COLUMN_DISPLAY_NUMBER, channel.mNumber);

values.put(Channels.COLUMN_DISPLAY_NAME, channel.mName);

values.put(Channels.COLUMN_ORIGINAL_NETWORK_ID, channel.mOriginalNetworkId);

values.put(Channels.COLUMN_TRANSPORT_STREAM_ID, channel.mTransportStreamId);

values.put(Channels.COLUMN_SERVICE_ID, channel.mServiceId);

values.put(Channels.COLUMN_VIDEO_FORMAT, channel.mVideoFormat);

values.put(Channels.COLUMN_INTERNAL_PROVIDER_DATA, channel.mPrivateData);

Uri uri = getContentResolver().insert(Channels.CONTENT_URI, values);

ArrayList<ContentProviderOperation> ops = new ArrayList<>();

int size = mPrograms.size();

for (int i = 0; i < size; ++i) {

ProgramInfo program = mPrograms.get(i);

ops.add(ContentProviderOperation

.newInsert(TvContract.Programs.CONTENT_URI)

.withValues(...)

.build());

if (i % 100 == 99 || i == size - 1) {

getContentResolver().applyBatch(TvContract.AUTHORITY, ops);

ops.clear();

}

}

2018

Page 54: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

AndroidTVPrimeri – Podaci o TV servisima

Kada se osvežava baza TV servisa, potrebno je koristiti update() funkciju, umesto delete(), praćenu sa insert()

Obrada podataka ne treba da blokira “glavnu” nit. Preporuka je koristiti AsyncTask, kao jedan način na koji

se ovaj zadatak može izvesti asinhrono:

Ukoliko se podaci dovlače sa servera (IPTV), razmisliti o SyncAdapter-u.

PNRS 542018

Page 55: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

AndroidTVPrimeri – TV Input

Glavna uloga TvInputService je da kreira i obezbedi instancu TvInputService.Session na zahtev

Uglavnom, ovaj zahtev dolazi od TV aplikacije, kada pokuša da promeni TV servis, na odgovarajućem TvView

PNRS 55

public class VendorTvInputService extends TvInputService {

@Override

public final Session onCreateSession(String inputId) {

// May return null if the device is not available at the moment.

return new VendorSession(VendorTvInputService.this);

}

...

}

2018

Page 56: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

AndroidTVPrimeri – TV Input sesija

Kada se napravi sesija za odgovarajući ulaz, TV aplikacija prosleđuje Surface objekat i URI TV servisa.

PNRS 56

public class VendorSession extends Session {

@Override

public boolean onSetSurface(Surface surface) {

// Connect the surface with the tv_input HAL.

TvInputManager.Hardware hardware = mManager.acquireTvInputHardware(...);

TvStreamConfig config;

// Get the config via TvInputManager.HardwareCallback before calling

// setSurface()

hardware.setSurface(surface, config);

return true;

}

@Override

public boolean onTune(Uri channelUri) {

notifyVideoUnavailable(VIDEO_UNAVAILABLE_REASON_TUNING);

// Do own operation for tuning to a new channel.

// Either register a callback that invokes notifyVideoAvailable() when

// tuning is done (preferred) or call it here.

notifyVideoAvailable();

}

2018

Page 57: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

AndroidTVPrimeri – Video status

TV aplikacija se oslanja na status video reprodukcije od TV ulaza:

notifyVideoAvailable()

Obaveštava TV aplikaciju da je video spreman za gledanje

Koristi se da se TV aplikaciji da do znanja da omogući video prikaz

notifyVideoUnavailable()

Obaveštava TV aplikaciju da video sadržaj više nije spreman za gledanje.

Mogući razlozi su:VIDEO_UNAVAILABLE_REASON_UNKNOWN

VIDEO_UNAVAILABLE_REASON_TUNING

VIDEO_UNAVAILABLE_REASON_WEAK_SIGNAL

VIDEO_UNAVAILABLE_REASON_BUFFERING

PNRS 572018

Page 58: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

AndroidTVPrimeri – Prevodi i multiaudio

Za svaki TV servis, TV ulaz treba da obezbedi informacije o broju i tipu traka za prevode i audio (ukoliko postoje)

Koristite TvTrackInfo.Builder za konstrukciju

specifičnih video/audio/prevod informacija:

PNRS 58

TvTrackInfo track = new TvTrackInfo.Builder(TvTrackInfo.TYPE_AUDIO, “ID-X”)

.setAudioChannelCount(format.numChannels)

.setAudioSampleRate(format.audioSamplingRate)

.setLanguage(format.language)

.build();

2018

Page 59: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

AndroidTVPrimeri – Prevodi i multiaudio

Potrebno je pozvati notifyTracksChanged(...) čim

se informacije o novoj traci obezbede, i obezbediti odgovor na onSelectTrack(...) funkciju.

PNRS 59

public class VendorSession implements Session {

@Override

public boolean onTune(Uri channelUri) {

mVendorTuner.tune(channelUri, new VendorTunerCallback() {

void onTuneDone() {

notifyTracksChanged(mVendorTuner.getTracks());

// Report the tracks selected by default.

notifyTrackSelected(TvTrackInfo.TYPE_AUDIO,

mSelectedAudioTrack);

// Do the same for TYPE_SUBTITLE, if available.

}

});

}

@Override

public boolean onSelectTrack(int type, String trackId) {

if (mVendorTuner.selectTrack(type, trackId)) {

notifyTrackSelected(type, trackId);

}

}

2018

Page 60: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

AndroidTVPrimeri – Overlay

TV ulazi mogu da koriste overlay mehanizam (prikaz

grafičkog sadržaja “preko” video sadržaja) za prikaz prevoda, banera (za reklame) i sl.

PNRS 60

public class VendorTvInputService extends TvInputService {

@Override

public final Session onCreateSession(String inputId) {

VendorSession session = new VendorSession(

VendorTvInputService.this);

session.setOverlayViewEnabled(true);

return session;

}

public class VendorSession extends Session {

@Override

public View onCreateOverlayView() {

LayoutInflater inflater = (LayoutInflater)getSystemService(

LAYOUT_INFLATER_SERVICE);

mView = inflater.inflate(R.layout.overlayview, null);

return mView;

}

...

2018

Page 61: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

Kraj

Pitanja?

PNRS 612018

Page 62: Projektovanje Namenskih Računarskih Struktura · Motivacija Obezbediti korisniku najbolji mogući korisnički ugođaj Standardizovati API Jedan TV Input A na uređaju X, takođe

Literatura

https://www.android.com/tv/

https://source.android.com/devices/tv/

2018 PNRS 62