Since Radiant Media Player 5, we support download, storage and playback for offline content. This feature is provided as an event-driven API that allows developers to build an offline logic on top of the player. Our implementation is based on Shaka player offline capabilities which use IndexedDB for storage. Offline storage and playback support through hls.js or progressive download is not provided.
This feature should help developers building media applications with Radiant Media Player to comply with Google Progressive Web Apps requirements.
While the player should provide a straight-forward approach to adding offline support to your application or site, we recommend developers looking to implement this feature to first familiarise themselves with general offline concepts and limitations. This article, this article and this article should help.
Offline support is only provided for on-demand video streaming. Live and DVR streaming are not supported for offline storage and playback due to their nature.
Supported streaming protocols:
Unsupported:
Untested:
Supported:
Unsupported:
Untested:
shakaOffline: Boolean
Enables or not offline features in Radiant Media Player. Default: false.
shakaOfflinePreferredTrackQuality: Number
Specifies which quality to download for offline storage when multiple choices are available.
Default: -1.
downloadstarted
fires when download of content for offline playback has started, after
download
method has been calleddownloadprogress
fires each time new data is appended to offline storage for a given running downloaddownloadcompleted
fires when download of content for offline playback has completed, after
download
method has been calleddownloadlistavailable
fires when the current download list is available for query, after calling listDownloadedContent
API methoddownloadremoved
fires when the targeted download has been removed from storage, after calling removeDownload
API methodrmp.isOnline();
Returns Boolean
stating if the targeted device is online or offline. This method is based on
window.navigator.onLine API. It should be thus noted that a true
result may not necessary mean that the viewer has a public access to the Internet
as she/he may just be in an Intranet or proxied environment. On the other hand a false
result always mean the user has no public Internet connection.
rmp.hasDownloadSupport();
Returns Boolean
stating if the targeted device can download, store and play offline content.
rmp.listDownloadedContent();
Request the player to query the current list of downloaded content. This method is asynchronous and will provide result through the getDownloadedList
API method when the downloadlistavailable
event fires.
rmp.getDownloadedList();
This method must be queried when the downloadlistavailable
event fires. It will provide an Array representing the list of currently stored media item by the player (an empty Array is returned if no item is currently stored). Each
item of the Array will have its information stored as an Object
with the following structure:
{ appMetadata: Object duration: Number expiration: Number offlineUri: String originalManifestUri: String size: Number }
rmp.download();
Request the player to start downloading content for offline storage. This
downloadcompleted
event will fire when download has finished, while the downloadstarted
and downloadprogress
events will give you status information about the download.
rmp.getDownloadProgress();
This method must be queried when downloadprogress
event fire and will return a
Number
between 0 and 1 representing the progress for the current download. Returns -1
if this value is not available.
rmp.loadDownload(content);
When a downloaded item has been listed with the getDownloadedList
API method, this item can be passed to the loadDownload
API method to start playing this item. When playback starts for a stored item the player will fire
a playing
. If the player was not able to load and player the stored item a warning
event will fire.
rmp.removeDownload(content);
When a downloaded item has been listed with the getDownloadedList
API method, this item can be passed to the removeDownload
API method to be removed from storage. When a item has been removed from storage, the downloadremoved
event will fire.
The player will fire the following warning
event through the offline API. See the
error management docs for more information.
3001
: storage has not been initialized (
shakaOffline
setting is set to false or stream is not on-demand)3002
: could not download offline content3003
: could not list offline downloaded content3004
: could not remove offline downloaded content3005
: could not load offline content - invalid input3006
: could not query temporary storage usage and availability3007
: offline storage is not supported in this environmentTo help you get started we have released a full usage example with source code here.