CDNBye采用的WebRTC data channel技术,是基于SCTP协议和TLS加密的,无需担心数据传输的 安全问题。另外,与后台服务器的通信(包括tracker和信令服务器)是基于安全的HTTPS和WSS。隐私方面,CDNBye不会在服务器缓存任何视频内容相关的信息,视频地址也做了加密处理。
目前CDNBye已经开始商业化,但同时对小型流媒体网站仍提供免费服务。收费模式如下:
- 只对在控制台(https://oms.cdnbye.com) 绑定的域名提供P2P服务
- 每个账号每日免费赠送5GB P2P流量,次日重置
- 每日在控制台完成签到后再赠送20GB P2P流量,次日清零
- 超出免费额度后停止P2P服务,如果继续使用,需要购买流量包,购买的流量包额度越大,价格越划算,且可以使用更多P2P流量,直到剩余可用流量为零。
- 目前只针对Web端插件收费,iOS和安卓SDK完全免费
登录https://oms.cdnbye.com
,点击左边侧滑栏的购买流量包
,目前支持支付宝和Paypal两种付款方式,其中支付宝以人民币付款,Paypal以美元付款。
如果您在同一个账号同时绑定了多个域名/APP,则开启P2P的所有域名/APP会共享流量包。您可以在控制台的P2P配置
关闭某个域名的P2P服务从而节省流量包消耗。
建议再买个流量包作为补充,系统会先扣除包月套餐流量,扣完再扣除流量包流量。
不会。视频仍会正常播放,只是没有P2P加速效果。
- 确保已经打开2个以上播放同一个m3u8的客户端
- 确保按文档提供的步骤集成,并且SDK没有任何报错信息
- 打开控制台切换对应域名即可查看p2p流量
- 每个平台的SDK都会提供API来监听p2p流量等统计信息,请参考对应的文档说明
CDNBye不对色情等非法内容提供P2P服务,请确保您的网站/APP符合法律规范。
不会。首先,视频的首片数据总是从CDN下载的,因而不会造成首屏延迟。其次,如果在超时时间内无法从其他节点获取数据,那么内置的调度算法会及时切到CDN下载,因此本P2P技术不会带来任何额外的延迟。
建议不使用默认的信令服务,可以自行部署信令服务或者用第三方免费信令服务,请参考这里。
如果是Web端插件的异常请在p2p配置中开启log并截图浏览器console出错信息发送到service@cdnbye.com,或者在QQ群里反馈。如果是原生SDK出现异常请在p2p配置中开启log并保存日志文件发送到官方邮箱,建议在APP中集成Bugly,有助于收集crash日志并上传到云端。
使用CDNBye的p2p服务需要调用两个云端服务,一个是Tracker调度服务,另一个是信令服务。
可以直接在内网服务器上部署信令服务,信令不需要与外网通信。
Tracker需要通过能与外网通信的服务器进行转发,操作步骤如下:
- 在控制台绑定网站域名
- 联系CDNBye技术人员对转发域名进行授权
- 在服务器配置nginx内网转发,在conf.d增加tracker.conf,示例如下:
同时在nginx.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; # 转发到CDNBye的tracker服务 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; } }
worker_rlimit_nofile 1000000; # 配置Nginx worker进程最大打开文件数 events { worker_connections 102400; # 单个进程允许的客户端最大连接数 }
- 修改前端代码,替换Tracker域名为转发域名
如果您使用过程中无法达到预期效果,请参照P2P优化对各参数进行调整,或者联系本平台获取技术支持。
不会。只有在用户获得发布者的服务器授权后才会激活P2P传输。而且,流秘钥是不会在P2P网络中 传输的。P2P网络中传输的ts文件和用户从CDN下载的完全一样。另外,播放的内容不会上传或者缓存在我们的服务器中。
有。P2P的独特优势是带宽"削峰",平时在线人数不多的时候效果不明显,一旦在观看高峰期带宽突然大幅增长,随着在线人数增多P2P分享率指数式上升,可有效降低带宽峰值,避免由于带宽不足导致用户播放卡顿等问题。
CDNBye采用WebRTC data channel技术和BT算法来实现直播和点播的P2P加速。通过内置的调度算法, 在P2P和CDN之间进行无缝切换,从而在不影响用户播放体验的前提下最大化P2P率。hlsjs-p2p-engine 是CDNBye为播放HLS流而开发的hls.js插件。目前,CDNBye已经支持大部分的HTML5播放器,包括 Hls.js, JWPlayer, Video.js, Clappr, Flowplayer和TCPlayer等。
在这种情况下,插件不起任何作用,用户和往常一样采用HTTP方式下载。
- QQ浏览器
- 谷歌浏览器
- 火狐浏览器
- 欧朋浏览器
- 微信浏览器
- QQ内置浏览器
- 猎豹浏览器
- 搜狗浏览器
- 百度浏览器
- 360极速浏览器
- 2345浏览器
- 遨游5浏览器
- Via浏览器
- X浏览器
- 先锋浏览器
注:以上所列出均是安卓平台,目前iOS平台还未支持,不断完善中...
目前已知安卓端浏览器不能播放的有:
- 百度APP内置浏览器
可以通过UserAgent
识别出这些浏览器,然后让原生播放器来接管播放,实例代码如下:
if (navigator.userAgent.match(/iPad|iPhone|iPod|Baidu|UCBrowser/i)) {
// 采用原生浏览器播放
} else {
// 采用CDNBye播放
}
由于iOS的浏览器内核不支持MSE(Media Source Extension),因此所有iOS系统的手机均不支持P2P,这也是其他Web P2P方案共同的局限性,建议使用原生APP集成iOS端SDK来实现P2P。
- 同时打开2个以上网页播放同一个视频
- 视频播放后打开网页调试窗口查看debug信息
- 如果有红色的报错信息一般是代码逻辑问题,请根据提示修改
- 如果显示类似 "CDNBye 0.X.X is deprecated, please update to latest version(0.X.X已停止支持,请更新至最新版本)" 说明版本已过期,请升级至最新版
- 如果显示其它信息,请根据提示操作,有以下四种可能:
- 域名没有绑定,注意CDNBye后台是根据HTTP请求的Origin字段来获取域名的(如果使用iFrame该域名可能和网站域名不一致),请在后台绑定正确的域名
- 流量已经用完,请登录控制台并切换到对应域名查看流量使用情况
- 在控制台的
P2P配置
中关闭了P2P服务,重新开启即可 - 域名被加入黑名单,登录控制台点击
域名信息
即可确认
当然可以,只要是安卓5.0以上系统的机顶盒都支持。经过实测,exoplayer的兼容性最好,推荐采用。
暂时还不兼容APPLE TV。
有的。SDK还具备智能缓存能力,用于避免文件重复下载问题,从而有效节省带宽消耗,而且本功能是完全免费的。
- iOS
- 在控制台搜索关键字"CDNBye warning",根据对应的警告信息进行配置
- 如果仍然无法排查问题,请先将日志打印功能打开,示例代码如下:
CBP2pConfig *config = [CBP2pConfig defaultConfiguration]; config.logLevel = CBLogLevelDebug; [[CBP2pEngine sharedInstance] startWithToken:YOUR_TOKEN andP2pConfig:config];
- 然后将日志信息保存到文件并发送给CDNBye技术人员
- 安卓
- 先打开日志打印功能,示例代码如下:
P2pConfig config = new P2pConfig.Builder().logEnabled(true).build(); P2pEngine.initEngine(this, YOUR_TOKEN, config);
- 在控制台搜索"CDNBye",根据对应的警告信息进行配置
- 如果仍然无法排查问题,请先将日志级别调整为Debug,示例代码如下:
P2pConfig config = new P2pConfig.Builder().logEnabled(true).logLevel(LogLevel.DEBUG).build(); P2pEngine.initEngine(this, YOUR_TOKEN, config);
- 然后将日志信息保存到文件并发送给CDNBye技术人员
Exoplayer默认不支持跨协议重定向,因此需要在初始化时设置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。
配置比较低的机顶盒容易出现OOM,可以通过配置提高堆内存大小,在app/src/main
目录中的AndroidManifest.xml
的标签中直接插入:
<application
...
android:largeHeap=“true”
...
/>
由于依赖了第三方库WebRTC,使APK体积增大了不少。如果对APK体积比较敏感,可以通过以下2种方案压缩体积:
abiFilters
编译系统的默认行为是将每个 ABI 的二进制文件包括在单个 APK(也称为胖 APK)内。与仅包含单个 ABI 的二进制文件的 APK 相比,胖 APK 要大得多;要权衡的是兼容性更广,但 APK 更大。要限制应用支持的 ABI 集,请使用 abiFilters。
android {
...
defaultConfig {
...
ndk {
abiFilters "armeabi-v7a", "armeabi"
}
}
}
APK 拆分
谷歌建议针对不同CPU架构生成对应的APK:
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
}
}
}