環境設定
開発環境
- 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" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />ローカルプロキシへの接続を許可する
AndroidManifest.xml ファイルを更新します:
<application
...
android:networkSecurityConfig="@xml/network_security_config"
...
/>続いて res/xml/network_security_config.xml ファイルを作成または更新します:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">127.0.0.1</domain>
</domain-config>
</network-security-config>LargeHeapの設定
SDKは内部動作を維持するために一定のメモリを使用するため、AndroidManifest.xml ファイルで android:largeHeap="true" を設定し、システムがアプリに十分なヒープ領域を割り当てるようにすることを推奨します:
<application
...
android:largeHeap="true"
...
/>難読化の設定
SDKを正常に使用するために、proguard-rules.pro ファイルに以下のコードを追加してください:
-dontwarn com.p2pengine.**
-keep class com.p2pengine.**{*;}
-keep interface com.p2pengine.**{*;}
-keep class com.cdnbye.libdc.**{*;}
-keep interface com.cdnbye.libdc.**{*;}
-keep class com.snapchat.djinni.**{*;}SDKの導入
SDKの導入には2つの方法があります。1つはMavenリポジトリを使う方法、もう1つはjarとaarをダウンロードして導入する方法です:
Maven
- プロジェクトの build.gradle にSwarmCloudのMavenリポジトリアドレスを設定します:
allprojects {
repositories {
// ... other repositories
maven {
url 'https://maven.swarmcloud.net/repository/maven-releases/'
}
}
}- build.gradle に以下の依存関係を追加します:
dependencies {
implementation("com.squareup.okhttp3:okhttp:3.12.13") // Or any okhttp newer version
implementation("com.orhanobut:logger:2.2.0")
implementation("com.google.code.gson:gson:2.9.0")
implementation("com.swarmcloud:datachannel_native:latest.release")
implementation("com.swarmcloud:p2p_engine:latest.release")
}手動ダウンロード
SDKのダウンロード 最新版のAndroid SDK swarmcloud.jarとdatachannel.aar をダウンロードし、プロジェクトの libs ディレクトリにコピーしてください。
build.gradleの修正 build.gradle に以下の依存関係を追加します:
dependencies {
implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')
implementation("com.squareup.okhttp3:okhttp:3.12.13") // Or any okhttp newer version
implementation("com.orhanobut:logger:2.2.0")
implementation("com.google.code.gson:gson:2.9.0")
}TIP
エミュレーターの実行環境の問題により、実機でデバッグしてください。
クイックスタート
Application.OnCreate() でP2Pアクセラレーションサービスを起動することを推奨します。
P2pEngineの導入
import com.p2pengine.sdk.P2pEngineimport com.p2pengine.sdk.P2pEngine;P2pEngineのインスタンス化
class MyApplication : Application() {
override fun onCreate() {
super.onCreate()
val config = P2pConfig.Builder()
.trackerZone(TrackerZone.Europe) // Set HongKong or USA if you changed zone
.insertTimeOffsetTag(0.0)
.build()
P2pEngine.init(this, YOUR_TOKEN, config)
}
}class MyApplication extends android.app.Application {
protected void onCreate() {
super.onCreate();
P2pConfig config = new P2pConfig.Builder()
.trackerZone(TrackerZone.Europe) // Set HongKong or USA if you changed zone
.insertTimeOffsetTag(0.0)
.build();
P2pEngine.init(this, YOUR_TOKEN, config);
}
}YOUR_TOKEN はユーザーを識別するための文字列です。自分のtokenに置き換えてください。こちらをクリックして Appid の登録方法と token の取得方法を確認してください。
HLS/MPEG-DASHの再生
ストリーミング再生を行うには、必ずSDKを通じて再生アドレスをローカルアクセラレーションアドレスに変換し、変換後のアドレスをプレイヤーに渡す必要があります。
private void onPlay(){
val parsedUrl = P2pEngine.instance!!.parseStreamUrl(YOUR_STREAM)
mediaPlayer.play(parsedUrl);
}private void onPlay(){
String parsedUrl = P2pEngine.getInstance().parseStreamUrl(YOUR_STREAM);
mediaPlayer.play(parsedUrl);
}プレイヤーとの紐付け
Exoplayerをお使いの場合、ライブ配信シナリオでは setPlayerInteractor を通じてプレイヤーのリアルタイムフィードバックを取得することを推奨します。
P2pEngine.instance?.setPlayerInteractor(object : PlayerInteractor() {
override fun onBufferedDuration(): Long {
// Exoplayer in milliseconds
return if (player != null) {
player!!.bufferedPosition - player!!.currentPosition
} else {
-1
}
}
})P2pEngine.getInstance().setPlayerInteractor(new PlayerInteractor() {
public long onBufferedDuration() {
// Exoplayer in milliseconds
if (play != null) {
return player.getBufferedPosition() - player.getCurrentPosition();
}
return -1;
}
});サンプル
完全なサンプルプログラムはこちら
P2Pが機能しない場合のトラブルシューティング手順
よくある質問を参照してください
