26
TRAD lmtb Developing DVB-Java Applications Developing DVB-Java Applications Richard Houldsworth Philips Research [email protected]

TRAD lmtb Developing DVB-Java Applications Richard Houldsworth Philips Research [email protected]

Embed Size (px)

Citation preview

Page 1: TRAD lmtb Developing DVB-Java Applications Richard Houldsworth Philips Research richard.houldsworth@philips.com

TRADlmtb

Developing DVB-Java ApplicationsDeveloping DVB-Java Applications

Richard Houldsworth

Philips Research

[email protected]

Page 2: TRAD lmtb Developing DVB-Java Applications Richard Houldsworth Philips Research richard.houldsworth@philips.com

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.

Page 3: TRAD lmtb Developing DVB-Java Applications Richard Houldsworth Philips Research richard.houldsworth@philips.com

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

Page 4: TRAD lmtb Developing DVB-Java Applications Richard Houldsworth Philips Research richard.houldsworth@philips.com

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

Page 5: TRAD lmtb Developing DVB-Java Applications Richard Houldsworth Philips Research richard.houldsworth@philips.com

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.

Page 6: TRAD lmtb Developing DVB-Java Applications Richard Houldsworth Philips Research richard.houldsworth@philips.com

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

Page 7: TRAD lmtb Developing DVB-Java Applications Richard Houldsworth Philips Research richard.houldsworth@philips.com

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!

Page 8: TRAD lmtb Developing DVB-Java Applications Richard Houldsworth Philips Research richard.houldsworth@philips.com

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)

Page 9: TRAD lmtb Developing DVB-Java Applications Richard Houldsworth Philips Research richard.houldsworth@philips.com

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.

Page 10: TRAD lmtb Developing DVB-Java Applications Richard Houldsworth Philips Research richard.houldsworth@philips.com

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

Page 11: TRAD lmtb Developing DVB-Java Applications Richard Houldsworth Philips Research richard.houldsworth@philips.com

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

Page 12: TRAD lmtb Developing DVB-Java Applications Richard Houldsworth Philips Research richard.houldsworth@philips.com

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

Page 13: TRAD lmtb Developing DVB-Java Applications Richard Houldsworth Philips Research richard.houldsworth@philips.com

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.

Page 14: TRAD lmtb Developing DVB-Java Applications Richard Houldsworth Philips Research richard.houldsworth@philips.com

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

Page 15: TRAD lmtb Developing DVB-Java Applications Richard Houldsworth Philips Research richard.houldsworth@philips.com

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.

Page 16: TRAD lmtb Developing DVB-Java Applications Richard Houldsworth Philips Research richard.houldsworth@philips.com

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

Page 17: TRAD lmtb Developing DVB-Java Applications Richard Houldsworth Philips Research richard.houldsworth@philips.com

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.

Page 18: TRAD lmtb Developing DVB-Java Applications Richard Houldsworth Philips Research richard.houldsworth@philips.com

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

Page 19: TRAD lmtb Developing DVB-Java Applications Richard Houldsworth Philips Research richard.houldsworth@philips.com

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

Page 20: TRAD lmtb Developing DVB-Java Applications Richard Houldsworth Philips Research richard.houldsworth@philips.com

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, ...

Page 21: TRAD lmtb Developing DVB-Java Applications Richard Houldsworth Philips Research richard.houldsworth@philips.com

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.

Page 22: TRAD lmtb Developing DVB-Java Applications Richard Houldsworth Philips Research richard.houldsworth@philips.com

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.

Page 23: TRAD lmtb Developing DVB-Java Applications Richard Houldsworth Philips Research richard.houldsworth@philips.com

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.

Page 24: TRAD lmtb Developing DVB-Java Applications Richard Houldsworth Philips Research richard.houldsworth@philips.com

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

Page 25: TRAD lmtb Developing DVB-Java Applications Richard Houldsworth Philips Research richard.houldsworth@philips.com

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.

Page 26: TRAD lmtb Developing DVB-Java Applications Richard Houldsworth Philips Research richard.houldsworth@philips.com

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