P2P流媒体引擎

vuePress-theme-reco    2018 - 2021
P2P流媒体引擎 P2P流媒体引擎

Choose mode

  • dark
  • auto
  • light
在线文档
  • 快速入门
  • Web SDK

    • Hls.js
    • MP4
    • Dash.js
    • Shaka-Player
    • 大文件下载
    • 网站加速
  • Android SDK
  • iOS SDK
  • Flutter SDK
价格
解决方案
  • 机顶盒/IPTV
控制台
关于我们
GitHub
language
  • English
  • 简体中文

在线文档
  • 快速入门
  • Web SDK

    • Hls.js
    • MP4
    • Dash.js
    • Shaka-Player
    • 大文件下载
    • 网站加速
  • Android SDK
  • iOS SDK
  • Flutter SDK
价格
解决方案
  • 机顶盒/IPTV
控制台
关于我们
GitHub
language
  • English
  • 简体中文
  • 快速入门
  • 常见问题
  • 信令服务
  • P2P优化
  • 控制台

    • 绑定域名/AppId
    • 数据分析
    • P2P控制
    • Restful API
  • Hls.js SDK

    • 简介
    • 使用方法
    • 第三方播放器
    • CMS集成
    • API文档
    • CDN
    • 更新日志
  • 安卓 SDK

    • 简介
    • 使用方法
    • API文档
    • 更新日志
  • iOS SDK

    • 简介
    • 使用方法
    • API文档
    • 更新日志
  • Flutter SDK

    • 简介
    • 使用方法
    • API文档
    • 更新日志
  • 网站加速 SDK

    • 简介
    • 使用方法
    • API文档
    • 更新日志
  • Shaka-Player SDK

    • 简介
    • 使用方法
    • 第三方播放器
    • API文档
    • 更新日志
  • Web MP4 SDK

    • 简介
    • 使用方法
    • 第三方播放器
    • API文档
      • 实例化与参数配置
      • P2PEngineMp4 API
      • P2PEngineMp4 事件
      • 高级用法
    • 更新日志
  • Dash.js SDK

    • 简介
    • 使用方法
    • 第三方播放器
    • API文档
    • 更新日志
  • 大文件下载 SDK

    • 简介
    • 使用方法
    • API文档
    • 更新日志
  • 安卓 SDK 1.x

    • 简介
    • 使用方法
    • API文档
    • 更新日志
  • 更多

    • 技术原理
    • 用户服务协议

API文档

vuePress-theme-reco    2018 - 2021

API文档


# 实例化与参数配置

# var engine = new P2PEngineMp4(video, mediaConfig);

创建一个新的 P2PEngineMp4 实例,其中 video 是 html5 video 标签。

如果指定了 mediaConfig ,那么对应的默认值将会被覆盖。

字段 类型 默认值 描述
autoplay boolean false 是否自动播放。
controls boolean false 是否显示进度条。
muted boolean false 是否静音播放。
maxBufferLength number 60 最大缓冲时长,单位:秒。
minBufferLength number 40 最小缓冲时长,单位:秒。
p2pConfig Object - P2P配置,具体见下文。

如果指定了 mediaConfig.p2pConfig ,那么对应的默认值将会被覆盖。

字段 类型 默认值 描述
logLevel string|boolean 'error' log的等级,分为warn、error、none,设为true等于warn,设为false等于none。
wsSignalerAddr string 'wss://signal.cdnbye.com' 信令服务器地址。
announce string 'https://tracker.cdnbye.com/v1' tracker服务器地址。
memoryCacheLimit Object {"pc": 1024 * 1024 * 512, "mobile": 1024 * 1024 * 256} p2p缓存的最大数据量,分为PC和mobile。
p2pEnabled boolean true 是否开启P2P。
wifiOnly boolean false 是否只在wifi和有线网络模式上传数据(建议在云端设置)。
dcDownloadTimeout number 25 p2p下载的最大超时时间。
webRTCConfig Object {} 用于配置stun和datachannel的字典 。
channelIdPrefix string '' 如果使用自定义的channelId,则此字段必须设置,且长度必须大于4个字符并且小于16个字符,建议设置成你所在组织的唯一标识。
pieceLength number 512 * 1024 每个切片的大小(单位:Byte),相同pieceLength的节点才能互相连接,建议根据码率进行调整。
httpMaxRetrys number 3 HTTP下载某个切片的最大重试次数。
waitForPeer boolean false 优先尝试从对等端下载前几片数据,可以提高P2P比例,但可能会增加起播延时。
waitForPeerTimeout number 4.5 waitForPeer的超时时间,超时后恢复从http下载。
httpLoadTime number 2.0 P2P下载超时后留给HTTP下载的时间。

# P2PEngineMp4 API

# P2PEngineMp4.version (static)

获取 P2PEngineMp4 的版本号。

# P2PEngineMp4.protocolVersion (static)

获取 P2P 协议的版本号。

# P2PEngineMp4.isSupported() (static method)

判断当前浏览器是否同时支持WebRTC datachannel和MSE(Media Source Extension)。

# engine.loadSource(url)

加载MP4文件的url。

# engine.enableP2P()

在p2p暂停或未启动情况下启动p2p。

# engine.disableP2P()

停止p2p并释放内存。

# engine.destroy()

停止p2p、销毁engine并释放内存。

# P2PEngineMp4 事件

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

当从服务端获取到peerId时回调该事件。

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

当与新的节点成功建立p2p连接时回调该事件。

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

该回调函数可以获取p2p信息,包括:
stats.totalHTTPDownloaded: 从HTTP(CDN)下载的数据量(单位KB)
stats.totalP2PDownloaded: 从P2P下载的数据量(单位KB)
stats.totalP2PUploaded: P2P上传的数据量(单位KB)
stats.p2pDownloadSpeed: P2P下载速度(单位KB/s)

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

当连接/断开websocket时回调该事件。

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

该回调函数可以获取SDK的异常信息,包括:
e.code: 异常标识(TRACKER_EXPT SIGNAL_EXPT MEDIA_EXPT)
e.message: 异常信息
e.stack: 异常堆栈信息

# 通过p2pConfig获取p2p信息

p2pConfig: {
    getStats: function (totalP2PDownloaded, totalP2PUploaded, totalHTTPDownloaded, p2pDownloadSpeed) {
        // 获取p2p下载信息
    },
    getPeerId: function (peerId) {
        // 获取本节点的Id
    },
    getPeersInfo: function (peers) {
        // 获取成功连接的节点的信息
    }
}

# 高级用法

# 切换源

先调用 destroy 方法释放资源,然后重新创建 P2PEngineMp4 实例。

engine.destroy();
engine = new P2PEngineMp4(video);
engine.loadSource('another.mp4');

# 解决动态 MP4 路径问题

某些流媒体提供商的 MP4 地址是动态生成的,不同节点的 MP4 地址不一样,例如example.com/clientId1/streamId.mp4和example.com/clientId2/streamId.mp4, 而本插件默认使用 *.mp4 作为channelId。这时候就要构造一个共同的chanelId,使实际观看同一视频的节点处在相同频道中。

// 必须先在 p2pConfig 设置 channelIdPrefix ,才能自定义 channelId !
p2pConfig: {
    channelIdPrefix: YOUR_UNIQUE_ID,
    channelId: function (mp4Url) {
        const videoId = extractVideoIdFromUrl(mp4Url);   // 忽略差异部分,构造一个一致的channelId,其中 extractVideoIdFromUrl 需要自己定义,可以抽取url中的视频ID作为结果返回
        return videoId;
    }
}

# P2P优先策略

由于建立P2P连接需要时间,默认情况下前几片用HTTP下载。可以通过配置参数,等待P2P建立连接后优先用P2P下载,从而提升P2P效果,但可能会带来延时,建议在热度比较大的频道开启。

p2pConfig: {
    waitForPeer: true,
    waitForPeerTimeout: 4.5,     // 可以根据具体场景设置超时时间
}