すべてのプロダクト
Search
ドキュメントセンター

ApsaraVideo Live:Android用ネイティブRTS SDK

最終更新日:Aug 29, 2024

このトピックでは、Android用Native RTS SDKをApsaraVideo Player SDKと統合して、リアルタイムストリーミング (RTS) 機能を使用する方法について説明します。

SDK 統合

次の方法を使用して、ApsaraVideo Player SDKとNative RTS SDKの依存関係を追加できます。

  • 方法1: 使用Maven

    1. ApsaraVideo Player SDKとNative RTS SDKの依存関係をプロジェクトのapp/build.gradleファイルに追加します。

      implementation 'com.aliyun.sdk.android:AlivcArtc:5.4.4.0'
      implementation 'com.aliyun.rts.android:RtsSDK:2.1.0'
      implementation 'com.aliyun.sdk.android:AliyunPlayer:5.4.4.0-full'
      説明
      • AlivcArtcRtsSDKの依存関係を追加すると、ApsaraVideo Player SDKは自動的にNative RTS SDKをプラグインとして読み込みます。

      • 上記のMaven依存関係コードで指定されたSDKバージョンは参照用です。 ApsaraVideo Player SDKの最新バージョンの詳細については、「ApsaraVideo Player SDK For Androidのリリースノート」をご参照ください。 RTS SDKの最新バージョンの詳細については、「SDKのダウンロード」をご参照ください。

      • Native RTS SDKをApsaraVideo Player SDKと統合するときは、要件が満たされていることを確認してください。 詳細については、「リリースノート」をご参照ください。

    2. MavenリポジトリのURLを追加します。

      MavenリポジトリのURLをルートディレクトリのbuild.gradleファイルに追加します。

      // The URL of the Maven repository for MPChart. If you do not need MPChart, you can delete this line of code.
      maven { url 'https://jitpack.io' }
      // The URL of the Maven repository for ApsaraVideo Player SDK and RTS SDK.
      maven { url 'http://maven.aliyun.com/nexus/content/repositories/releases' } 
  • 方法2: AARファイルを手動で追加

    1. 対応するコピー. aarファイルをapp/libsディレクトリに移動します。 AAR files

    2. 次のコードをapp/build.gradleファイルに追加します。

      dependencies{
          implementation fileTree(dir: 'libs', include: ['*.aar'])
      }

ApsaraVideo Player SDKの呼び出しメソッド

ApsaraVideo Player SDKのメソッドを呼び出して、RTS機能を使用します。 ApsaraVideo Player SDKの機能の詳細については、「高度な機能およびApsaraVideo Player SDK For AndroidのAPI操作」をご参照ください。

説明
  • 次のサンプルコードに例を示します。 完全なコードの詳細については、オープンソースプロジェクトページをご覧ください。

  • ApsaraVideo Playerに基づいてRTS経由でストリームプルを実行する場合、一時停止メソッドを呼び出してライブストリームを一時停止することはできません。 stopメソッドを呼び出してライブストリームの再生を停止し、prepareメソッドを呼び出してライブストリームを再度再生することができます。

  • seeingはサポートされていません。

  • ライブラリを読み込む

    ビジネス要件に基づいて、必要なアクティビティにSystem.loadLibrary("RtsSDK"); を追加します。

    static {
        System.loadLibrary("RtsSDK");
    }
  • プレーヤーを作成する

    AliPlayerFactoryクラスを使用してプレーヤーを作成します。 AliPlayerとAliListPlayerの2種類のプレイヤーを作成できます。 単一のストリームを再生する場合は、AliPlayerを使用します。 次のコードを実行して、AliPlayerを作成できます。

    AliPlayer aliyunVodPlayer;
    .....
    aliyunVodPlayer = AliPlayerFactory.createAliPlayer(getApplicationContext());
  • プレーヤーリスナーの設定

    ApsaraVideo Player SDKは、onPreparedやonCompletionなどのさまざまなリスナーを提供します。 次のコードを実行して、リスナーを設定できます。

    aliyunVodPlayer.setOnErrorListener(new IPlayer.OnErrorListener() {
        @Override
        public void onError(ErrorInfo errorInfo) {
            // Listens to the occurrence of errors.
        }
    });
    aliyunVodPlayer.setOnPreparedListener(new IPlayer.OnPreparedListener() {
        @Override
        public void onPrepared() {
            // Listens to successful preparation.
        }
    });
    aliyunVodPlayer.setOnVideoSizeChangedListener(new IPlayer.OnVideoSizeChangedListener() {
        @Override
        public void onVideoSizeChanged(int width, int height) {
            // Listens to the change of video resolution.
        }
    });
    aliyunVodPlayer.setOnRenderingStartListener(new IPlayer.OnRenderingStartListener() {
        @Override
        public void onRenderingStart() {
            // Listens to the display of the first frame.
        }
    });
    aliyunVodPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
        @Override
        public void onInfo(int type, long extra) {
            // Listens to other events, such as the start of loop playback, the buffer position, the current playback position, and the start of autoplay.
        }
    });
    aliyunVodPlayer.setOnLoadingStatusListener(new IPlayer.OnLoadingStatusListener() {
        @Override
        public void onLoadingBegin() {
            // Listens to the start of buffering.
        }
        @Override
        public void onLoadingProgress(int percent, float kbps) {
            // Listens to the buffering progress.
        }
        @Override
        public void onLoadingEnd() {
            // Listens to the end of buffering.
        }
    });
    aliyunVodPlayer.setOnSubtitleDisplayListener(new IPlayer.OnSubtitleDisplayListener() {
        @Override
        public void onSubtitleShow(long id, String data) {
            // Listens to the display of subtitles.
        }
        @Override
        public void onSubtitleHide(long id) {
            // Listens to the hiding of subtitles.
        }
    });
    aliyunVodPlayer.setOnTrackChangedListener(new IPlayer.OnTrackChangedListener() {
        @Override
        public void onChangedSuccess(TrackInfo trackInfo) {
            // Listens to the success of switching between audio and video streams or between resolutions.
        }
        @Override
        public void onChangedFail(TrackInfo trackInfo, ErrorInfo errorInfo) {
            // Listens to the failure of switching between audio and video streams or between resolutions.
        }
    });
    aliyunVodPlayer.setOnStateChangedListener(new IPlayer.OnStateChangedListener() {
        @Override
        public void onStateChanged(int newState) {
            // Listens to the change of player status.
        }
    });
    aliyunVodPlayer.setOnSnapShotListener(new IPlayer.OnSnapShotListener() {
        @Override
        public void onSnapShot(Bitmap bm, int with, int height) {
            // Listens to the capture of snapshots.
        }
    });
  • 再生ソースの設定

    ApsaraVideo Playerは、VidSts、VidAuth、VidMps、UrlSourceの4種類の再生ソースをサポートしています。 UrlSourceは、URLベースの再生に使用されます。 UrlSourceを使用する場合、RTS機能を使用するには、URLのプレフィックスにartc:// を付ける必要があります。

    UrlSource urlSource = new UrlSource();
    urlSource.setUri("artc://<Streaming URL>");
    aliyunVodPlayer.setDataSource(urlSource);
  • ユーザーインターフェイス (UI) ビューを設定する

    再生ソースにビデオ画像が含まれている場合は、ビデオ画像を表示するようにUIビューを設定する必要があります。 SurfaceViewとTextureViewがサポートされています。 SurfaceViewのサンプルコード:

    surfaceView = (SurfaceView) findViewById(R.id.playview);
    surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {
        @Override
        public void surfaceCreated(SurfaceHolder holder) {
            aliyunVodPlayer.setDisplay(holder);
        }
        @Override
        public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
            aliyunVodPlayer.surfaceChanged();
        }
        @Override
        public void surfaceDestroyed(SurfaceHolder holder) {
            aliyunVodPlayer.setDisplay(null);
        }
    });
  • 再生コントロールの設定

    再生コントロールを実装するには、再生コントロールボタンを作成し、クリックイベントを再生コントロールメソッドに関連付ける必要があります。 基本的な制御機能には、再生と停止が含まれます。 サンプルコード:

    // Prepare for playback. You can specify the start() method in the callback so that the playback starts upon the completion of preparation.
    aliyunVodPlayer.prepare();
    // Start playback.
    aliyunVodPlayer.start();
    // Stop playback.
    aliyunVodPlayer.stop();
    // Reset the player.
    aliyunVodPlayer.reset();
    // Release the player. The player cannot be used after it is released.
    aliyunVodPlayer.release();
  • 再生パラメータの設定

    再生パラメーターを設定して、RTS効果を改善できます。

    // Query the configurations.
    PlayerConfig config = mAliyunVodPlayer.getConfig();
    // Set the maximum latency to 1 second. The Alibaba Real-Time Communication (ARTC) protocol controls the latency.
    config.mMaxDelayTime = 1000;
    // Set the buffer period to 10 milliseconds. The ARTC protocol controls the buffer period. 
    config.mHighBufferDuration = 10;
    config.mStartBufferDuration = 10;
    .... // Configure other settings.
    // Load the settings for the player.
    mAliyunVodPlayer.setConfig(config);
  • ロギングの有効化または無効化

    // Enable logging.
    Logger.getInstance(context).enableConsoleLog(true);
    Logger.getInstance(context).setLogLevel(Logger.LogLevel.AF_LOG_LEVEL_TRACE);
    // Disable logging.
    Logger.getInstance(context).enableConsoleLog(false);
    Logger.getInstance(context).setLogLevel(Logger.LogLevel.AF_LOG_LEVEL_NONE); 
  • ライブストリーミングに劣化したプロトコルを使用する

    ソースURLのプレフィックスをartc:// からHTTP-FLV形式に変更し、ApsaraVideo PlayerでUrlSourceを更新できます。 これにより、劣化したプロトコルを使用してライブストリームを再生できます。

    /**
     * Configure the degradation policy.
     */
    private void willBeDemoted() {
        mRtsAliPlayer.stop();
        if (mUrl.startsWith("artc://")) {
            setDataSource("http://xxxx.flv");
            mRtsAliPlayer.prepare();
        }
    }
  • TraceIdの取得

    再生コンポーネントによって渡されたメッセージがプレーヤーイベントのコールバックで返されたら、プレーヤーイベントを説明するJSON文字列を解析します。 取得するコードは、RTS SDKのメッセージです。 E_HELP_SUPPORT_ID_SUBSCRIBEを受け取ったら、文字列の "-sub-" の後の部分を解析してTraceIdを取得します。

    private static final int TRACE_ID_CODE = 104;
    
    // 1. Listen to the onInfo callback and parse the RTS event message.
    mRtsAliPlayer.setOnInfoListener(infoBean -> {
        if (infoBean.getCode() == InfoCode.DirectComponentMSG) {
            String extraMsg = infoBean.getExtraMsg();
            parseDirectComponentMSG(extraMsg);
        }
    });
    
    private void parseDirectComponentMSG(String msg) {
        if (msg.contains("code=" + TRACE_ID_CODE)) {
            parseTraceId(msg);
        }
    }
    
    /**
     * Parse the TraceId.
     */
    private void parseTraceId(String msg) {
        String[] split = msg.split("-sub-");
        if (split.length >= 1) {
            mTraceId = "RequestId:" + (split[1].substring(0, split[1].length() - 1));
            mTraceId = mTraceId.replace("\"", "").replace("\\", "");
        }
    }