Upload
baldric-charles
View
219
Download
4
Embed Size (px)
Citation preview
TRADlmtb
Developing DVB-Java ApplicationsDeveloping DVB-Java Applications
Richard Houldsworth
Philips Research
TRADlmtb
OverviewOverview
This presentation is an introduction to programming for DVB-Java.
How to get started. Technical details of key DVB-J concepts Hints on how to use the APIs for typical Xlets
and EPGs.
TRADlmtb
Infrastructure for App. DevelopmentInfrastructure for App. Development
You can start Java development on your favourite computer using JDK or whatever.
Need some minimal MHP APIs (e.g. JavaTV ref. impl). Does not easily allow testing of UIs on a TV
Access to developer version of an MHP STB A much better simulation of the target environment
For optimising your application's start-up time... DSMCC object carousel builders MPEG multiplexer / modulator to interface to STB
TRADlmtb
Application EnvironmentApplication Environment
Standard Java VM. MHP services can include multiple applications
Your application may need to execute at the same time as other applications in that service context (e.g. an EPG).
The application manager controls: STB resources - you need to negotiate for resources. Application lifecycle - the application can be terminated at
any time on service selection. Your application needs to work reliably in these constraints
TRADlmtb
Entry Point: XletEntry Point: Xlet
Applications must define a class which implements the javax.tv.xlet.Xlet interface.
Like java.applet.Applet but simpler & without historical browser 'baggage'.
Methods are normally called in this sequence initXlet(), startXlet(), {later} destroyXlet()
initXlet() is where most initialisation should be done startXlet() is where scarce resources should be acquired
Called by the MHP "application manager”, which sets up an XletContext for the Xlet.
TRADlmtb
Context HierarchyContext Hierarchy
Service Context 1 Service Context 2
Xlet Context Xlet Context Xlet Context
Xlet A Xlet B Xlet C
Java Media Player
Application Manager
TRADlmtb
Application DeliveryApplication Delivery
Think about how much bandwidth will be available in the network for your application.
Very simple example 256 Kbits/second bandwidth available for app. App. has 4 x 100KByte images and 120KBytes of Java
class files. 520KBytes @ 256 Kbits/second = 16 seconds How long will people wait for this application to start?
Somebody often needs to restrain the designers!
TRADlmtb
Broadcast Data: java.ioBroadcast Data: java.io
DSMCC object carousels appear as a (read-only) file system.
Classloader search path is initialised based on broadcast signalling before an application is started.
Normal File classes from java.io work fine. e.g. new java.io.FileInputStream("my_data.dat")
Classes building on java.io.File work fine. e.g. Toolkit.getImage(“background.jpg”)
Overall behaviour very like a standalone Java application - it is not very similar to Applet (it doesn’t use URLs)
TRADlmtb
Broadcast Data: org.dvb.dsmccBroadcast Data: org.dvb.dsmcc
The org.dvb.dsmcc package extends java.io . It supports asynchronous functions for broadcast file systems.
DSMCCObject.asynchronousLoad() DSMCCObject.addObjectChangeEvent()
DSMCCStreamEvent.subscribe() Use ServiceDomain.attach() to attach to another object
carousel For early development, treat DSMCC as a normal file
system. Use extended API when you need fine control over your broadcast data.
TRADlmtb
Other data sourcesOther data sources
MPEG-2 section filter API: org.davic.mpeg.sections Useful for non-MHP data broadcast protocols,
e.g. sharing images between MHP and existing boxes. Even accessing Data Carousels.
IP interface: java.net Used for both return (bidirectional) and broadcast
channels (multicast) org.dvb.net.DatagramSocketBufferControl provides
some extensions to give better control over multicast. For control of the return channel: org.dvb.net.rc
TRADlmtb
User interface: TV displayUser interface: TV display
There are differences between TV and computer displays: picture aspect ratio (4:3, 14:9, 16:9) overscan - assume 5% loss around the edge. pixel aspect ration (non 1:1) - prescale bitmaps or use
java.awt.Graphics.stretchImage() colour space - the AWT surface is sRGB, but the internal display
format may be YUV, with limited colour resolution, or palettized. interlacing - avoid using single pixel lines, avoid high contrast
between adjacent pixels. Pre-filter bitmaps. Graphics possibly not accurately aligned with video. Possibly a limited number of alpha levels
TRADlmtb
User Interface: java.awtUser Interface: java.awt
MHP uses the standard java.awt package Lightweight components JDK 1.1.x event model No "classical" UI widgets - too computery for TV
No requirement for a windowing system Support for overlapping windows not required
TRADlmtb
User Interface: org.dvb.uiUser Interface: org.dvb.ui
DVB Extensions to AWT :- org.dvb.ui.DVBColor provides alpha (i.e. transparency
through graphics to video) org.dvb.ui.DVBGraphics - supports alpha composition. org.dvb.ui.DVBBufferedImage - a writeable buffer of image
data - good for double buffering and effects. org.dvb.ui.DVBTextLayoutManager allows simple display of
formatted text These extensions are similar to parts of Java 2 AWT - you can
prototype on JDK 1.3, but be aware of the differences. Also consider the performance cost of alpha.
TRADlmtb
User Interface : org.havi.uiUser Interface : org.havi.ui
Widget set more graphically oriented than java.awt (e.g. icons, animations)
HLook interface allows pluggable look&feel. HNavigable.setFocusTraversal() allows applications to
describe a focus navigation map (up/down/left/right) Device framework
HScreenDevice & sub-classes allow applications to access a model of the graphics, video & background devices in a system, and request a configuration.
Extra key codes for remote controls org.havi.ui.event.HRcEvent
TRADlmtb
User Interface: Getting the root containerUser Interface: Getting the root container
Your application can get its top level UI container in 2 ways.
javax.tv.graphics.TVContainer.getRootContainer() Returns an invisible {0,0} size container Size & position the container by hand
Methods on org.havi.ui.HSceneFactory Allow applications to be more expressive about what
they really want. Returns an HScene object.
TRADlmtb
User Interface: Configuring the sceneUser Interface: Configuring the scene
Each Xlet has an HScene representing a region of the TV display.
Create from the HSceneFactory using an HSceneTemplate with the desired properties
Application
HSceneFactory
getBestScene(template)
HSceneTemplatecreates
HScenecreates
Similar model used for HScreenDevice
TRADlmtb
User Interface: Drawing your componentsUser Interface: Drawing your components
Several different ways of approaching this in your applications.
Draw everything using java.awt.Graphics primitives Define your own lightweight components extending
java.awt.Component. Can implement org.havi.ui.HNavigable for
extended navigation Use the HAVi widget set
Can define your own appearance if you need. Consider code size and impact on performance.
TRADlmtb
User Interface: User inputUser Interface: User input
There is no mouse input, and only a few key codes. Only one AWT component has input focus at any time
No other components receive input events The org.dvb.event API traps input events before they enter
AWT Allows applications to register an interest in a subset of the
input events - its UserEventRepository it can register exclusive access to these
Consider this early in your design process Test it on TVs & with TV remote controls very early
TRADlmtb
Controlling Media: javax.mediaControlling Media: javax.media
Applications can have basic control of video and audio with the Java Media Framework.
Based on JMF 1.0 Use org.davic.net.dvb.DVBLocator to select what to
show:dvb://<original network ID>.<transport stream ID>.<service id>[.<event ID>]
[;<component tag>]
Applications can obtain running JMF players. Needed for applications running as part of a TV service to
get access to already running A/V. See javax.tv.service.selection.ServiceMediaHandler
TRADlmtb
Controlling Media: javax.tv.mediaControlling Media: javax.tv.media
MHP provides a number of extra JMF controls For video scaling...
javax.tv.media.AWTVideoSizeControl (simple) org.dvb.media.BackgroundVideoPresentationControl
(flexible) Platforms aren't required to support unlimited video scaling
Control and monitoring of subtitles, service components Fine control over audio playback from memory
org.davic.media.MediaTimePositionControl Notification of changes in incoming TV signals
video size, aspect ratio, ...
TRADlmtb
Synchronising with MediaSynchronising with Media
DSMCC stream events org.dvb.dsmcc.DSMCCStreamEvent.subscribe() org.davic.media.StreamEventControl.subscribeStream
Event() Use media time (NPT)
org.davic.media.MediaTimeEventControl Use a private section
org.davic.mpeg.sections Choice really determined by the broadcaster - the data
needs to be injected at the right time in the right format.
TRADlmtb
EPGs: Service InformationEPGs: Service Information
There are some APIs that are only useful for non-service bound applications (e.g. Electronic Program Guides)
i.e. the application is signalled on all services. Access to broadcast service information
DVB-SI API - org.dvb.si Gives access to all the low level detail of DVB-SI for those
who know how to use that. JavaTV SI API - javax.tv.service, javax.tv.service.guide
A high level abstract view Beware: many broadcast networks don't follow the DVB-SI
specification very well or very completely.
TRADlmtb
EPGs: Service SelectionEPGs: Service Selection
Previewing a TV service Get ServiceContentHandler objects to access JMF. Using JMF, an EPG can preview a TV service without
starting any associated applications. Really selecting a TV service (incl. applications)
Get ServiceContext from ServiceContextFactory Use javax.tv.service.selection.ServiceContext.select() This kills locally signalled Xlets. Don’t use unless you
really ‘own’ the service context.
TRADlmtb
Hints: SpeedHints: Speed
Optimising application launch time Consumers are impatient - they won't wait for TV. Get user interaction working quickly. Make use of asynchronous asset loading (e.g. images) Look at the files needed by your application to get the initial
display - fine tune your broadcast so those are loaded together & quickly.
Image decode time is significant - e.g. fullscreen JPEGs Analyse major transitions between different parts of your
application. Think about pre-loading assets you are likely to need
TRADlmtb
Hints: CleanupHints: Cleanup
Check your application cleans up after itself cause any threads you created to exit voluntarily. stop(),deallocate() and close() any JMF players you created. stop() and destroy() any ServiceContext objects you
created. flush any images using the Image.flush() method. have no unnecessary delays in your Xlet.destroyXlet()
method. Doing this is a matter of being considerate to other
applications running in the box.
TRADlmtb
General HintsGeneral Hints
An STB is not a high-end platform don’t expect PC performance
Reliability and robustness are vital people will not tolerate unreliable applications in the consumer
environment unreliable applications make the STB look unreliable
Remember that your application may be paused and resumed at any time
Resources are very scarce, and you may lose them at any time but you may also get them back at any time