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

    • 简介
    • 使用方法
      • 环境配置
      • 导入SDK
      • 快速开始
    • API文档
    • 更新日志
  • iOS SDK

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

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

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

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

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

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

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

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

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

使用方法

vuePress-theme-reco    2018 - 2021

使用方法


# 环境配置

# 开发环境

  • Android Studio 开发工具,下载地址

# 开启Java8支持

在 app/build.gradle 中加入以下配置以开启Java8支持:

android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

# 添加相关权限

在 app/src/main 目录中的 AndroidManifest.xml 中增加如下权限声明:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

# 允许HTTP请求(P2P文件下载不需要配置)

从Android P系统开始,如果应用使用的是非加密的明文流量的http网络请求,则会导致该应用无法进行网络请求,https则不会受影响。由于本地代理服务需要使用http协议访问,针对这个问题,有以下两种解决方法:
(1) targetSdkVersion 降到27以下
(2) 更改网络安全配置,在 app/src/main 目录中的 AndroidManifest.xml 的<application>标签中直接插入:

<application
  ...
  android:usesCleartextTraffic="true"
  ...
    />

# 混淆配置

为了保证正常使用 SDK ,请在 proguard-rules.pro 文件中添加以下代码:

-dontwarn com.cdnbye.**
-keep class com.cdnbye.**{*;}
-keep interface com.cdnbye.**{*;}
-dontwarn org.webrtc.**
-keep class org.webrtc.**{*;}

# 导入SDK

# 下载 SDK

下载最新版本的安卓SDK ,并拷贝到工程的 libs 目录下。
下载只包含Datachannel和P2P模块的WebRTC库 webrtc.aar 并拷贝到工程的 libs 目录下。

# 修改 build.gradle

在app模块的 build.gradle 中添加如下配置:

android {
    repositories {
        flatDir {
            dirs 'libs'
        }
    }
}

同时在 build.gradle 添加如下依赖:

dependencies {
    implementation 'com.alibaba:fastjson:1.2.58'
    implementation 'org.java-websocket:Java-WebSocket:1.5.1'    // Need latest version to avoid crash
    implementation 'com.orhanobut:logger:2.2.0'
    implementation 'com.squareup.okhttp3:okhttp:3.12.13'        // Or higher OkHttp version
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    compile(name:'webrtc', ext:'aar')
}

# 快速开始

推荐在 Application.OnCreate() 中启动P2P加速服务。

# 导入 P2pEngine

import com.cdnbye.sdk.P2pEngine;

# 实例化 P2pEngine

public class MyApplication extends android.app.Application {
    @Override
    public void onCreate() {
        super.onCreate();
        P2pEngine.init(this, YOUR_TOKEN, null);
    }
}

其中 YOUR_TOKEN 是用于标识用户的字符串,请换成自己的token,点击这里查看如何注册 Appid 并获取 token。

# 播放 HLS & DASH & MP4

进行流媒体播放,必须通过SDK把播放地址转换成本地加速地址,再把转换后的地址传给播放器即可(建议使用ExoPlayer )。

private void onPlay(){
  String parsedUrl = P2pEngine.getInstance().parseStreamUrl("https://your_stream");
  mediaPlayer.play(parsedUrl);
}

# 文件下载

使用文件下载功能,先传入下载地址启动下载,下载完成后再通过回调函数获取文件保存路径。

try {
    DownloadInfo info = P2pEngine.getInstance().downloadFile(url);
    if (info.isCached()) {
        // already downloaded
        File file = info.getCacheFile();
    }
} catch (Exception e) {
    // fallback
}
P2pEngine.getInstance().registerFileDownloadListener(new FileDownloadListener() {
    @Override
    public void onDownloadFailed(Throwable e) {
        // fallback
    }

    @Override
    public void onDownloadFinished(File cacheFile, String url) {
        // get downloaded file here
    }

    @Override
    public void onCacheAvailable(File cacheFile, String url, int percentsAvailable) {
        // show progress to user
    }
});

# 示例

获取完整的示例程序 。

# P2P无效问题排查步骤

请参考常见问题

# 解决Exoplayer无法播放问题

请参考常见问题

# 解决安卓机顶盒oom问题

请参考常见问题