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 which will get injected based on the input to player.. [TBD]
Events (TBD)
START
{ "type": "START", "metaData": "<object>" // will change based on player }
END
{ "type": "END", "metaData": "<object>" // will change based on player }
EVENT
{ "eid": <uuid>, "ets": <timestamp>, "ver": <event-version>, "type": <event-type> // play, pause, scroll, touch, heartbeat "data" : <object> }
Distribution and composability
The primary distribution will be npm as the angular library
{
Player :
static dependencies {
Events Library
Controls Library
}
}
Open Questions
are we going to emit existing telemetry events for backward compatibility when integrated with the container?