Systemy Wbudowane
Dr inż. Mariusz Fraś
Programowanie aplikacji MHP
© maf 1
Å›
awska
Å‚
Fra
Wroc
Informatyki
Mariusz
Instytut
Politechnika
Aplikacje profili CDC - Xlety
" Model aplikacji
Cykl życia z określonymi stanami
Kontrola aplikacji przez Menedżer Xletów (ang. Xlet Manager /
Application Manager)
" Zarządzaniem zasobami środowiska uruchomieniowego
" Zarządzanie wykonywaniem aplikacji i ich działaniem w środowisku
" Zmiany stanu aplikacji i wywoływanie metod Xleta
" Zmiana stanu może być inicjowana na prośbę Xleta
Kontekst Xlet a
" Dostęp do kontekstu przekazywany do aplikacji przez Menadżera
Obiekt kontekstu Xlet a
Metody obiektu kontekstu
Xlet Context Xlet Context
" Pobranie informacji o swoim
środowisku uruchomieniowym
" Komunikacja ze środowiskiem
Xlet A Xlet B
Zawiadomienia o zmianie
stanu
Application Manager
© maf 2
Å›
awska
Å‚
Fra
Wroc
Informatyki
Mariusz
Instytut
Politechnika
Aplikacje profili CDC - Xlety
" Cykl życia Xlet ów
4 stany działania Xlet ów
" Załadowany (Loaded)
Xlet Manager utworzył Xlet
Kod załadowany ale nie zainicjalizowany
" Zawieszony (Paused)
" Aktywny (Active)
" Zniszczony (Destroyed)
Zwolnione zasoby i przerwane działanie
new()
initXlet()
Loaded Paused
destroyXlet() startXlet() pauseXlet()
destroyXlet()
Destroyed Active
destroyXlet()
© maf 3
Å›
awska
Å‚
Fra
Wroc
Informatyki
Mariusz
Instytut
Politechnika
Aplikacje profili CDC - Xlety
" Szkielet Xletu
Interfejs javax.microedition.xlet.Xlet
Interfejs w MHP javax.tv.xlet.Xlet
Konstruktor
" Publiczny i bezargumentowy
Metody obowiÄ…zkowe interfejsu Xlet
// w profilu Personal:
// import javax.microedition.xlet.Xlet
// w MHP:
import javax.tv.xlet.Xlet
public class MojXlet implements Xlet
{
public void initXlet(XletContext ctx) throws XletStateChangeException
{...}
public void startXlet() throws XletStateChangeException
{...}
public void pauseXlet()
{...}
public void destroyXlet(boolean cond) throws XletStateChangeException
{...}
}
© maf 4
Å›
awska
Å‚
Fra
Wroc
Informatyki
Mariusz
Instytut
Politechnika
Aplikacje profili CDC - Xlety
" Funkcjonowanie Xlet a
Zmiany stanu inicjowane przez Xlet Manager (XM)
" initXlet() wywoływane raz
Inicjalizacja zasobów
" startXlet() wywoływane wielokrotnie
Realizacja usługi
" pauseXlet() wywoływane wielokrotnie
Zwalnianie zasobów środowiska uruchomieniowego
" destroyXlet(boolean flaga)
Zwalnianie zasobów i usuwanie aplikacji
Gdy pozostałe metody kończą się nie przechwytywanym wyjątkiem
Flaga warunku = false wyrzucanie XletStateChangeException
nie powoduje przechodzenie w stan Destroyed
Zmiany stanu inicjowane z aplikacji
" Poprzez metody interfejsu XletContext
" notifyPaused() - wcześniej to co w pauseXlet()
" notifyDestroyed() - wcześniej to co w destroyXlet()
" resumeRequest() - XM wywołuje startXlet()
© maf 5
Å›
awska
Å‚
Fra
Wroc
Informatyki
Mariusz
Instytut
Politechnika
Przykład ogólny Xlet a
Niezbędne pakiety
// w MHP:
import javax.tv.xlet.Xlet
// w Personal Profile:
// import javax.microedition.xlet.*;
// i pozostałe pakiety np. potrzebne do grafiki
import java.awt.Component; //w MHP lepiej HComponent
import java.awt.Container; //w MHP lepiej HContainer
...
Klasa główna i zmienne
// Klasa MojXlet implementuje interfejs Xlet
public class MojXlet implements Xlet
{
// zmienne
private HContainer mojKontener;
private XletContext mojKontekst;
...
//i dalej niezbędne metody
...
}
© maf 6
Å›
awska
Å‚
Fra
Wroc
Informatyki
Mariusz
Instytut
Politechnika
Podstawowe elementy programowania Xlet a
Inicjalizacja Xletu
" Zachowanie kontekstu Inicjalizacja zasobów
public void initXlet(XletContext ctx)
{
private boolean wystartowany;
try
{
mojKontekst = this.ctx;
// tu przygotowanie zasobów używanych do działania aplikacji
// - utworzenie sceny (o tym potem), komponentów graficznych itp.
// - rozmiary i lokalizacje muszą być ustawione
scena = ...
mojKontener = ...
scena.add(...)
// w profilu Profile jest inaczej:
// XletContext.getContainer zwraca kontener rodzica
} catch (Exception e)
{
//obsługa wyjątku
}
}
© maf 7
Å›
awska
Å‚
Fra
Wroc
Informatyki
Mariusz
Instytut
Politechnika
Podstawowe elementy programowania Xlet a
Start Xletu
public void startXlet() {
// zasadniczo wszystko powinno być tu nowym wątku
// tu: włączenie/uwidocznienie elementów, ustawienie ogniska, ...
mojKontener.setVisible(true); // lub scena.show();
...
// w MHP można uwidocznić całą scenę!
}
Zawieszenie Xletu
public void pauseXlet()
{
mojKontener.setVisible(false); // tu: ukrycie/wyłączenie elementów
...
}
Usunięcie Xletu
public void destroyXlet(boolean warunek)
{
if (warunek) {
// tu: zwolnienie zasobów - wyłączenie/usunięcie wszystkiego
} else {
throw new XletStateChangeException( Noooo! Mercy!");
}
}
© maf 8
Å›
awska
Å‚
Fra
Wroc
Informatyki
Mariusz
Instytut
Politechnika
Interfejs graficzny aplikacji MHP
" Model wyświetlacza MHP
UrzÄ…dzenia i warstwy graficzne
3 warstwy wyświetlacza TV tło, video i grafika
HScreen klasa reprezentująca urządzenie wyświetlające
" Jedna instancja na jeden fizyczny wyświetlacz
" HScreenDevice obiekt składowy - reprezentuje warstwy
HBackgroundDevice
HVideoDevice
HGraphicsDevice
HScreen
HBackgroundDevice
HVideoDevice
HGraphicsDevice
© maf 9
Å›
awska
Å‚
Fra
Wroc
Informatyki
Mariusz
Instytut
Politechnika
Interfejs graficzny aplikacji MHP
" Obszary ekranu
Scena specjalny pojemnik na komponenty graficzne aplikacji
© maf 10
Å›
awska
Å‚
Fra
Wroc
Informatyki
Mariusz
Instytut
Politechnika
Interfejs graficzny aplikacji MHP
" HScene
Klasa pakietu org.havi.ui org.havi.ui.HScene
Adaptuje specyfikę środowiska MHP
Jedna instancja klasy dla jednej aplikacji, dla jednego HScreen
Separuje działania graficzne aplikacji niedostępny dla innych
Dodatkowe funkcje (w stosunku do Frame)
" Przezroczystość
" Kompozycje
" Proporcje
obrazu
HScene
HScene
HContainer HComponent
HContainer
HComponent
HComponent HComponent
© maf 11
Å›
awska
Å‚
Fra
Wroc
Informatyki
Mariusz
Instytut
Politechnika
Interfejs graficzny aplikacji MHP
" Uzyskiwanie sceny
Schemat kreacji sceny
2
1
HSceneTemplate
Apl.
HSceneFactory HScene
3 4
HSceneTemplate szablon sceny z preferencjami
HSceneFactory klasa produkcyjna scen
public static HSceneFactory getInstance();
public void dispose(HScene scena);
public HSceneTemplate getBestSceneTemplate(HSceneTemplate hst);
public Hscene getBestScene(HSceneTemplate hst);
public HScene getFullScreenScene(HGraphicsDevice hgd,
Dimension rozdzielczosc);
© maf 12
Å›
awska
Å‚
Fra
Wroc
Informatyki
Mariusz
Instytut
Politechnika
Interfejs graficzny aplikacji MHP
" Uzyskiwanie sceny
HSceneTemplate szablon sceny z preferencjami
public void setPreference(int preferencja,
Object obiekt,
int priorytet);
public int getPreferencePriority(int preferencja);
public Object getPreferenceObject(int preferencja);
Preferencje
" Określają własności (cechy) sceny np.:
LARGEST_DIMENSION
SCENE_PIXEL_RESOLUTION
SCENE_SCREEN_RECTANGLE
Priorytety
" REQUIRED
" PREFERRED
" UNNECESSARY
© maf 13
Å›
awska
Å‚
Fra
Wroc
Informatyki
Mariusz
Instytut
Politechnika
Interfejs graficzny aplikacji MHP
" Uzyskiwanie sceny
Prosty przykład
import org.havi.ui.* // HScene, HSceneFactory i HSceneTemplate
HScene scena;
HSceneFactory fabryka;
HSceneTemplate szablon;
szablon = new HSceneTemplate();
fabryka = HSceneFactory.getInstance();
scena = fabryka.getBestScene(szablon);
To samo:
HScene scena = HSceneFactory.getInstance().
getBestScene(new HSceneTemplate());
© maf 14
Å›
awska
Å‚
Fra
Wroc
Informatyki
Mariusz
Instytut
Politechnika
Interfejs graficzny aplikacji MHP
" Komponenty graficzne (widgety)
Tylko lekkie komponenty AWT w MHP
HAVi Level 2 GUI (org.havi.ui) zamienny zbiór widgetów
" HAnimation " HGraphicButton
" HIcon " HListGroup
" HMultilineEntry " HOrientable
" HRange " HRangeValue
" HSinglelineEntry " HStaticAnimation
" HStaticIcon " HStaticRange
" HStaticText " HText
" HTextButton " HToggleButton
Formaty graficzne: GIF, JPEG, PNG, MPEG I-frame
" Kolory
256-CLUT zarezerwowane = 188 kolorów
Zwykle 24-bit kolory (MPEG I-frame zawsze)
Nieobsługiwane: przybliżane lub ignorowane
© maf 15
Å›
awska
Å‚
Fra
Wroc
Informatyki
Mariusz
Instytut
Politechnika
Interfejs graficzny aplikacji MHP
" Blending video i grafiki
Wsparcie efektu przezroczystości (alpha blending)
" MHP API
" HAVi
org.dvb.ui.DVBGraphics
" Podklasa kontekstu graficznego dodatkowa funkcjonalność
" Reguły kompozycji: oddziaływanie zawart. graficznej na inne plany
" Metody:
int[] getAvailableCompositeRules();
setDVBComposite(DVBAlphaComposite regulaKompozycji);
org.dvb.ui.DVBAlphaComposite
" Klasa definiowania reguł dla kontekstu graficznego
" Konstruktor 2-parametrowy
int reguła
float wartość alfa (minimum: 1; 0,3; 0)
DVBAlphaComposite.getInstance(regula);
DVBAlphaComposite.getInstance(regula, alfa);
int getRule();
float getAlpha();
© maf 16
Å›
awska
Å‚
Fra
Wroc
Informatyki
Mariusz
Instytut
Politechnika
Interfejs graficzny aplikacji MHP
" Reguły
" Przykład
HComponent komp;
...
// ustawienie blendingu dla komponentu komp
DVBGraphics gc = (org.dvb.ui.DVBGraphics) komp.getGraphics();
DVBAlphaComposite reg = DVBAlphaComposite.getInstance(SRC_OVER, 0.5);
gc.setDVBComposite(reg);
© maf 17
Å›
awska
Å‚
Fra
Wroc
Informatyki
Mariusz
Instytut
Politechnika
Interakcje z komponentami HAVi
" 5 klas definiujących działania komponentów HAVi
HVisible nadklasa wszystkich komponentów
Hstate
" Definiują podstawowe stany komponentów
Stan Znaczenie Stała
Normal Brak interakcji NORMAL_STATE
Disabled Niemożliwa interakcja DISABLED_STATE
Focused Komponent posiada ognisko na wejście FOCUSED_STATE
Actioned Wykonana została akcja wejściowa (naciśnięcie klaw., & ) ACTIONED_STATE
" Istnieją kombinacje tych stanów
" Wszystkie komponenty mogą być w stanach Normal lub Disabled
" Pozostałe stany i kombinacje dla komponentów implementujących
odpowiednie interfejsy
HNavigable HTextValue
HActionable HAdjustmentValue
HSwitchable HItemValue
© maf 18
Å›
awska
Å‚
Fra
Wroc
Informatyki
Mariusz
Instytut
Politechnika
Interakcje z komponentami HAVi
" HNavigable
Pozwala uzyskać ognisko na wejście
Umożliwia realizację działań przy uzyskiwaniu i traceniu ogniska
Stany:
Focused Normal
Disabled Focused Disabled
Zdarzenia:
- focusGained()
HFocusEvent
HFocusListener
- focusLost()
Metody definiujące kolejność uzyskiwania/tracenia ogniska przez
komponenty - ścieżka nawigacyjna
" HNavigable.setMove(...)
Dwa parametry: kod klawisza, obiekt (pod)klasy HVisible
" HNavigable.setFocusTraversal(...)
Cztery parametry dla 4 klawiszy strzałek (góra/dół/w lewo/w prawo)
Parametr może być Null
© maf 19
Å›
awska
Å‚
Fra
Wroc
Informatyki
Mariusz
Instytut
Politechnika
Interakcje z komponentami HAVi
" HActionable
Dodaje wsparcie dla interakcji z działaniem użytkownika
Stan Actioned po akcji użytkownika
Stany:
Actioned Focused Focused Normal Actioned
Disabled Focused Disabled
Stan Actioned
" Jest chwilowy
" Implementowane tylko przez klasy guzika (button)
Zdarzenia
HActionEvent
HActionListener - actionPerformed()
© maf 20
Å›
awska
Å‚
Fra
Wroc
Informatyki
Mariusz
Instytut
Politechnika
Interakcje z komponentami HAVi
" HSwitchable
Trwałe przełączanie stanu Actioned
" Akcja na obiekcie pozostawia go w stanie Actioned dopóki inna
akcja nie będzie na nim wykonana
" Wyłączenie obiektu (disable) pozostawia stan Actioned
Actioned
Focused Normal Actioned
Focused
Disabled
Disabled Disabled
Actioned
Disabled
Focused Actioned Focused
Zdarzenia jak dla HActionable
Metoda sprawdzajÄ…ca stan
" boolean getSwitchableState()
© maf 21
Å›
awska
Å‚
Fra
Wroc
Informatyki
Mariusz
Instytut
Politechnika
Interakcje z komponentami HAVi
" HTextValue, HAdjustmentValue, HItemValue
Dla obiektów zawierających informację określającą ich stan
" Komponenty z edytowalnym polem tekstowym
" Komponenty z wartością numeryczną (np. suwak)
" Komponenty z zawartością do wyboru (np. HListGroup)
Umożliwiają rejestrowanie słuchaczy wykonujących określona
działania na skutek zmian wartości obiektu (zawartej informacji)
HtextValue (komponenty z edytowalnym polem tekstowym)
- textChanged()
HTextEvent
HTextListener
- caretMoved()
HAdjustementValue (komponenty z wartością numeryczną)
HAdjustement Event
HAdjustementListener - valueChanged()
HItemValue (komponenty z zawartością do wyboru)
- currentItemChanged()
HItemEvent
HItemListener
- selectionChanged()
© maf 22
Å›
awska
Å‚
Fra
Wroc
Informatyki
Mariusz
Instytut
Politechnika
Interakcje z komponentami HAVi
" Przykład użycia
import org.havi.ui.* // HTextButton, HActionListener, HrcEvent, ...
...
HtextButton guzik1 = new HTextButton(...);
HtextButton guzik2 = new HTextButton(...);
guzik1.addHActionListener(sluchacz);
guzik1.setMove(HrcEvent.VK_RIGHT , guzik2); //ustawienie przejścia na
//guzik2 po naciśnięciu
//strzałki w prawo
//UWAGA! guzik2 musi być
//wcześniej utworzony
public class sluchacz implements HActionListener
{
public void actionPerformed()
{
... // tu obsługa wykonania akcji (naciśnięcia guzika / klawisza
ENTER gdy fokus jest na guziku)
}
}
© maf 23
Å›
awska
Å‚
Fra
Wroc
Informatyki
Mariusz
Instytut
Politechnika
Interakcje z komponentami HAVi
" Zachowanie komponentów HAVi
Komponent Interfejs
HAnimation HNavigable
HGraphicButton HActionable
HIcon HNavigable
HListGroup HItemValue
HMultilineEntry HTextValue
HRange HNavigable
HRangeValue HAdjustmentValue
HSinglelineEntry HTextValue
HStaticAnimation HVisible
HStaticIcon HVisible
HStaticRange HVisible
HStaticText HVisible
HText HNavigable
HTextButton HActionable
HToggleButton HSwitchable
© maf 24
Å›
awska
Å‚
Fra
Wroc
Informatyki
Mariusz
Instytut
Politechnika
Obsługa zdarzeń wejściowych użytkownika
1. Mechanizm kompatybilny z AWT
org.havi.ui.event rozszerzenie/wsparcie dla DTV
2. Mechanizm niezależny (poprzedzający) od AWT
org.dvb.event pakiet definiujÄ…cy API
Zdarzenie
" Obsługa naciśnięć klawiszy
" Możliwość dalszych rozszerzeń
Repozytorium zdarzeń
" Definicja zdarzeń aplikacji
" Tylko jedno dla aplikacji
Słuchacz klasa obsługi zdarzeń
Zarządca zdarzeń inicjacja i kontrola działań
Trudne kwestie:
" Utrata dostępu do zdarzeń
" Wyłączny dostęp do zdarzeń
" Obsługa przy niewidocznym interfejsie
© maf 25
Å›
awska
Å‚
Fra
Wroc
Informatyki
Mariusz
Instytut
Politechnika
Obsługa zdarzeń wejściowych użytkownika
" Podstawowy schemat działania
Zdefiniowanie słuchacza i metody obsługi zdarzeń
Inicjacja Xletu
" Tworzenie repozytorium zdarzeń
" Definiowanie obsługiwanych zdarzeń
" Pobranie menadżera zdarzeń
Uruchomienie Xletu
" Zainicjowanie/włączenie słuchacza
Pauza/zatrzymanie Xletu
" Usunięcie/wyłączenie słuchacza
Usunięcie Xletu
" Usunięcie/wyłączenie słuchacza
© maf 26
Å›
awska
Å‚
Fra
Wroc
Informatyki
Mariusz
Instytut
Politechnika
Obsługa zdarzeń wejściowych użytkownika
" Klasy/interfejsy
org.dvb.event.UserEventListener
" Interfejs który musi implementować słuchacz aplikacji
userEventReceived(UserEvent zdarzenie)
org.dvb.event.UserEventRepository
" Tylko jedno dla aplikacji
" Metody dodawania i usuwania zdarzeń
public void addKey(int keycode);
public void addAllNumericKeys();
public void addAllArrowKeys();
public void addAllColourKeys();
org.dvb.event.EventManager
" Singleton
" Dodawanie/rejestrowanie słuchacza
addUserEventListener(UserEventListener sluchacz,
UserEventRepository repo)
" Usuwanie/wyłączanie słuchacza
removeUserEventListener(UserEventListener sluchacz)
© maf 27
Å›
awska
Å‚
Fra
Wroc
Informatyki
Mariusz
Instytut
Politechnika
Obsługa zdarzeń wejściowych użytkownika
" Klasy/interfejsy
org.dvb.event.UserEvent
" Metody: getCode() , getType() , ...
" org.havi.ui.event.HRcEvent rozszerzenie AWT KeyEvent
" Standardowe zdarzenia z pilota (stałe):
stała klawisz kod
VK_LEFT strzałka w lewo
VK_RIGHT strzałka w prawo
VK_UP strzałka do góry
VK_DOWN strzałka w dół
VK_ENTER klawisz selekcji (ENTER/OK)
VK_0 DO VK_9 klawisze numerowane 48 57
VK_COLORED_KEY_0 pierwszy klawisz kolorowy 403
VK_COLORED_KEY_1 drugi klawisz kolorowy 404
VK_COLORED_KEY_2 trzeci klawisz kolorowy 405
VK_COLORED_KEY_3 czwarty klawisz kolorowy 406
VK_TELETEXT klawisz teletekstu 459
© maf 28
Å›
awska
Å‚
Fra
Wroc
Informatyki
Mariusz
Instytut
Politechnika
Obsługa zdarzeń wejściowych użytkownika
" Przykład kodu (fragment)
Klasa główna
private UserEventRepository repo;
//w initXlet:
repo = new UserEventRepository ("xlet");
repo.addAllColourKeys();
em = EventManager.getInstance();
//w startXlet:
em.addUserEventListener(sluchacz,repo);
Klasa słuchacza
public class sluchacz implements UserEventListener
{
public void userEventReceived(UserEvent e) {
if(e.getType() == HRcEvent. ...) {
switch (e.getCode()) { ... }
...}
}
© maf 29
Å›
awska
Å‚
Fra
Wroc
Informatyki
Mariusz
Instytut
Politechnika
Obsługa zdarzeń wejściowych użytkownika
" Współdziałanie przy obsłudze zdarzeń
Zdarzenia wejścia a normalny tryb sterowania odbiornikiem TV
" VK_TELETEXT i VK_COLORED_KEY_0& 3 bez ograniczeń
" Inne klawisze musi być widoczny komponent obejmujący 3%
ekranu
Obsługa różnych urządzeń i klawiszy
" Klasa HRcCapabilities
public class HRcCapabilities extends HKeyCapabilities
{
public static boolean getInputDeviceSupported();
public static boolean isSupported(int kod_kl);
public static HEventRepresentation getRepresentation(int kod_kl);
}
" Klasa HEventRepresentation
Dostarcza informacji jak reprezentowany jest dany klawisz
Wyłączny dostęp do zdarzeń wejściowych
" Warianty metody addUserEventListener()
" Metoda addExclusiveAccessToAWTEvent()
© maf 30
Å›
awska
Å‚
Fra
Wroc
Informatyki
Mariusz
Instytut
Politechnika
Obsługa strumieni w DVB
Materiał dodatkowy
© maf 31
Å›
awska
Å‚
Fra
Wroc
Informatyki
Mariusz
Instytut
Politechnika
Obsługa strumieni w DVB
" Kanał rozsiewczy (nadawczy)
Strumień transportowy MPEG-2
" Pakietyzowane strumienie elementarne (PES)
" Sekcje MPEG
DSM-CC (Digital Storage Media Command and Control) mechanizmy
realizacji usług medialnych (różne) tu: transmisja danych w MPEG-2
PSI (Programm Specific Information)
Dane opisujące strumień
SI (Service Information)
DVB
UDP
IP
Object
DVB
Datagram
Carousel
Data
DVB
DVB DSM-CC
MPEG MPEG MPEG DVB
Carousel
Data
Multiprotocol Object
Audio Video PSI SI
Stream
Encapsulation Carousel
DSM-CC DSM-CC
Data Data Carousel
PES MPEG Sections
MPEG-2 Transport Stream
© maf 32
Å›
awska
Å‚
Fra
Wroc
Informatyki
Mariusz
Instytut
Politechnika
Obsługa strumieni w DVB
" Kanał zwrotny DSM-CC UU
Object
Protokoły
Carousel
" Właściwy danej sieci
HTTP
802.3, PPP, & UNO-RPC UDP
Service
modem, LAN NIC UNO-CDR
Specific
TCP
" IP
" TCP
IP
" UDP
Network Dependent Protocol
" HTTP
" Dla operacji na obiektach w interaktywnych aplikacjach
DSM-CC User-to-User Data Carousel
UNO-RPC Universal Networked Object - Remote Procedure Call
UNO-CDR Universal Networked Object - Common Data
Representation
© maf 33
Å›
awska
Å‚
Fra
Wroc
Informatyki
Mariusz
Instytut
Politechnika
Obsługa strumieni w DVB
" Strumień MPEG-2
Transport Stream (TS)
" DVB-S i DVB/C: 40 Mb/s, DVB-T: 25 Mb/s
Elementary Stream (ES)
" Podstrumienie MPEG-2 video, audio i dane nie-AV
" Unikalny ID
" Wielokrotne użycie ES
ES (video)
kanał1
Event Pojedynczy program
ES (audio)
ES (dane)
Service Information (SI)
ES (video)
" ES z informacją o zawartości TS
ES (audio)
" Baza danych opisujÄ…ca strukturÄ™
kanał2
ES (audio)
strumienia TS
TS
ES (dane)
SI Database
ES (video)
" Baza zawierająca SI dostępna dla kanał3
ES (audio)
aplikacji TV
ES (dane)
Grupa kanałów: Bouquet
SI
SI
Grupa TS: Network
© maf 34
Multiplekser
Å›
awska
Å‚
Fra
Wroc
Informatyki
Mariusz
Instytut
Politechnika
Model serwisu
" Service kanał TV, program TV
Kolekcja pojedynczych komponentów medialnych (ang. Service
Components)
Service Component
" Strumień video
" Strumień audio
" Aplikacja Javy
" Inne dane
" Może być dzielony przez wiele serwisów
Service Locator
Transport Stream
" Informacja niezbędna
do adresowania
zródła prezentacji
Service Service Service
Event Event
ES ES ES
© maf 35
Å›
awska
Å‚
Fra
Wroc
Informatyki
Mariusz
Instytut
Politechnika
Model serwisu
" Kontekst serwisu
Service context
Pojemnik na wszystkie
media aplikacja
elementy serwisu
Każdy prezentowany
media aplikacja
serwis ma własny kontekst
service content handlers
Pakiet:
javax.tv.service.selection
public interface ServiceContext
{
public ServiceContentHandler[] getServiceContentHandlers()
throws SecurityException;
public void select(javax.tv.locator.Locator[] components)
throws InvalidLocatorException,&
public void select(javax.tv.service.Service selection)
throws SecurityException;
public Service getService();
public void stop() throws SecurityException;
public void destroy() throws SecurityException;
public void addListener(ServiceContextListener listener);
public void removeListener(ServiceContextListener listener);
}
© maf 36
Å›
awska
Å‚
Fra
Wroc
Informatyki
Mariusz
Instytut
Politechnika
Model serwisu
" Stany i zdarzenia kontekstu serwisu
ServiceContextListener
ServiceContextEvent
" PresentationChangedEvent
zmienił się prezentowany kontent na skutek wyboru lub niedostępności
" SelectionFailedEvent
nie można prezentować nowo wybranego serwisu
" PresentationTerminatedEvent
zatrzymanie prezentacji występuje po stop()lub po destroy()
" ServiceContextDestroyedEvent
© maf 37
Å›
awska
Å‚
Fra
Wroc
Informatyki
Mariusz
Instytut
Politechnika
Obsługa strumieni w DVB
" DVB-J API do obsługi strumieni
JavaTV
" API w MHP ver. 1.0
Kategorie API dotyczące wyboru i obsługi Serwisów, obsł. mediów i in.
" Pakiety (niektóre, z DVB)
javax.tv.service obsługa Serwisów DTV dostęp do SI Database
javax.tv.media specyficzne dla TV rozszerzenia JMF
javax.tv.net mechanizm dla obsługi datagramów IP w strumieniu
javax.tv.locator mechanizm adresacji elementów medialnych
JMF Java Media Framework
" API w MHP ver. 1.1
javax.media javax.media.protocol
Restrykcje i rozszerzenia JavaTV i JMF
DVB i DAVIC API
" org.davic.media dodatkowe rozszerzenia do JMF
" org.davic.* inne rozszerzenia do obsługi strumieni MPEG
" org.dvb.media dodatkowe rozszerzenia do JMF
" org.dvb.* inne rozszerzenia
© maf 38
Å›
awska
Å‚
Fra
Wroc
Informatyki
Mariusz
Instytut
Politechnika
Adresowanie zawartości
" Lokator
Obiekt reprezentujący referencję do adresowalnych zasobów
cyfrowej TV
Zewnętrzna forma lokatora (external form) adres w postaci
URL
dvb://
..[.[&]][;][]
" onID original network ID
" tsID transport stream ID
" sID service ID
Przykłady lokatorów DVB
" dvb://123.456.789 Serwis DVB (netID.tstreamID.servID)
" dvb://123.456.789.44 ES w Serwisie
" dvb://123.456.789;55 Event w Serwisie
" dvb://123.456.789/obrazki/pies.gif plik w karuzeli obiektów
© maf 39
Å›
awska
Å‚
Fra
Wroc
Informatyki
Mariusz
Instytut
Politechnika
Adresowanie zawartości
" Lokatory (c.d.)
Różne lokatory do różnych zastosowań
" javax.media.MediaLocator
w JMF do zawartości medialnej
w DVB do Serwisu lub Komponentu Serwisu (np. strumienia
wideo)
org.davic.media.MediaLocator
- rozszerzenie klasy javax.media.MediaLocator
org.dvb.locator.NetworkInterfaceBoundMediaLocator
do fragmentu zawartości tunera (od MHP 1.1.2)
" javax.tv.locator.Locator
w JavaTV do dowolnych emitowanych zawartości
org.davic.net.Locator
rozszerza javax.tv.locator.Locator
org.davic.net.dvb.DvbLocator
do TS i Serwisów DVB
org.davic.net.dvb.DvbNetworkBoundLocator
org.dvb.locator.FrequencyLocator
gdy brak SI w TS (od MHP 1.1.2).
© maf 40
Å›
awska
Å‚
Fra
Wroc
Informatyki
Mariusz
Instytut
Politechnika
Adresowanie zawartości
" Integracja interfejsów w MHP
2 hierarchie klas
javax.tv.locator.
javax.media.
Locator
MediaLocator
org.davic.net.
Locator
org.davic.media.
MediaLocator
org.davic.net.dvb. org.dvb.locator.
DvbLocator FrequencyLocator
org.dvb.locator.
org.davic.net.dvb.
NetworkInterfaceBoundMediaLocator
DvbNetworkBoundLocator
Powiazanie pomiędzy grupami lokatorów
" org.davic.MediaLocator ma konstruktor z argumentem
org.davic.net.Locator
" Forma zewnętrzna lokatora:
public java.lang.String toExternalForm()
© maf 41
Å›
awska
Å‚
Fra
Wroc
Informatyki
Mariusz
Instytut
Politechnika
Odczyt informacji serwisowych
" Zapytania o informację z SI zawartość (content)
serwis i jego szczegóły,
serwisy w strumieniu transportowym,
strumienie elementarne w serwisie,
zdarzenia w serwisie,
strumienie transportowe, bukiety i sieci,
pliki rozgłaszane w systemie plików.
" Obsługa asynchroniczna
Nie natychmiastowy dostęp do informacji
Zapytania o informacje serwisowe i zawiadomienia o statusie
Słuchacze z obsługą wyjątków
WyjÄ…tki
" pozytywne zakończenie zapytania,
" brak możliwości odczytu danych
" ...
© maf 42
Å›
awska
Å‚
Fra
Wroc
Informatyki
Mariusz
Instytut
Politechnika
Odczyt informacji serwisowych
" Java TV SI API
Informacje o:
" strumieniu transportowym
" serwisach
" zdarzeniach
Nawigacja pomiędzy strumieniami i serwisami
javax.tv.service.SIManager podstawowa klasa wspierająca dostęp
do SI Database
public abstract class SIManager
{
static SIManager createInstance()
abstract Service getService(Locator lokator);
abstract SIRequest retrieveServiceDetails(Locator lokator,
SIRequestor requestor);
abstract SIRequest retrieveProgramEvent(Locator lokator,
SIRequestor requestor);
abstract SIRequest retrieveSIElement(Locator lokator,
SIRequestor requestor);
abstract ServiceList filterServices(ServiceFilter filtr);
...
}
© maf 43
Å›
awska
Å‚
Fra
Wroc
Informatyki
Mariusz
Instytut
Politechnika
Odczyt informacji serwisowych
aplikacja
" Java TV SI API
SIManager
zapytanie
SIManager
( get& (), retrieve& () )
SIRequest
zwracany element
" Obiekt
SIRequest
odwołania do
zapytania
SÅ‚uchacz - SIRequestor
" Metoda
( notifySuccess(& ) )
ob. typu SIRetrievable
cancel()
np. serwis
SÅ‚uchacz
zapytanie
obiekt
" Otrzymuje
( retrieve& (), get& () )
obiekty
implementujÄ…ce
ob. typu SIRetrievable
SIRetrivable
np. ramówka
Można tworzyć
zapytanie
obiekt
wielu ( retrieve& (), get& () )
słuchaczy
ob. typu SIRetrievable
np. konkretny program
© maf 44
Å›
awska
Å‚
Fra
Wroc
Informatyki
Mariusz
Instytut
Politechnika
Odczyt informacji serwisowych
" Java TV SI API
javax.tv.service.SIRequestor interfejs wymagany dla klas
odbierających wynik asynchronicznych zapytań o dane SI
public interface SIRequestor {
public void notifyFailure(SIRequestFailureType powod);
public void notifySuccess(SIRetrievable[] rezultat);
}
" Nie ma możliwości unikalnej identyfikacji zapytań trzeba
samemu starannie kontrolować co odbieramy
javax.tv.service.SIRetrievable interfejs bazowy dla
wszystkich klas reprezentujących różne typy danych w bazie SI
" Service
" ServiceComponent
" ProgramSchedule
" ProgramEvent
" ...
Rzutowanie i sprawdzanie rodzaju obiektu
© maf 45
Å›
awska
Å‚
Fra
Wroc
Informatyki
Mariusz
Instytut
Politechnika
Odczyt informacji serwisowych
" Informacje o serwisach i zawartości
javax.tv.service.Service
" Metody:
public Locator getLocator()
public SIRequest retrieveDetails(SIRequestor requestor)
public ServiceType getServiceType()
...
javax.tv.service.navigation.ServiceDetails
" Metody:
java.lang.String getLongName()
javax.tv.service.ServiceType getServiceType();
javax.tv.service.guide.ProgramSchedule getProgramSchedule();
...
© maf 46
Å›
awska
Å‚
Fra
Wroc
Informatyki
Mariusz
Instytut
Politechnika
Odczyt informacji serwisowych
" Informacje o serwisach i zawartości
javax.tv.service.guide.ProgramSchedule
" Metody:
SIRequest retrieveCurrentProgramEvent(SIRequestor requestor);
SIRequest retrieveNextProgramEvent(ProgramEvent event,
SIRequestor requestor);
SIRequest retrieveFutureProgramEvent(java.util.Date time,
SIRequestor requestor);
SIRequest retrieveFutureProgramEvents(java.util.Date begin,
java.util.Date end,
SIRequestor requestor);
SIRequest retrieveProgramEvent(Locator locator,
SIRequestor requestor);
void addListener(ProgramScheduleListener listener);
void removeListener(ProgramScheduleListener listener);
© maf 47
Å›
awska
Å‚
Fra
Wroc
Informatyki
Mariusz
Instytut
Politechnika
Odczyt informacji serwisowych
" Wybieranie serwisów
javax.tv.service.navigation.ServiceTypeFilter filtr dla typu
serwisu
public ServiceTypeFilter(ServiceType typ)
Typy serwisów: ANALOG_TV, ANALOG_RADIO, DATA_BROADCAST,
DIGITAL_TV, DIGITAL_RADIO, DATA_APPLICATION,
NVOD_REFERENCE, NVOD_TIME_SHIFTED, UNKNOWN
javax.tv.service.navigation.ServiceList interfejs listy
serwisów
ServiceIterator createServiceIterator()
Service findService(Locator lokator) throws
InvalidLocatorException
" metody sortujÄ…ce
javax.tv.service.navigation.ServiceIterator iteracja listy
serwisów
public boolean hasNext();
public boolean hasPrevious();
public Service nextService();
public Service previousService();
© maf 48
Å›
awska
Å‚
Fra
Wroc
Informatyki
Mariusz
Instytut
Politechnika
Odczyt informacji serwisowych
" Wybieranie serwisów (przykład)
typ serwisu
URL
ServiceTypeFilter
ServiceFilter
DvbLocator
createInstance() filterService() findService()
SIManager ServiceList Service
createServiceIterator()
& ()
ServiceIterator Service
...
© maf 49
Å›
awska
Å‚
Fra
Wroc
Informatyki
Mariusz
Instytut
Politechnika
Obsługa strumieni medialnych
" Architektura obsługi strumieni medialnych
Player element dekodujący i odtwarzający strumień medialny
" javax.media.Player
Data Source element pobierający/dostarczający strumień
" javax.media.protocol.DataSource
Control rozszerzenie Player a o dodatkową funkcjonalność
" Interfejs: javax.media.protocol.Controls
transport stream
MPEG
data source
volume
player
control
http
MP3
data source
player
freeze-frame
QT
file
control
player
data source
Szczegółowa obsługa strumieni medialnych nie będzie omawiana
© maf 50
Å›
awska
Å‚
Fra
Wroc
Informatyki
Mariusz
Instytut
Politechnika
Wyszukiwarka
Podobne podstrony:
SWeh(full permission)
SWeh(full permission)
SWch(full permission)
SWch(full permission)
SWb(full permission)
SWah(full permission)
SWc(full permission)
SWch(full permission)
SWf(full permission)
SW b(full permission)
SWd(full permission)
SWah(full permission)
SWah(full permission)
wyklada ekosystem ziemi(full permission)
7 Prezentacje(full permission)
10 Konstrukcja blachowa(full permission)
5 Dokumentacja płaska(full permission)
wyklada cykl c n s(full permission)
12 Generator ram(full permission)
więcej podobnych podstron