有奖捉虫:办公协同&微信生态&物联网文档专题 HOT
腾讯云 X-P2P 解决方案,可帮助用户直接使用经过大规模验证的直播、点播、文件分发服务,通过经商用验证的 P2P 服务大幅节省带宽成本,提供更优质的用户体验。开发者可通过 SDK 中简洁的接口快速同自有应用集成,实现 Android 设备上的 P2P 加速功能。
传统 CDN 加速服务中,客户端向 CDN 发送 HTTP 请求获取数据。在腾讯云 X-P2P 服务中,SDK 可以视为下载代理模块,客户端应用将 HTTP 请求发送至 SDK,SDK 从 CDN 或其他 P2P 节点获取数据,并将数据返回至上层应用。SDK 通过互相分享数据降低 CDN 流量,并通过 CDN 的参与,确保了下载的可靠性。
SDK 名称
XP2P Android 端 SDK
版本号
V1.3.5
SDK 介绍
为直播、点播、下载等场景的内容分发网络提供P2P点到点对等网络内容共享加速
开发者
腾讯云计算(北京)有限责任公司
个人信息处理规则
下载 SDK
单击下载 Android SDK压缩包
说明
SDK 支持多实例,即支持同时开启多个不同资源的直播 P2P。

支持的架构

当前 Android SDK 支持如下 ABI 架构:
armeabi-v7a
arm64-v8a
x86
x86_64

添加依赖

通过 bintray 获取最新的 gradle 组件包:
implementation 'com.tencent.qcloud:xnet:release-lastest'

混淆配置

由于 native 层代码需要反射调回 java,需要确保 SDK 内的代码都不被混淆,请在 proguard 中添加以下配置:
-keep public class com.tencent.qcloud.** {
*;
}

接入步骤

步骤1:初始化

在 App 启动时初始化 XP2PModule,并随后初始化 P2P SDK。
// 初始化appId等关键客户信息
final String APP_ID = "$your_app_id";
final String APP_KEY = "$your_app_key";
final String APP_SECRET = "$your_app_secret";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

// 返回值ok可用于统计p2p成功与失败
// 无论成功与失败,都可以使用XNet.proxyOf与XNet.proxyOf
// 失败时,XNet.proxyOf是""
// 成功时,XNet.proxyOf是127.0.0.1:16080/${domain}
bool ok = XNet.create(this, APP_ID, APP_KEY, APP_SECRET);

//开启调试日志(发布可关闭)
XNet.enableDebug();
}


步骤2:接入直播 Live

直播播放控制 P2P(start/stop),操作如下:
1. 启动直播 P2P:
// 例如:http://domain/path/to/resource.flv?params=xxx
// 变成:http://{XNet.proxyOf(domain)}/path/to/resource.flv?params=xxx
// 要改的仅仅是在://后插入XNET.proxyOf
String codecID = "_h265";
String streamID = url.substring(url.lastIndexOf(("/") + 1));
streamID = streamID.substring(0, streamID.indexOf("."));

String xResID = streamID + codecID;
String param = "?xresid=" + xResID; //该参数标识P2P资源

String p2pURl = url.replace("http://", XNet.proxyOf("live.p2p.com"));
p2pURl += param;

// 通过获取的url, 播放器直接执行请求
mediaPlayer.setDataSource(context, Uri.parse(p2pUrl), headers);
mediaPlayer.prepareAsync();

// 相关资源随着http请求关闭直接释放,无需再做任何处理
//注意:该http请求可能会返回302

2. 由于后台监听限制的问题,resume 的情况下需要调用 resume 接口。
// 返回值ok代表着是否恢复成功
bool ok = XNet.resume();