/xnet-android-sdk

X-P2P Android SDK https://cloud.tencent.com/product/x-p2p

Primary LanguageJavaMIT LicenseMIT

腾讯云 X-P2P Live Android SDK 接入文档

介绍

腾讯云X-P2P解决方案,可帮助用户直接使用经过大规模验证的直播、点播、文件分发服务,通过经商用验证的P2P服务大幅节省带宽成本,提供更优质的用户体验。开发者可通过SDK中简洁的接口快速同自有应用集成,实现Android设备上的P2P加速功能。

传统CDN加速服务中,客户端向CDN发送HTTP请求获取数据。在腾讯云X-P2P服务中,SDK可以视为下载代理模块,客户端应用将HTTP请求发送至SDK,SDK从CDN或其他P2P节点获取数据,并将数据返回至上层应用。SDK通过互相分享数据降低CDN流量,并通过CDN的参与,确保了下载的可靠性。

SDK支持多实例,即支持同时开启多个不同资源的直播p2p

接入

添加依赖

1.将libp2pimpl-release.aar拷贝到libs目录下

2.在应用模块的build.gradle中加入

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation (name: 'libp2pimpl-release', ext: 'aar')
}

支持的 ABI

'armeabi-v7a'

具体步骤

  • 在App启动之初初始化XP2PModule

首先需要初始化p2p sdk,最好在app启动后就作初始化。

    // 初始化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.HTTP_Proxy与XNet.HTTPS_PROXY
        // 失败时,XNet.HTTP_PROXY是""
        // 成功时,XNet.HTTP_PROXY="127.0.0.1:16080/live.p2p.com/
        bool ok = XNet.create(this, APP_ID, APP_KEY, APP_SECRET);

        //开启调试日志(发布可关闭)
        XNet.enableDebug();
    }
  • 播放控制(start/stop)

启动直播p2p:

    // 例如:http://domain/path/to/resource.flv?params=xxx
    // 变成:http://{XNet.http_proxy}domain/path/to/resource.flv?params=xxx
    // 要改的仅仅是在://后插入XNET.HTTP_PROXY
    String p2pUrl = "http://" + XNet.HTTP_PROXY + "${resource}.${ext}"
    // 通过获取的url, 播放器直接执行请求
    mediaPlayer.setDataSource(context, Uri.parse(p2pUrl), headers);
    mediaPlayer.prepareAsync();

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

由于后台监听限制的问题,resume的情况下需要调用resume接口

    // 返回值ok代表着是否恢复成功
    bool ok = XNet.resume();

api

SDK接口除初始化接口, 其余接口均由http实现, 请求格式为http:://${XNet.HTTP_PROXY}${func}?${param}

注意,在初始化返回值为false时,或者XNet.HTTP_PROXY为""时,意味着没走p2p,不应再向其发起HTTP请求,否则会遇到502等错误,也可认为没P2P的标志

以下为详细api


统计

  • 描述: 请求对应频道的统计数据

  • 方法: GET

  • 路径: /stat?channel=${resource}

  • 请求参数:

    参数名称 必选 类型 说明
    channel string 默认为url中的resource, 否则为频道请求中的channel值
  • 返回参数:

    返回码 说明
    200 查询成功
    404 查询失败, 频道不存在
    200, 返回内容为JSON
    参数名称 类型
    ---- ----
    flow.p2pBytes num
    flow.cdnBytes num
  • 请求样例

    http://127.0.0.1:16080/live.p2p.com/stat?channel=xxx

    *注:*channel 即 http://127.0.0.1:16080/live.p2p.com/resoruce.ext 中的 resource

  • 返回样例

    "{"flow":{"p2pBytes":0,"cdnBytes":0}}"

设置上下行

  • 描述: 请求设置p2p上行与下行, 0为开启, 1为关闭

  • 方法: GET

  • 路径: /feature?download=${0or1}&upload=${0or1}

    参数名称 必选 类型 说明
    download num 0为关闭; 1为默认值, 开启
    upload num 0为关闭; 1为默认值, 开启
  • 请求样例

    http://127.0.0.1:16080/live.p2p.com/feature?download=1&upload=0

    *注:*一般情况下移动网络需要关闭上传

  • 返回参数: JSON, 格式如下

    参数名称 必选 类型 说明
    ret num 0表示正常
    msg string 相关信息, 调试使用
    upload bool 1表示开启, 0表示关闭
    download bool 1表示开启, 0表示关闭
  • 返回样例

    "{"ret":0, "msg":"ok", "download":0,"upload":0}}"