org.dvb.spi.selection.package.html Maven / Gradle / Ivy
This package defines an SPI for selection of services and service
components.
The providers defined in this package allow the presentation of
services whose location is not announced using standard signalling.
One a SelectionProvider has been installed, the standard MHP APIs,
such as the JavaTV service selection API, can be used to present
those services.
Examples of API usage
Switched Digital
The following table shows the sequence of API calls involved in
a service selection operation, both API calls between an application
and the implementation and between the implementation and a
SelectionProvider.
The table covers both the case when the service location is
known and when the location is unknown. The first column indicates
if the step applies when the service location is unknown. The second
column indicates whether the step applies when the service location
is known. Most steps either apply in both cases at the same point in
the sequence or only apply when the service location is unknown.
Two steps apply in both cases but at different points in the sequence.
Unknown Service Location
Known Service Location
Step
API call by application
API call to/from provider
Y
Y
Provider is installed
{@link org.dvb.spi.ProviderRegistry#registerSystemBound ProviderRegistry.registerSystemBound}
{@link org.dvb.spi.Provider#providerRegistered Provider.providerRegistered}
Y
Y
Provider is initialised
None
{@link org.dvb.spi.selection.SelectionProvider#init SelectionProvider.init}
Y
Y
Implementation asks provider for supported services
None
{@link org.dvb.spi.selection.SelectionProvider#getServiceList}
Y
Y
Each supported service is merged into the service list of the receiver
None
Methods on each ServiceReference returned from {@link org.dvb.spi.selection.SelectionProvider#getServiceList}
N
Y
Extract tuning information for service
None
For MHP, {@link org.dvb.locator.FrequencyLocator#getDeliverySystemDescriptor}
Some time later
Y
Y
Application obtains service object corresponding to locator of service
SIManager.getService(LocatorFactory.createLocator( "dvb://'movie-channel-1.broadcaster-b.com'")
None
Y
Y
Application asks for service to be presented
ServiceContext.select(Service)
None
Y
N
Create session for the presentation of the requested service.
None
1) new ServiceReference(..)2)
{@link org.dvb.spi.selection.SelectionProvider#newSession SelectionProvider.newSession}
Y
N
Implementation asks provider to present channel.
None
{@link org.dvb.spi.selection.SelectionSession#select SelectionSession.select}
Y
N
Provider asks head-end for channel
None
Existing java.net APIs
Y
N
Head-end returns reference to channel location
None
Existing java.net APIs
Y
N
Provider passes on reference to channel location to implementation
None
1a) For MHP, new FrequencyLocator(...)
1b) For OCAP, new OCAPLocator(int frequency, int programNumber,int modulationFormat, ...)
2) Return from call to {@link org.dvb.spi.selection.SelectionSession#select}
Y
N
Extract tuning information for service
None
For MHP, {@link org.dvb.locator.FrequencyLocator#getDeliverySystemDescriptor}
Y
Y
Implementation tunes to appropriate frequency etc
None
None
N
Y
Create session for the presentation of the requested service.
None
1) new ServiceReference(..)
2) {@link org.dvb.spi.selection.SelectionProvider#newSession SelectionProvider.newSession}
Y
N
Inform provider that implementation is ready to receive content
None
{@link org.dvb.spi.selection.SelectionSession#selectionReady SelectionSession.selectionReady}
Y
N
Provider tells server to send content
Provider sends message to switched digital server
Existing java.net APIs
Y
Y
Content arrives
1) new NormalContentEvent2) ServiceContextListener.receiveServiceContextEvent(..)
None
Some time later
Y
Y
Content stops being presented (change to new channel, ...)
Either none or ServiceContext.select() with a different service.
{@link org.dvb.spi.selection.SelectionSession#destroy SelectionSession.destroy}
Y
Y
Content may stop being delivered
Provider may tell head-end that this content is no longer needed if the head-end is counting the
number of users of the content
Existing java.net APIs