SwarmCloud

vuePress-theme-reco SwarmCloud    2018 - 2022
P2P Streaming Engine P2P Streaming Engine

Choose mode

  • dark
  • auto
  • light
Documents
  • Introduction
  • Web SDK

    • HLS
    • dash.js
    • Shaka-Player
    • MP4
    • Downloader
  • Android/AndroidTV SDK

    • v2 (Java)
    • v3 (Kotlin, beta)
  • iOS/tvOS/macOS SDK
Pricing
Contact Us
Partnership
Ecosystem
Globe
Dashboard
GitHub (opens new window)
語言
  • English
  • 中文

Documents
  • Introduction
  • Web SDK

    • HLS
    • dash.js
    • Shaka-Player
    • MP4
    • Downloader
  • Android/AndroidTV SDK

    • v2 (Java)
    • v3 (Kotlin, beta)
  • iOS/tvOS/macOS SDK
Pricing
Contact Us
Partnership
Ecosystem
Globe
Dashboard
GitHub (opens new window)
語言
  • English
  • 中文
  • Introduction
  • FAQ
  • Tracking Service
  • Signaling Service
  • P2P Optimization
  • Console

  • HLS Double Engine

  • Android SDK v2

  • Android SDK v3

  • iOS/tvOS/macOS SDK

  • Flutter SDK

  • Hls.js SDK

  • HLS via ServiceWorker

  • Shaka-Player SDK

  • Web MP4 SDK

  • Dash.js SDK

    • Introduction
    • Usage
    • Player Integration
    • API & Config
      • Create instance
      • P2PEngineDash API
      • P2PEngineDash Events
      • Advanced Usage
    • Change Log
  • Web Downloader

  • More

API & Config

vuePress-theme-reco SwarmCloud    2018 - 2022

API & Config


SwarmCloud

# Create instance

# var engine = new P2PEngineDash(player, {p2pConfig: [opts]});

Create a new P2PEngineDash instance, player is an instance of dashjs#MediaPlayer .

If opts is specified, then the default options (shown below) will be overridden.

Field Type Default Description
logLevel string|boolean 'error' Print log level(warn, error, none,false=none, true=warn).
token string undefined tokenis used to summarize and display multi domain name data on the console. In addition, token is required while customizing channelId.
announce string 'https://tracker.cdnbye.com/v1' The address of tracker server.
memoryCacheLimit Object {"pc": 800 * 1024 * 1024, "mobile": 500 * 1024 * 1024} The max size of binary data that can be stored in the cache.
p2pEnabled boolean true Enable or disable p2p engine.
webRTCConfig Object {} A Configuration dictionary (opens new window) 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.
httpLoadTime number 2.0 Time for HTTP download if p2p download timeout.
showSlogan boolean true Display slogan of cdnbye on console.

# P2PEngineDash API

# P2PEngineDash.version (static)

Get the version of P2PEngineDash.

# P2PEngineDash.protocolVersion (static)

Get the version of P2P protocol.

# P2PEngineDash.isSupported() (static method)

Returns true if WebRTC data channel is supported by the browser.

# engine.enableP2P()

Resume P2P if it has been stopped.

# engine.disableP2P()

Disable engine to stop p2p and free used resources.

# engine.destroy()

Stop p2p and free used resources.

# P2PEngineDash Events

# engine.on('peerId', function (peerId) {})

Emitted when the peer Id of this client is obtained from server.

# engine.on('peers', function (peers) {})

Emitted when successfully connected with new peer.

# engine.on('stats', function (stats) {})

Emitted when data is downloaded/uploaded.
stats.totalHTTPDownloaded: total data downloaded by HTTP(KB).
stats.totalP2PDownloaded: total data downloaded by P2P(KB).
stats.totalP2PUploaded: total data uploaded by P2P(KB).
stats.p2pDownloadSpeed: p2p download speed(KB/s).

# engine.on('serverConnected', function (connected) {})

Emitted when websocket is opened/closed.

# engine.on('exception', function (e) {})

Emitted when exception occured.
e.code: Exception identifier(TRACKER_EXPT SIGNAL_EXPT DASHJS_EXPT)
e.message: Exception message
e.stack: Exception stack

# 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
    }
}

# 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 format 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;
    },
}

# 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 (streamId, sn, segmentUrl, range) {
        const segId = extractSegmentIdFromUrl(segmentUrl);
        return segId;
    }
}

# Use Your Own STUN or TURN Server

STUN (Session Traversal Utilities for NAT) allows clients to discover their public IP address and the type of NAT they are behind. This information is used to establish the media connection. Although there are default STUN servers in this SDK, you can replace them with your own via P2PConfig. TURN (Traversal Using Relays around NAT) server is used to relay traffic if direct connection fails. You can config your TURN (opens new window) server in the same way as STUN.

p2pConfig: {
    webRTCConfig: {
       iceServers: [
           { urls: YOUR_STUN_OR_TURN_SERVER }
       ]
    }
}

# Allow Http Range Request

If http range request is activated, we are able to get chunks of data from peer and then complete the segments by getting other chunks from the CDN, thus, reducing your CDN bandwidth. Besides, the code below is needed:

p2pConfig: {
    useHttpRange: true,
}

# How to Check Segment Validity

Sometimes we need to prevent a peer from sending a fake segment (such as the bittorrent with a hash function). CDNBye provides a validation callback with buffer of the downloaded segment, developer should implement the actual validator. For example, you can create a program that generates hashes for the segments and stores them in a specific file or injects into m3u8 playlist files the hashes information. If the callback returns false, then the segment is not valid.

p2pConfig: {
   validateSegment: function (segId, buffer) {
       var hash = hashFile.getHash(segId);
       return hash === md5(buffer);
   }
}