使用方法
# 环境配置
# 开发环境
- 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问题
请参考常见问题