SwarmCloud

vuePress-theme-reco SwarmCloud    2018 - 2023
P2P流媒體引擎 P2P流媒體引擎

Choose mode

  • dark
  • auto
  • light
線上文檔
  • 快速入門
  • Web SDK

    • HLS(m3u8)
    • Shaka-Player
    • Dash.js
    • MP4
    • 大文件下載
  • 安卓/安卓TV SDK

    • v3
    • v2
  • iOS/tvOS/macOS SDK
定價
關於我們
生態
實時地球
管理面板
GitHub (opens new window)
language
  • English
  • 中文

線上文檔
  • 快速入門
  • Web SDK

    • HLS(m3u8)
    • Shaka-Player
    • Dash.js
    • MP4
    • 大文件下載
  • 安卓/安卓TV SDK

    • v3
    • v2
  • iOS/tvOS/macOS SDK
定價
關於我們
生態
實時地球
管理面板
GitHub (opens new window)
language
  • English
  • 中文
  • 快速入門
  • 常见问题
    • 基础
    • Web SDK
    • 客户端SDK
  • Tracker服务
  • 信令服务
  • P2P优化
  • 管理面板

  • Web HLS SDK

  • 安卓 SDK v3

  • 安卓 SDK v2

  • iOS/tvOS/macOS SDK

  • Flutter SDK

  • Shaka-Player SDK

  • Dash.js SDK

  • Hls.js SDK

  • Web MP4 SDK

  • 大文件下載 SDK

  • 更多

常见问题

vuePress-theme-reco SwarmCloud    2018 - 2023

常见问题


SwarmCloud

# 基础

# P2P服务停止后会影响视频的正常播放吗?

不会。视频仍会正常播放,只是没有P2P加速效果。

# SwarmCloud的P2P服务安全吗?

SwarmCloud采用的WebRTC data channel技术,是基于SCTP协议和DTLS加密的,无需担心数据传输的安全问题。另外,与后台服务器的通信(包括tracker和信令服务器)是基于安全的HTTPS和WSS。隐私方面,SwarmCloud不会在服务器缓存任何视频内容相关的信息,视频地址也做了加密处理。

# 支持加了防盗链或者加密的视频地址吗?

支持的,请提供加密原理以及测试地址给我们的技术支援团队。

# 集成了SwarmCloud后会造成直播延迟吗?

不会的,由于前几个切片从CDN拉取,因此不会给起播带来任何延迟。然而低延迟直播可能会使P2P效果下降,建议 HLS / Dash 的 playlist 遵循以下配置:
切片时长: 至少3秒
Playlist包含的切片数: 至少6个

# 微信小程序可以使用吗?

暂时不支持微信小程序

# 使用SwarmCloud的P2P服务需要付费吗?

目前SwarmCloud已经开始商业化,但同时对小型流媒体网站仍提供免费服务。收费模式如下:

  • 只对在管理面板(https://www.cdnbye.com/oms) 绑定的域名提供P2P服务
  • 每个账号每日免费赠送25GB P2P流量,次日重置
  • 每日在管理面板完成签到后再赠送25GB P2P流量,次日清零
  • 超出免费额度后停止P2P服务,如果继续使用,需要购买流量包,购买的流量包额度越大,价格越划算,且可以使用更多P2P流量,直到剩余可用流量为零。

# 如何购买流量包?

登入 https://www.cdnbye.com/oms,点击左边侧滑栏的 购买流量包 ,目前支援支付宝和Paypal两种付款方式,其中支付宝以人民币付款,Paypal以美元付款。

# 如果绑定了多个域名/AppId,购买流量包后怎么扣费呢?

如果您在同一个账号同时绑定了多个域名/APP,则开启P2P的所有域名/APP会共享流量包。您可以在管理面板的 P2P配置 关闭某个域名的P2P服务从而节省流量包消耗。

# 购买了包月套餐后每日额度不够用怎么办?

建议再买个流量包作为补充,系统会先扣除包月套餐流量,扣完再扣除流量包流量。

# 如何查看集成后有没有效果?

  • 确保已经打开2个以上播放同一个m3u8的客户端
  • 确保按文档提供的步骤集成,并且SDK没有任何报错信息
  • 打开管理面板切换对应域名即可查看p2p流量
  • 每个平台的SDK都会提供API来监听p2p流量等统计信息,请参考对应的文档说明

# 对接入P2P服务的网站/APP有什么要求吗?

SwarmCloud不对色情等非法内容提供P2P服务,请确保您的网站/APP符合法律规范。服务于国内的域名必须已备案。

# SwarmCloud会不会造成用户视频播放延迟?

不会。首先,视频的首片数据总是从CDN下载的,因而不会造成首屏延迟。其次,如果在超时时间内无法从其他节点获取数据,那么内置的调度算法会及时切到CDN下载,因此本P2P技术不会带来任何额外的延迟。

# 使用过程中出现异常如何反馈?

如果是Web端插件的异常请在p2p配置中开启log并截图浏览器console出错信息发送到service@cdnbye.com,或者在QQ群里反馈。如果是原生SDK出现异常请在p2p配置中开启log并保存日志文件发送到官方邮箱,建议在APP中集成Bugly (opens new window),有助于收集crash日志并上传到云端。

# 如何在内网使用SwarmCloud?

使用SwarmCloud的p2p服务需要调用两个云端服务,一个是Tracker调度服务,另一个是信令服务。

# 信令服务

可以直接在内网服务器上部署信令服务 (opens new window),信令不需要与外网通信。

# Tracker服务

Tracker需要通过能与外网通信的服务器进行转发,操作步骤如下:

  • 在管理面板绑定网站域名
  • 联系SwarmCloud技术人员对转发域名进行授权
  • 在服务器配置nginx内网转发,在conf.d增加tracker.conf,示例如下:
    server {
        listen 80;
        listen 443 ssl;
        server_name YOUR_TRACKER_DOMAIN;          # 配置内网转发域名
        access_log /root/log/access.log;
        error_log /root/log/error.log;
        # ssl on;
        ssl_certificate  tracker.pem;    # 证书路径
        ssl_certificate_key tracker.key;  # 证书秘钥路径
        location / {
            proxy_pass https://tracker.cdnbye.com;      # 转发到SwarmCloud的tracker服务
            proxy_set_header  Host  $host;
            proxy_set_header  X-Real-IP  $remote_addr;
            proxy_set_header  X-Forwarded-For $remote_addr;
        }
    }
    
    同时在nginx.conf添加如下配置:
    worker_rlimit_nofile 1000000;   # 配置Nginx worker进程最大打开文件数
    events {
        worker_connections 102400;  # 单个进程允许的客户端最大连接数
    }
    
    • 执行重新加载 Nginx
      sudo nginx -s reload
      
    • 确认公司防火墙对 Nginx 服务器 IP 及端口限制访问解除
    • 修改前端代码,替换Tracker域名为转发域名
      p2pConfig: {
        announce: 'http://your_traclker.com/v1',
      }
      

# SwarmCloud的效果如何?如果使用过程效果不如预期,应该怎么调整?

如果您使用过程中无法达到预期效果,请参照P2P优化对各参数进行调整,或者联系本平台获取技术支援。

# SwarmCloud的P2P技术会影响DRM(数字版权管理)吗?

不会。只有在用户获得发布者的服务器授权后才会激活P2P传输。而且,流秘钥是不会在P2P网络中 传输的。P2P网络中传输的ts文件和用户从CDN下载的完全一样。另外,播放的内容不会上传或者缓存在我们的服务器中。

# 平时在线人数不多有必要用P2P吗?

有。P2P的独特优势是带宽"削峰",平时在线人数不多的时候效果不明显,一旦在观看高峰期带宽突然大幅增长,随著在线人数增多P2P分享率指数式上升,可有效降低带宽峰值,避免由于带宽不足导致用户播放卡顿等问题。

# Web SDK

# Web SDK的原理是什么?

SwarmCloud采用WebRTC data channel技术和BT算法来实现直播和点播的P2P加速。通过内置的调度算法, 在P2P和CDN之间进行无缝切换,从而在不影响用户播放体验的前提下最大化P2P率。hlsjs-p2p-engine 是SwarmCloud为播放HLS流而开发的hls.js插件。目前,SwarmCloud已经支援大部分的HTML5播放器,包括 Hls.js, JWPlayer, Video.js, Clappr, Flowplayer和TCPlayer等。

# iOS浏览器是否不支援P2P?

由于iOS的浏览器内核不支援MSE(Media Source Extension),因此基于hls.js的SDK不支援iOS浏览器。我们已推出基于ServiceWorker的SDK,建议两个SDK同时使用从而使所有浏览器均支援P2P。

# 如果用户的浏览器不支援WebRTC,会怎麽样?

在这种情况下,插件不起任何作用,用户和往常一样采用HTTP方式下载。

# 当SDK新版本发佈时,我需要手动更新吗?

如果您用了我们提供的CDN来引入SDK,则不需要手动更新。

# 我的播放器是在 iframe 裡面的要怎麽集成?

在这种情况下,您需要在 iframe 的脚本裡集成SDK,因为 Javascript 无法从 iframe 外部访问 iframe 裡的内容。

# 目前支援的移动端浏览器有哪些?

  • 谷歌浏览器
  • 火狐浏览器
  • 欧朋浏览器
  • 微信内置浏览器
  • QQ内置浏览器
  • 猎豹浏览器
  • 搜狗浏览器
  • 百度浏览器
  • 360极速浏览器
  • 2345浏览器
  • 遨游5浏览器
  • Via浏览器
  • X浏览器
  • 先锋浏览器
    注:以上所列出均是安卓平台,目前iOS平台还未支援,不断完善中...

# 某些移动端浏览器无法正常播放?

P2P需要浏览器同时支援MSE(Media Source Extension)和WebRTC才能使用,可以通过 SwarmCloud 提供的API进行检测,如果不支援则用原生播放器进行播放,示例如下:

if (Hls.isSupported() && Hls.WEBRTC_SUPPORT) {
    // 采用SwarmCloud播放
} else {
    // 采用video标签播放
}

# Web端插件P2P无效问题排查步骤

  • 同时打开2个以上处于同一局域网的网页播放同一个视频
  • 直播流建议按照P2P优化指南进行配置
  • 视频播放后打开网页调试窗口查看debug信息
  • 如果有红色的报错信息一般是代码逻辑问题,请根据提示修改
  • 如果显示类似 "CDNBye 0.X.X is deprecated, please update to latest version(0.X.X已停止支援,请更新至最新版本)" 说明版本已过期,请升级至最新版
  • 如果显示其它信息,请根据提示操作,有以下五种可能:
    • 域名没有绑定,注意SwarmCloud后台是根据HTTP请求的Origin字段来获取域名的(如果使用iFrame该域名可能和网站域名不一致),请在后台绑定正确的域名
    • 流量已经用完,请登入管理面板 (opens new window)并切换到对应域名查看流量使用情况
    • 在管理面板的 P2P配置 中关闭了P2P服务,重新开启即可
    • 在管理面板的 P2P配置 中激活比率调小了,重新调至100即可
    • 域名被加入黑名单,登入管理面板点击 网站管理 即可确认
  • 如果没有显示任何异常,请确保m3u8路径不会动态变化,否则请构造一个相同的ChannelId
  • 如果以上步骤还不能解决问题,请联系技术客服

# 客户端SDK

# 安卓SDK可以用于机顶盒吗?

当然可以,只要是安卓4.4以上系统的机顶盒都支援。经过实测,exoplayer的兼容性最好,推荐采用。

# SDK除了 P2P 还有其他附加功能吗?

有的。SDK还具备智能缓存能力,用于避免文件重复下载问题,从而有效节省带宽消耗,而且本功能是完全免费的。

# 客户端SDK P2P无效问题排查步骤

  • 请先确保在真机上调试
  • 同时打开2个处于同一局域网的设备
  • 直播流建议按照P2P优化指南进行配置
  • iOS
    • 在管理面板搜索关键字"P2P warning",根据对应的警告信息进行配置
    • 如果仍然无法排查问题,请先将日志打印功能打开并保存为文件,示例代码如下:
    let config = SWCP2pConfig.defaultConfiguration()
    config.logLevel = SWCLogLevel.debug
    config.logPersistent = true
    SWCP2pEngine.sharedInstance().start(token: YOUR_TOKEN, p2pConfig: config)
    
    SWCP2pConfig *config = [SWCP2pConfig defaultConfiguration];
    config.logLevel = CBLogLevelDebug;
    config.logPersistent = YES;
    [[SWCP2pEngine sharedInstance] startWithToken:YOUR_TOKEN andP2pConfig:config];
    
    • 在 Library/Caches/Logs 找到日志文件并发送给SwarmCloud技术人员
  • 安卓
    • 在Logcat搜索关键字"P2P warning",根据对应的警告信息进行配置
    • 如果仍然无法排查问题,请先将日志级别调整为Debug并保存为文件,示例代码如下:
    P2pConfig config = new P2pConfig.Builder().logEnabled(true).logLevel(LogLevel.DEBUG).logPersistent(true).build();
    P2pEngine.init(this, YOUR_TOKEN, config);
    
    val config = P2pConfig.Builder().logEnabled(true).logLevel(LogLevel.DEBUG).logPersistent(true).build()
    P2pEngine.init(this, YOUR_TOKEN, config)
    
    • 在外部存储(Environment.getExternalStorageDirectory() -> /Android/data/)中找到logger/logs_0.csv,如果找不到请尝试查看路径"/storage/emulated/0",然后将保存完整日志的csv文件发送给SwarmCloud技术人员

# 解决Exoplayer无法播放问题

Exoplayer默认不支援跨协议重定向 (opens new window),因此需要在初始化时设置 allowCrossProtocolRedirects=true,如以下示例:

DataSource.Factory dataSourceFactory =
    new DefaultHttpDataSourceFactory(
            Util.getUserAgent(this, "p2p-engine"),
            DefaultHttpDataSource.DEFAULT_CONNECT_TIMEOUT_MILLIS,
            DefaultHttpDataSource.DEFAULT_READ_TIMEOUT_MILLIS,
            true   /* allowCrossProtocolRedirects */
    );

具体用法可以参考官方demo (opens new window)。

# 解决安卓机顶盒OOM问题

配置比较低的机顶盒容易出现OOM,可以通过配置提高堆内存大小,在 app/src/main 目录中的 AndroidManifest.xml 的 <application> 标签中直接插入:

<application
  ...
  android:largeHeap=“true”
  ...
    />

# 如何减小APK体积

由于依赖了第三方库WebRTC,使APK体积增大了不少。如果对APK体积比较敏感,可以通过以下2种方案压缩体积:

  • abiFilters
    编译系统的默认行为是将每个 ABI 的二进制文件包括在单个 APK(也称为胖 APK)内。与仅包含单个 ABI 的二进制文件的 APK 相比,胖 APK 要大得多;要权衡的是兼容性更广,但 APK 更大。要限制应用支援的 ABI 集,请使用 abiFilters (opens new window)。
android {
    ...
    defaultConfig {
        ...
        ndk {
            abiFilters "armeabi-v7a", "armeabi"
        }
    }
}
  • APK 拆分
    谷歌建议针对不同CPU架构生成对应的APK (opens new window):
android {
  ...
  splits {
    // 根据ABI配置生成多APK
    abi {
      // 是否根据不同ABI生成APK
      enable true
      // 默认情况下所有ABI都包含了,因此需要调用reset()并且指定我们需要的CPU架构
      // 重置Gradle生成APK的ABI列表
      reset()
      // 指定CPU架构来生成我们需要的APK
      include "armeabi-v7a", "arm64-v8a"
      // 设置不再生成一个包含所有ABI的APK
      universalApk false
    }
  }
}

# 如何获取安卓应用签名

可以使用 keytool 来获取APP的应用签名

keytool -v -list -keystore path/to/my-signing-key.keystore

在输出的证书指纹中(MD5, SHA1, SHA256),SHA1对应的字符串即需要的应用签名。