Skip to content

環境設定

開発環境

Java8サポートの有効化

app/build.gradle に以下の設定を追加してJava8サポートを有効にします:

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

関連する権限を追加する

app/src/main ディレクトリ内の AndroidManifest.xml に以下の権限宣言を追加してください:

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 ファイルを更新します:

xml
<application
  ...
  android:networkSecurityConfig="@xml/network_security_config"
  ...
    />

続いて res/xml/network_security_config.xml ファイルを作成または更新します:

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" を設定し、システムがアプリに十分なヒープ領域を割り当てるようにすることを推奨します:

xml
<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の導入

kotlin
import com.p2pengine.sdk.P2pEngine
java
import com.p2pengine.sdk.P2pEngine;

P2pEngineのインスタンス化

kotlin
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)
    }
}
java
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を通じて再生アドレスをローカルアクセラレーションアドレスに変換し、変換後のアドレスをプレイヤーに渡す必要があります。

kotlin
private void onPlay(){
  val parsedUrl = P2pEngine.instance!!.parseStreamUrl(YOUR_STREAM)
  mediaPlayer.play(parsedUrl);
}
java
private void onPlay(){
  String parsedUrl = P2pEngine.getInstance().parseStreamUrl(YOUR_STREAM);
  mediaPlayer.play(parsedUrl);
}

プレイヤーとの紐付け

Exoplayerをお使いの場合、ライブ配信シナリオでは setPlayerInteractor を通じてプレイヤーのリアルタイムフィードバックを取得することを推奨します。

kotlin
P2pEngine.instance?.setPlayerInteractor(object : PlayerInteractor() {
    override fun onBufferedDuration(): Long {
        // Exoplayer in milliseconds
        return if (player != null) {
            player!!.bufferedPosition - player!!.currentPosition
        } else {
            -1
        }
    }
})
java
P2pEngine.getInstance().setPlayerInteractor(new PlayerInteractor() {
    public long onBufferedDuration() {
        // Exoplayer in milliseconds
        if (play != null) {
            return player.getBufferedPosition() - player.getCurrentPosition();
        }
        return -1;
    }
});

サンプル

完全なサンプルプログラムはこちら

P2Pが機能しない場合のトラブルシューティング手順

よくある質問を参照してください

粤ICP备18075581号