1 / 26

Developing DVB-Java Applications

Developing DVB-Java Applications. Richard Houldsworth Philips Research richard.houldsworth@philips.com. Overview. This presentation is an introduction to programming for DVB-Java. How to get started. Technical details of key DVB-J concepts

rianna
Download Presentation

Developing DVB-Java Applications

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Overview • 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.

  3. Infrastructure 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

  4. Application 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

  5. Entry 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.

  6. Context Hierarchy Service Context 1 Service Context 2 Java Media Player Xlet Context Xlet Context Xlet Context Xlet A Xlet B Xlet C Application Manager

  7. Application 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!

  8. Broadcast 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)

  9. Broadcast 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.

  10. Other 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

  11. User 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

  12. User 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

  13. User 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.

  14. User 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

  15. User 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.

  16. creates HSceneTemplate getBestScene(template) creates HScene User 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 • Similar model used for HScreenDevice

  17. User 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.

  18. User 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

  19. Controlling 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

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

  21. Synchronising with Media • DSMCC stream events • org.dvb.dsmcc.DSMCCStreamEvent.subscribe() • org.davic.media.StreamEventControl.subscribeStreamEvent() • 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.

  22. EPGs: 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.

  23. EPGs: 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.

  24. Hints: 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

  25. Hints: 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.

  26. General 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

More Related