Use is subject to License Terms. Your use of this web site or any of its content or software indicates your agreement to be bound by these License Terms.
Copyright © 2006 Sun Microsystems, Inc. All rights reserved.
javax.media
Class Manager
java.lang.Object
javax.media.Manager
- public final class Manager
- extends java.lang.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:
- Obtain the connected
DataSource
for the specified
protocol
- Obtain the
Player
for the content-type
specified by the DataSource
- Attach the
DataSource
to the Player
using the setSource
method.
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
.
- See Also:
URL
,
MediaLocator
,
PackageManager
,
DataSource
,
URLDataSource
,
MediaHandler
,
Player
,
MediaProxy
,
TimeBase
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
UNKNOWN_CONTENT_NAME
public static final java.lang.String UNKNOWN_CONTENT_NAME
- See Also:
- Constant Field Values
createPlayer
public static Player createPlayer(java.net.URL sourceURL)
throws java.io.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.
java.io.IOException
- Thrown if there was a problem connecting
with the source.
createPlayer
public static Player createPlayer(MediaLocator sourceLocator)
throws java.io.IOException,
NoPlayerException
- Create a
Player
for the specified media.
The algorithm for creating a Player
from
a MediaLocator
is:
- Get the protocol from the
MediaLocator
.
- Get a list of
DataSource
classes that
support the protocol, using the protocol package-prefix-list.
- For each source class in the list:
- Instantiate a new
DataSource
,
- Call the
connect
method to connect the source.
- Get the media content-type-name (using
getContentType
)
from the source.
- Get a list of
MediaHandler
classes that support the
media-content-type-name, using the content package-prefix-list.
- For each
MediaHandler
class in the list:
- Instantiate a new
MediaHandler
.
- Attach the source to the
MediaHandler
by calling
MediaHandler.setSource
.
- If there are no failures, determine the type of
the
MediaHandler
; otherwise try the next
MediaHandler in the list.
- If the
MediaHandler
is a Player
,
return the new Player
.
- 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.
- If no
MediaHandler
is found for this source,
try the next source in the list.
- If no
Player
is found after trying all of the sources,
reuse the source list.
This time, for each source class in the list:
- Instantiate the source.
- Call the
connect
method to connect to the source.
- Use the content package-prefix-list to create a list of
MediaHandler
classes that support the
"unknown" content-type-name.
- For each
MediaHandler
class in the list,
search for a Player
as in the previous search.
- 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.
java.io.IOException
- Thrown if there was a problem connecting
with the source.
createPlayer
public static Player createPlayer(DataSource source)
throws java.io.IOException,
NoPlayerException
- Create a
Player
for the DataSource
.
The algorithm for creating a Player
from
a DataSource
is:
- Get the media content-type-name from the source by
calling
getContentType
.
- Use the content package-prefix-list to get a list of
Player
classes that support the media content-type name.
- For each
Player
class in the list:
- Instantiate a new
Player
.
- Attach the source to the
Player
by calling
setSource
on the Player
.
- If there are no failures, return the new
Player
;
otherwise,
try the next Player
in the list.
- If no
Player
is found for this source:
- Use the content package-prefix-list to create a list
of
Player
classes that support the
"unknown" content-type-name.
- For each
Player
class in the list:
- Instantiate a new
Player
.
- Attach the source to the
Player
by
calling setSource
on the Player
.
- If there are no failures, return the new
Player
;
otherwise, try the next Player
in the list.
- If no
Player
can be created,
a NoPlayerException
is thrown.
- Returns:
- A new
Player
.
- Throws:
NoPlayerException
- Thrown if a Player
can't
be created.
java.io.IOException
- Thrown if there was a problem connecting
with the source.
createDataSource
public static DataSource createDataSource(java.net.URL sourceURL)
throws java.io.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.
java.io.IOException
- Thrown if there was a problem connecting
with the source.
createDataSource
public static DataSource createDataSource(MediaLocator sourceLocator)
throws java.io.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:
- Get the protocol from the
MediaLocator
.
- Use the protocol package-prefix list to get a list of
DataSource
classes that
support the protocol.
- For each source class in the list:
- Instantiate a new
DataSource
.
- Call
connect
to connect the source.
- If there are no errors, return the connected
source; otherwise, try the next source in the list.
- If no source has been found, obtain a
URL
from the
MediaLocator
and use it to create
a URLDataSource
- 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.
java.io.IOException
- Thrown if there was a problem connecting
with the source.
getSystemTimeBase
public static TimeBase getSystemTimeBase()
- Get the time-base object for the system.
- Returns:
- The system time base.
getDataSourceList
public static java.util.Vector getDataSourceList(java.lang.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.
- Returns:
- A vector of strings, where each string is
a
Player
class-name.
getHandlerClassList
public static java.util.Vector getHandlerClassList(java.lang.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.
Copyright © 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to License Terms. Your use of this web site or any of its content or software indicates your agreement to be bound by these License Terms.
For more information, please consult the JSR 927 specification.