Source/Playback API

At the moment the Source API is quite limited, but it is constantly extended to cover everything a player will need. The base of every source api includes the following

interface SourceApiBase {
  logLevel: LogLevel; // getter/setter for log level
  loadControl: LoadControl; // getter/setter for LoadControl
  readonly id: string; // generated id
  readonly events: EventBus<EmptyObject>; // event bus of the source
}

This is additionally extended with certain packages explained bellow.

We are also able to subscribe to all of the source related events using event bus under events namespace. You can checkout all of the events available through SourceAPI in API documentation.

LoadControl api

We are able to define what we want our player to load by setting a load control. This can be used through the API, or passed in to source options once adding a source.

// ...
enum LoadControl {
  Nothing = 0,
  Metadata = 1,
  Data = 2,
}

const sourceApi = player.sources.add(sourceConfig);
// Change loadControl from Data to Nothing
sourceApi.loadControl = LoadControl.Nothing;

By default, the source load control is set to Data (loads both manifests and segments), but we can change this to metadata only (loads only manifests) or nothing to prevent it from loading any data.

PlaybackApi

Additionally, other packages will extend this SourceApi, for eg. one of the default packages PlaybackApiPackage will add play and pause methods. As we are working more on the player, this will be extended to contain additional playback methods.

const sourceApi = player.sources.add(sourceConfig);
// We are able to access this source api directly
// or accessing it through player.sources.list()
sourceApi.play();
sourceApi.pause();

This package also exposes additional events on sourceApi.events (EventBus).

enum PlaybackEvent {
  Ready = 'ready',
  Play = 'play',
  Playing = 'playing',
  Paused = 'paused',
  Seeking = 'seeking',
  Seeked = 'seeked',
  Ended = 'ended',
  TimeChanged = 'time-changed',
  StallStarted = 'stall-started',
  StallEnded = 'stall-ended',
  VideoDetached = 'video-detached',
  VideoAttached = 'video-attached',
}

Some of these are still just mapped from videoElement events and will be moved towards triggering through internal state transitions.

ViewMode api

Some other packages that will extend the SourceApi are for eg the ViewModePackage, which gives us API to control view mode of the source.

enum ViewMode {
  Inline = 0,
  Fullscreen = 1,
  PictureInPicture = 2,
}

const sourceApi = player.sources.add(sourceConfig);
if (sourceApi.isAvailable(ViewMode.Fullscreen)) {
  sourceApi.viewMode.transitionTo(ViewMode.Fullscreen);
}

console.info(sourceApi.viewMode.currentMode);