Native Player  1.0
StreamManager Class Reference

#include <stream_manager.h>

Inheritance diagram for StreamManager:

Public Member Functions

 StreamManager (pp::InstanceHandle instance, StreamType type)
 
 ~StreamManager ()
 
bool Initialize (std::unique_ptr< MediaSegmentSequence > segment_sequence, std::shared_ptr< Samsung::NaClPlayer::ESDataSource > es_data_source, std::function< void(StreamType)> stream_configured_callback, Samsung::NaClPlayer::DRMType drm_type=Samsung::NaClPlayer::DRMType_Unknown)
 
void SetMediaSegmentSequence (std::unique_ptr< MediaSegmentSequence > segment_sequence)
 
Samsung::NaClPlayer::TimeTicks UpdateBuffer (Samsung::NaClPlayer::TimeTicks playback_time)
 
bool IsInitialized ()
 

Detailed Description

This class manages a single NaCl Player elementary stream.

StreamManager responsibility is to manage a single NaCl Player elementary stream (i.e. either an audio or a video stream, each stream managed by a separate StreamManager instance). The elementary stream is represented by a MediaSegmentSequence object associated with an instance of this class. Media segments are acquired by the StreamManager object during playback and then demuxed into a series of ElementaryStreamPacket objects which are delivered to NaCl Player. Demuxing is done by using StreamDemuxer.

This class implements the ElementaryStreamListener interface, which allows to receive notifications regarding an internal NaCl Player elementary stream packet buffer's state. This information is used to control a speed at which elementary stream packets are sent to NaCl Player.

It is StreamManager responsibility to configure an elementary stream it manages. When the StreamDemuxer object discovers a configuration of the associated MediaSegmentSequence, this class properly configures NaCl Player using the discovered configuration.

At any given time, an initialized StreamManager manages only one particular representation of the stream, which is associated with the used MediaSegmentSequence object. However, the representation (media segment sequence) can be changed.

See also
class MediaSegmentSequence
class StreamDemuxer
class Samsung::NaClPlayer::ElementaryStreamListener

Definition at line 79 of file stream_manager.h.

Constructor & Destructor Documentation

StreamManager::StreamManager ( pp::InstanceHandle  instance,
StreamType  type 
)
explicit

Creates a StreamManager object and opens a stream of a given type in a give player. Newly created object must be initialized using the Initialize() method before use.

Note
Please note at most one StreamManager object per stream type should exist for any given player at any given time.
Parameters
[in]instanceAn InstanceHandle identifying a Native Player object.
[in]typeA stream type for which the StreamManager object is constructed.
StreamManager::~StreamManager ( )

Destroys a StreamManager object and closes a stream it manages.

Member Function Documentation

bool StreamManager::Initialize ( std::unique_ptr< MediaSegmentSequence segment_sequence,
std::shared_ptr< Samsung::NaClPlayer::ESDataSource >  es_data_source,
std::function< void(StreamType)>  stream_configured_callback,
Samsung::NaClPlayer::DRMType  drm_type = Samsung::NaClPlayer::DRMType_Unknown 
)

Initializes a StreamManager object, associating it with a segment_sequence and enabling it to deliver elementary stream packets from that sequence to NaCl Player.

This method must be called before a given es_data_source is attached to NaCl Player (i.e. before media stream configuration is completed and thus before EsDashPlayerController::OnStreamConfigured() for the managed stream is called).

Parameters
[in]segment_sequenceA source of elementary stream packets to be used in this stream.
[in]es_data_sourceNaCl Player data source which will consume elementary stream packets.
[in]stream_configured_callbackA callback which will be called whenever a new stream configuration is discovered and successfully applied to NaCl Player.
[in]drm_typeA DRM scheme used by the managed stream. If no DRM is in use, use Samsung::NaClPlayer::DRMType_Unknown.
Returns
true if an initialization was successfull, or false otherwise.
bool StreamManager::IsInitialized ( )

Checks if this StreamManager was initialized, i.e. Initialize() was successfully called on this object before and thus internal demuxer is properly initialized.

Returns
A true value if this StreamManager is in a proper and useable state, or a false otherwise.
void StreamManager::SetMediaSegmentSequence ( std::unique_ptr< MediaSegmentSequence segment_sequence)

Changes a MediaSegmentSequence object associated with this stream. This method resets internal demuxer to parse a given new media segment, usually causing a change in a stream configuration.

This method allows to change a representation of this media stream by providing a MediaSegmentSequence of the new representation.

Parameters
[in]segment_sequenceA new source of elementary stream packets to be used in this stream.
Samsung::NaClPlayer::TimeTicks StreamManager::UpdateBuffer ( Samsung::NaClPlayer::TimeTicks  playback_time)

Checks if there is enough data buffered for this stream and initiates data download and parsing if there is not enough buffered elementary stream packets. Additionally, this method sends elementary stream packets to NaCl Player for a playback.

UpdateBuffer() should be called periodically to keep playback going.

Parameters
[in]playback_timeA current playback time.
Returns
A PTS (presentation timestamp) value of the last buffered packet.

The documentation for this class was generated from the following file: