All Packages  Class Hierarchy  This Package  Previous  Next  Index

Class javax.media.Manager

java.lang.Object
   |
   +----javax.media.Manager

public final class Manager
extends Object
Manager is the access point for obtaining system dependent resources such as Players, DataSources, and the system TimeBase.

A Player is an object used to control and render multimedia data that is specific to the content type of the data. A DataSource is an object used to deliver time-based multimedia data that is specific to a delivery protocol. A DataSource provides a Player with media data; a Player must have a DataSource. Manager provides access to a protocol and media independent mechanism for constructing Players and DataSources.

Creating Players and DataSources

Manager will createPlayers from a URL, a MediaLocator or a DataSource. Creating a Player requires the following:

Finding DataSources by Protocol

A MediaLocator defines a protocol for obtaining content. DataSources are identified by the protocol that they support. Manager uses the protocol name to find DataSource classes.

To find a DataSource using a MediaLocator, Manager constructs a list of class names from the protocol package-prefix list and the protocol name obtained from the MediaLocator. For each class name in the constructed list a new DataSource is instanced, the MediaLocator is attached, and the DataSource is connected. If no errors have occurred, the procces is considered finished and the connected DataSource is used by Manager in any following operations. If there was an error then the next class name in the list is tried. The exact details of the search algorithm is described in the method documentation below.

Finding Players by Content Type

A Player is a MediaHandler. A MediaHandler is a an object that reads data from a DataSource. There are two types of supported MediaHandler: MediaProxy, and Player.

MediaHandlers are identified by the content type that they support. A DataSource identifies the content type of the data it produces with the getContentType method. Manager uses the content type name to find instances of MediaHandler.

To find a MediaHandler using a content type name, Manager constructs a list of class names from the content package-prefix list and the content type name. For each class name in the constructed list a new MediaHandler is instanced, and the DataSource is attached to the MediaHandler using MediaHandler.setSource.

If the MediaHandler is a Player and the setSource was successful the process is finished and the Player is returned. If the setSource failed, another name in the list is tried.

If the MediaHandler is a MediaProxy then a new DataSource is obtained from the MediaProxy, a new list is created for the content type the DataSource supports and the whole thing is tried again.

If a valid Player, is not found then the whole procedure is repeated is repeated with "unknown" substituted for the content-type name. The "unknown" content type is supported by generic Players that are capable of handling a large variety of media types, often in a platform dependent way.

The detailed creation algorithm is specified in the methods below.

Player Threads

Players render media data asynchronously from the main program flow. This implies that a Player must often manage one or more threads. The threads managed by the Player are not in the thread group of the application that calls createPlayer.

System Time Base

All Players need a TimeBase. Many use a system-wide TimeBase, often based on a time-of-day clock. Manager provides access to the system TimeBase through getSystemTimeBase.

Version:
1.57, 97/08/28.
See Also:
URL, MediaLocator, PackageManager, DataSource, URLDataSource, MediaHandler, Player, MediaProxy, TimeBase

Variable Index

 o UNKNOWN_CONTENT_NAME

Method Index

 o createDataSource(MediaLocator)
Create a DataSource for the specified media.
 o createDataSource(URL)
Create a DataSource for the specified media.
 o createPlayer(DataSource)
Create a Player for the DataSource.
 o createPlayer(MediaLocator)
Create a Player for the specified media.
 o createPlayer(URL)
Create a Player for the specified media.
 o getDataSourceList(String)
Build a list of DataSource class names from the protocol prefix-list and a protocol name.
 o getHandlerClassList(String)
Build a list of Handler/CODE> classes from the content-prefix-list and a content name.
 o getSystemTimeBase()
Get the time-base object for the system.

Variables

 o UNKNOWN_CONTENT_NAME
 public static final String UNKNOWN_CONTENT_NAME

Methods

 o createPlayer
 public static Player createPlayer(URL sourceURL) throws IOException, NoPlayerException
Create a Player for the specified media. This creates a MediaLocator from the URL and then calls createPlayer.

Parameters:
sourceURL - The URL that describes the media data.
Returns:
A new Player.
Throws: NoPlayerException
Thrown if no Player can be found.
Throws: IOException
Thrown if there was a problem connecting with the source.
 o createPlayer
 public static Player createPlayer(MediaLocator sourceLocator) throws IOException, NoPlayerException
Create a Player for the specified media.

The algorithm for creating a Player from a MediaLocator is:

  1. Get the protocol from the MediaLocator.
  2. Get a list of DataSource classes that support the protocol, using the protocol package-prefix-list.
  3. For each source class in the list:
    1. Instantiate a new DataSource,
    2. Call the connect method to connect the source.
    3. Get the media content-type-name (using getContentType) from the source.
    4. Get a list of MediaHandler classes that support the media-content-type-name, using the content package-prefix-list.
    5. For each MediaHandler class in the list:
      1. Instantiate a new MediaHandler.
      2. Attach the source to the MediaHandler by calling MediaHandler.setSource.
      3. If there are no failures, determine the type of the MediaHandler; otherwise try the next MediaHandler in the list.
      4. If the MediaHandler is a Player, return the new Player.
      5. If the MediaHandler is a MediaProxy, obtain a new DataSource from the MediaProxy, obtain the list of MediaHandlers that support the new DataSource, and continue searching the new list.
    6. If no MediaHandler is found for this source, try the next source in the list.
  4. If no Player is found after trying all of the sources, reuse the source list.
    This time, for each source class in the list:
    1. Instantiate the source.
    2. Call the connect method to connect to the source.
    3. Use the content package-prefix-list to create a list of MediaHandler classes that support the "unknown" content-type-name.
    4. For each MediaHandler class in the list, search for a Player as in the previous search.
      1. If no Player is found after trying all of the sources, a NoPlayerException is thrown.

    Parameters:
    sourceLocator - A MediaLocator that describes the media content.
    Returns:
    A Player for the media described by the source.
    Throws: NoPlayerException
    Thrown if no Player can be found.
    Throws: IOException
    Thrown if there was a problem connecting with the source.
 o createPlayer
 public static Player createPlayer(DataSource source) throws IOException, NoPlayerException
Create a Player for the DataSource.

The algorithm for creating a Player from a DataSource is:

  1. Get the media content-type-name from the source by calling getContentType.
  2. Use the content package-prefix-list to get a list of Player classes that support the media content-type name.
  3. For each Player class in the list:
    1. Instantiate a new Player.
    2. Attach the source to the Player by calling setSource on the Player.
    3. If there are no failures, return the new Player; otherwise, try the next Player in the list.
  4. If no Player is found for this source:
    1. Use the content package-prefix-list to create a list of Player classes that support the "unknown" content-type-name.
    2. For each Player class in the list:
      1. Instantiate a new Player.
      2. Attach the source to the Player by calling setSource on the Player.
      3. If there are no failures, return the new Player; otherwise, try the next Player in the list.
  5. If no Player can be created, a NoPlayerException is thrown.

Parameters:
DataSource - The DataSource that describes the media content.
Returns:
A new Player.
Throws: NoPlayerException
Thrown if a Player can't be created.
Throws: IOException
Thrown if there was a problem connecting with the source.
 o createDataSource
 public static DataSource createDataSource(URL sourceURL) throws IOException, NoDataSourceException
Create a DataSource for the specified media.

Parameters:
sourceURL - The URL that describes the media data.
Returns:
A new DataSource for the media.
Throws: NoDataSourceException
Thrown if no DataSource can be found.
Throws: IOException
Thrown if there was a problem connecting with the source.
 o createDataSource
 public static DataSource createDataSource(MediaLocator sourceLocator) throws IOException, NoDataSourceException
Create a DataSource for the specified media.

Returns a data source for the protocol specified by the MediaLocator. The returned data source is connected; DataSource.connect has been invoked.

The algorithm for creating a DataSource from a MediaLocator is:

  1. Get the protocol from the MediaLocator.
  2. Use the protocol package-prefix list to get a list of DataSource classes that support the protocol.
  3. For each source class in the list:
    1. Instantiate a new DataSource.
    2. Call connect to connect the source.
    3. If there are no errors, return the connected source; otherwise, try the next source in the list.
  4. If no source has been found, obtain a URL from the MediaLocator and use it to create a URLDataSource
  5. If no source can be found, a NoDataSourceException is thrown.

Parameters:
sourceLocator - The source protocol for the media data.
Returns:
A connected DataSource.
Throws: NoDataSourceException
Thrown if no DataSource can be found.
Throws: IOException
Thrown if there was a problem connecting with the source.
 o getSystemTimeBase
 public static TimeBase getSystemTimeBase()
Get the time-base object for the system.

Returns:
The system time base.
 o getDataSourceList
 public static Vector getDataSourceList(String protocolName)
Build a list of DataSource class names from the protocol prefix-list and a protocol name.

The first name in the list will always be:

 media.protocol.<protocol>DataSource
 

Each additional name looks like:

 <protocol-prefix>.media.protocol.<protocol>.DataSource
 
for every <protocol-prefix> in the protocol-prefix-list.

Parameters:
protocol - The name of the protocol the source must support.
Returns:
A vector of strings, where each string is a Player class-name.
 o getHandlerClassList
 public static Vector getHandlerClassList(String contentName)
Build a list of Handler/CODE> classes from the content-prefix-list and a content name.

The first name in the list will always be:

 media.content.<contentType>.Handler
 

Each additional name looks like:

 <content-prefix>.media.content.<contentName>.Player
 
for every <content-prefix> in the content-prefix-list.

Parameters:
contentName - The content type to use in the class name.
Returns:
A vector of strings where each one is a Player class-name.

All Packages  Class Hierarchy  This Package  Previous  Next  Index