API & Config
Create instance
var engine = new P2pEngineRxPlayer(player, {p2pConfig: [opts]});
Create a new P2pEngineRxPlayer instance, player is an instance of video.js .
If opts is provided, it overrides the default options shown below.
| Field | Type | Default | Description |
|---|---|---|---|
| logLevel | string|boolean | 'error' | Print log level(warn, error, none, false=none, true=warn). |
| token | string | undefined | Token is used to summarize and display multi domain name data on the console. In addition, token is required while customizing channelId. |
| trackerZone | string | 'eu' | The country code name of the tracker server address('eu', 'hk', 'us'). |
| memoryCacheLimit | Object | {"pc": 400 * 1024 * 1024, "mobile": 100 * 1024 * 1024} | The max size of binary data that can be stored in the cache. |
| useDiskCache | boolean | true | Use IndexedDB to cache data for VOD streaming. |
| diskCacheLimit | Object | {"pc": 1500 * 1024 * 1024, "mobile": 1000 * 1024 * 1024} | The max size of binary data that can be stored in the disk cache. |
| p2pEnabled | boolean | true | Enable or disable p2p engine. |
| webRTCConfig | Object | {} | A Configuration dictionary providing options to configure WebRTC connections. |
| useHttpRange | boolean | true | Use HTTP ranges requests where it is possible. Allows to continue (and not start over) aborted P2P downloads over HTTP. |
| startFromSegmentOffset | number | 3 | The segment offset that start to connect to tracker server. |
P2pEngineRxPlayer API
P2pEngineRxPlayer.version (static method)
Get the version of P2pEngineRxPlayer.
P2pEngineRxPlayer.protocolVersion (static method)
Returns the P2P protocol version.
P2pEngineRxPlayer.isSupported() (static method)
Returns true if WebRTC data channel is supported by the browser.
engine.enableP2P()
Resumes P2P streaming after it has been stopped.
engine.disableP2P()
Disables the engine to stop P2P streaming and free up resources.
engine.destroy()
Stops P2P streaming and frees up resources.
P2pEngineRxPlayer Events
engine.on('peerId', function (peerId) {})
Emitted when this client's peer ID is received from the server.
engine.on('peers', function (peers) {})
Emitted when successfully connected to a new peer.
engine.on('stats', function (stats) {})
Emitted whenever data is downloaded or uploaded.
stats.totalHTTPDownloaded: total data downloaded via HTTP (KB).
stats.totalP2PDownloaded: total data downloaded via P2P (KB).
stats.totalP2PUploaded: total data uploaded via P2P (KB).
stats.p2pDownloadSpeed: P2P download speed (KB/s).
engine.on('serverConnected', function (connected) {})
Emitted when the WebSocket connection opens or closes.
engine.on('exception', function (e) {})
Emitted when an exception occurs.
e.code: Exception identifier(TRACKER_EXPT SIGNAL_EXPT)
e.message: Exception message.
e.stack: Exception stack trace.
Get P2P Information from p2pConfig
p2pConfig: {
getStats: function (totalP2PDownloaded, totalP2PUploaded, totalHTTPDownloaded, p2pDownloadSpeed) {
// get the downloading statistics
},
getPeerId: function (peerId) {
// get peer Id
},
getPeersInfo: function (peers) {
// get peers information
},
onHttpDownloaded: function (traffic) {
// listen to http downloaded traffic
},
onP2pDownloaded: function (traffic, speed) {
// listen to p2p downloaded traffic
},
onP2pUploaded: function (traffic) {
// listen to p2p uploaded traffic
},
}
Download and upload volumes are measured in KB. The unit of download speed is KB/s.
Advanced Usage
Dynamic MPD Path Support
Some MPD urls play the same live/vod but have different paths on them. For example, example.com/clientId1/streamId.mpd and example.com/clientId2/streamId.mpd. In this case, you can define a common channelId for them.
// Set token in p2pConfig before setting channelId!
p2pConfig: {
token: YOUR_TOKEN,
channelId: function (mpdUrl) {
const videoId = extractVideoIdFromUrl(mpdUrl); // make a channelId by removing the different part which is defined by yourself
return videoId;
},
// channelId: VIDEO_ID // for fixed channel id
}
Dynamic Segment Path Support
Like dynamic mpd path, you should format a common segmentId for the same segment file. You can override the segment ID like this:
p2pConfig: {
/*
streamId: The id of stream
sn: The serial number of segment
segmentUrl: The url of segment
range: bytes range of segmentUrl
*/
segmentId: function (segmentUrl, range) {
const segId = extractSegmentIdFromUrl(segmentUrl);
return segId;
}
}