Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 8 Current »

Introduction

This documents list the design approach which we are taking to rewrite the content player such that

For users: Faster load times, great user experience and leaves less memory footprint on the browser.

For Developers: parallel development, decoupled and can be concentrated on a specific player

For Product owners: Easy to experiment with new functionalities and UI

Design

Here we want to build one player(Library) for each type of content which is independently built and deployable and can be integrated with other clients like web, mobile, and desktop

List of Libraries

Players :

Each player is a library that can be injected in any application or can be independent and expects certain input to initialize will emit actions/interactions during the course of playing content.

  • PDF       

  • Video     

  • EPUB      

  • H5P       

  • QuML    

  • HTML

  • Collection Player(combination of all the players)

config:

{

  controls: {
    showStartPage: <boolean>,
    showEndPage: <boolean>,
    showNavigation: <boolean>
    Menu: <boolean>
  }
}

Each Player type will have there own standard config below is the config for PDF player

{
 path: <String>,
 controls: {
    showStartPage: <boolean>,
    showEndPage: <boolean>,
    showNavigation: <boolean>
    Menu: <boolean>
  }
}

Collection Player:

This is the collection of all the players which will take the input as standard collection object handles the to render the TOC view and player view will be extension point where based on the content type we will have the mapping to the player.

Controls :

Each player interactions ie. StartPage, Endpage, Menu, Navigation, etc is also a library that will get injected based on the input config to the player.
Here we will have the extension points which player should define to

Events (TBD)

START

{
  "eid": <uuid>,
  "ets": <timestamp>,
  "ver": <event-version>,
  "type": "START",
  "data": "<object>" (TBD)
}

END

{
  "eid": <uuid>,
  "ets": <timestamp>,
  "ver": <event-version>,
  "type": "END",
  "data": "<object>" (TBD)
}

EVENT

{
"eid": <uuid>,
"ets": <timestamp>,
"ver": <event-version>,
"type": <event-type> // play, pause, scroll, touch, heartbeat
"data" : <object>
}

Event library emits the above events and container should convert them to telemetry events when in standalone mode?

Distribution and composability

The primary distribution will be npm as the angular library

{

Player :

dependencies {

Events Library

Controls Library

}

}

Open Questions

  1. are we going to emit existing telemetry events for backward compatibility when integrated with the container?

  • No labels