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

ApsaraVideo Live:Android用プッシュSDKを使用する

最終更新日:Sep 06, 2024

このトピックでは、Push SDK for Androidを使用する方法と、SDKのクラスとメソッドについて説明します。 このトピックでは、Push SDK for Androidが提供する機能の使用例についても説明します。 このトピックを読むことで、SDKをライブストリーミングに使用する方法をよりよく理解できます。

説明

モバイルデバイスでストリームを取り込む方法の詳細については、「ストリーム取り込み、ストリームプル、およびストリーミング」をご参照ください。

特徴

  • RTMP (Real-Time Messaging Protocol) によるストリーム取り込みをサポートします。

  • リアルタイム通信 (RTC) に基づくリアルタイムストリーミング (RTS) プロトコルを介したストリームの取り込みとストリームのプルをサポートします。

  • 共同ストリーミングと戦闘をサポートします。

  • ビデオエンコーディングにH.264、オーディオエンコーディングにAdvanced Audio Coding (AAC) を採用します。

  • ビットレート制御、解像度、表示モードなどの機能のカスタム設定をサポートします。

  • さまざまなカメラ操作をサポートします。

  • リアルタイムのレタッチをサポートし、レタッチ効果を調整できます。

  • アニメーションステッカーをアニメーション透かしとして追加し、アニメーションステッカーを削除できます。

  • 画面録画をストリーミングできます。

  • YUVやパルス符号変調 (PCM) など、さまざまな形式の外部オーディオおよびビデオ入力をサポートします。

  • 複数のストリームの混合をサポートします。

  • オーディオのみとビデオのみのストリームの取り込みと、バックグラウンドでのストリーム取り込みをサポートします。

  • バックグラウンドミュージックをサポートし、バックグラウンドミュージックを管理できます。

  • ビデオスナップショットのキャプチャをサポートします。

  • 自動再接続とエラー処理をサポートします。

  • オーディオ3Aアルゴリズムをサポートします。

  • ビデオファイルのソフトウェアとハードウェアのエンコードモードを切り替えることができます。 これは、符号化モジュールの安定性を改善します。

Android用プッシュSDKのクラス

クラス

説明

AlivcLivePushConfig

ストリーム取り込み設定のクラス。The class for stream ingest settings.

AlivcLivePusher

ストリーム取り込み機能のクラス。The class for stream ingest features.

AlivcLivePusherErrorListener

エラーコールバックのクラス。

AlivcLivePusherNetworkListener

ネットワークコールバックのクラス。

AlivcLivePusherInfoListener

ストリーム取り込みコールバックのクラスです。

AlivcLivePusherBGMListener

BGMコールバックのクラス。

AlivcLivePushCustomFilter

カスタムフィルターのコールバックのクラス。

AlivcLivePushCustomDetect

カスタム顔検出コールバックのクラス。

AlivcSnapshotListener

スナップショットコールバックのクラス。

制限事項

Push SDK for Androidを使用する前に、次の制限事項に注意してください。

  • ストリームの取り込み前に画面の向きを設定する必要があります。 ライブストリーミング中は画面を回転できません。

  • ランドスケープモードでのストリーム取り込みの自動画面回転を無効にする必要があります。

  • ハードウェア符号化モードでは、出力解像度の値は、エンコーダと互換性があるように16の倍数でなければならない。 たとえば、解像度を540pに設定すると、出力解像度は544 × 960になります。 黒いバーを防ぐために、出力解像度に基づいてプレーヤーの画面サイズをスケーリングする必要があります。

手順

次の表に、Push SDK for Androidの基本エディションの使用方法を示します。

ステップ

説明

関連ドキュメント

1. SDKを登録します。

ライセンス関連のパラメーターを設定して、Push SDK for Androidを登録します。 登録機能を呼び出さない場合、ストリーム取り込み機能は使用できません。

SDKの登録

2. ストリーム取り込みパラメーターを設定します。

基本パラメータ、ビットレート制御モード、適応解像度機能、レタッチ機能などのストリーム取り込み設定を完了します。

ストリーム取り込みパラメーターの設定 (基本版)

3. Android用プッシュSDKを使用してストリームを取り込みます。

Push SDK for Androidを初期化し、ストリーム取り込みコールバックを登録し、プレビュービューを作成した後、ストリームの取り込みを開始できます。 ビジネス要件に基づいて、ストリームの管理、BGMの設定、カメラ設定の設定、外部オーディオソースの取り込み、アニメーションステッカーの追加を行うことができます。

重要
  • ストリームの取り込みを開始する前に、SDKを初期化し、プレビュービューを作成する必要があります。

  • ApsaraVideo Liveでは、複数のストリームを同時にURLに取り込むことはできません。 複数のストリームを同時に取り込む場合、最初のストリームのみが取り込まれます。

Push SDK for Androidを使用してストリームを取り込む (基本版)

4. (オプション) 画面録画のストリーム取り込みを設定します。

画面録画をストリーミングする場合は、画面録画のストリーム取り込みを設定します。

画面録画のストリーム取り込みの設定 (基本版)

次の表に、Push SDK for Androidのインタラクティブエディションの使用方法を示します。

ステップ

説明

関連ドキュメント

1. SDKを登録します。

ライセンス関連のパラメーターを設定して、Push SDK for Androidを登録します。 登録機能を呼び出さない場合、ストリーム取り込み機能は使用できません。

SDKの登録

2. コストリーミング設定を構成します。

コストリーミング設定を設定すると、Android用Push SDKのインタラクティブエディションを使用することで、ストリーマーとビューアは300ミリ秒未満の超低レイテンシで相互作用できます。

コストリーミング設定の設定 (インタラクティブエディション)

SDKの登録

Push SDK for Android V4.4.2以降では、オールインワンライセンスが使用されます。 ストリーム取り込み機能を使用する前に、Push SDK for Androidを登録する必要があります。 詳細については、「プッシュSDKライセンスの統合」をご参照ください。

ストリーム取り込みパラメーターの設定 (基本版)

AlivcLivePushConfigクラスを使用して、ストリーム取り込みパラメーターを設定できます。 各パラメーターにはデフォルト値が設定されてます。 ビジネス要件に基づいてパラメーターの値を変更できます。 各パラメーターのデフォルト値と有効な値の詳細については、 Push SDK for Android V6.9.0 (基本版) のAPIリファレンスまたはPush SDK for Android V6.9.0 (インタラクティブ版) のAPIリファレンスをご参照ください。

説明

ストリームの取り込み中にこれらのパラメーターをリアルタイムで変更するには、AlivcLivePusherクラスで提供されるメソッドを参照してください。

  1. 基本的なストリーム取り込み設定を完了します。

    基本的なストリーム取り込み設定に使用されるすべてのパラメータにはデフォルト値があります。 デフォルト値の使用を推奨します。

    サンプルコード

    Sample code
    // Initialize the class for stream ingest configurations.
    mAlivcLivePushConfig = new AlivcLivePushConfig();
    // Specify the stream ingest mode. By default, the regular stream ingest mode is used.
    mAlivcLivePushConfig.setLivePushMode(AlivcLiveMode.AlivcLiveBasicMode);
    // Specify the resolution. The default resolution is 540p.
    mAlivcLivePushConfig.setResolution(AlivcResolutionEnum.RESOLUTION_540P);
    // Specify the frame rate. The default frame rate is 20 frames per second (FPS).
    mAlivcLivePushConfig.setFps(AlivcFpsEnum.FPS_25);
    // Specify the group of pictures (GOP) size. Unit: seconds. The default GOP size is 2 seconds.
    mAlivcLivePushConfig.setVideoEncodeGop(AlivcVideoEncodeGopEnum.GOP_TWO);
    // Specify whether to enable adaptive bitrate streaming. The default value is true.
    mAlivcLivePushConfig.setEnableBitrateControl(true);
    // Specify the screen orientation. The default screen orientation is portrait. You can configure the settings that allow you to press the Home key to change the orientation to landscape left or landscape right.
    mAlivcLivePushConfig.setPreviewOrientation(AlivcPreviewOrientationEnum.ORIENTATION_PORTRAIT);
    // Specify the audio encoding format. The default format is AAC-LC.
    mAlivcLivePushConfig.setAudioProfile(AlivcAudioAACProfileEnum.AAC_LC);
    // Specify the video encoding mode. By default, hardware encoding is used.
    mAlivcLivePushConfig.setVideoEncodeMode(AlivcEncodeModeEnum.Encode_MODE_HARD);
    // Specify the audio encoding mode. By default, software encoding is used.
    mAlivcLivePushConfig.setAudioEncodeMode(AlivcEncodeModeEnum.Encode_MODE_SOFT);
    // Specify whether to use the front camera or the rear camera. By default, the front camera is used.
    mAlivcLivePushConfig.setCameraType(AlivcLivePushCameraTypeEnum.CAMERA_TYPE_FRONT);
    // Specify the image that is ingested when your app is switched to the background or video stream ingest is paused.
    mAlivcLivePushConfig.setPausePushImage("TODO: Image Path");
    // Specify the image that is ingested in poor network conditions.
    mAlivcLivePushConfig.setNetworkPoorPushImage("TODO: Image Path");
    重要
    • 携帯電話のパフォーマンスとネットワーク帯域幅要件に基づいて、解像度を540pに設定することを推奨します。 ほとんどの場合、ライブストリーミング用の主流アプリは540pを使用します。

    • 適応ビットレートストリーミングが無効になっている場合、ビットレートは初期値に固定され、指定されたターゲットビットレートと最小ビットレートの間で自動的に調整されません。 この場合、ネットワークが不安定なときに吃音が発生する可能性があります。 この機能を無効にする前に注意してください。

  2. ビットレート制御モードを指定します。

    AlivcQualityModeEnumパラメーターを設定して、ビットレート制御モードを指定できます。 Push SDK for Androidは、複数のビットレート制御モードを提供します。 ビジネス要件に基づいて各パラメーターの値を指定します。 次の表に、ビットレート制御モードを示します。

    ビットレート制御モード

    説明

    サンプルコード

    QM_RESOLUTION_FIRST

    品質-最初のモード。 Push SDK for Androidは、ビデオストリームの品質を優先するようにビットレートパラメータを設定します。

    mAlivcLivePushConfig.setQualityMode(AlivcQualityModeEnum.QM_RESOLUTION_FIRST); // Set the mode to quality-first.

    QM_FLUENCY_FIRST

    滑らかさ-最初のモード。 Push SDK for Androidは、ビデオストリームの滑らかさを優先するビットレートパラメータを設定します。

    mAlivcLivePushConfig.setQualityMode(AlivcQualityModeEnum.QM_FLUENCY_FIRST);// Set the mode to smoothness-first.

    QM_CUSTOM

    カスタムモード。 Push SDK for Androidは、カスタム設定に基づいてビットレートパラメータを設定します。 カスタムモードを使用する場合は、ビジネス要件に基づいてquality-firstまたはsmoothness-firstを選択し、初期ビットレート、最小ビットレート、および目標ビットレートを指定できます。

    • initialVideoBitrate: ライブストリーム開始時の初期ビットレート。

    • minVideoBitrate: 悪いネットワーク条件では、ビットレートは吃音を防ぐために最小ビットレートまで徐々に低下します。

    • targetVideoBitrate: 良好なネットワーク条件では、ビデオストリームの品質を向上させるために、ビットレートがターゲットビットレートまで徐々に増加します。

    mAlivcLivePushConfig.setQualityMode(AlivcQualityModeEnum.QM_CUSTOM);
    mAlivcLivePushConfig.setTargetVideoBitrate(1000); // The target bitrate is 1,000 Kbit/s.
    mAlivcLivePushConfig.setMinVideoBitrate(300); // The minimum bitrate is 300 Kbit/s.
    mAlivcLivePushConfig.setInitialVideoBitrate(800); // The initial bitrate is 800 Kbit/s.
    説明
    • quality-firstまたはsmoothness-firstモードを使用する場合、initialVideoBitrate、minVideoBitrate、およびtargetVideoBitrateパラメーターを設定する必要はありません。 Push SDKは、ネットワークジッタが発生したときにビデオストリームの品質または滑らかさを保証します。

    • カスタムモードを使用する場合は、推奨設定に基づいてビットレートパラメータを設定します。 推奨設定を次の表に示します。

    表 1. 推奨設定のカスタムビットレート品質-ファーストモード

    解像度

    initialVideoBitrate

    minVideoBitrate

    targetVideoBitrate

    360p

    600

    300

    1000

    480p

    800

    300

    1,200

    540p

    1000

    600

    1400

    720p

    1500

    600

    2000

    1080p

    1800

    1,200

    2,500

    表 2. 滑らかさ-ファーストモードでのカスタムビットレートの推奨設定

    解像度

    initialVideoBitrate

    minVideoBitrate

    targetVideoBitrate

    360p

    400

    200

    600

    480p

    600

    300

    800

    540p

    800

    300

    1000

    720p

    1000

    300

    1,200

    1080p

    1500

    1,200

    2200

  3. アダプティブ解決機能を設定します。

    適応解像度機能は、ストリームの解像度を動的に調整するために使用されます。 アダプティブ解像度機能を有効にすると、解像度が自動的に低下し、劣悪なネットワーク条件でビデオストリームの滑らかさと品質が保証されます。 サンプルコード:

    mAlivcLivePushConfig.setEnableAutoResolution(true); // Specify whether to enable adaptive resolution. The default value is false.
    重要
    • アダプティブ解決機能は、すべてのプレイヤーでサポートされていません。 この機能を使用する必要がある場合は、ApsaraVideo Playerを使用することを推奨します。

    • アダプティブ解像度機能は、AlivcQualityModeEnumパラメーターを設定することにより、quality-firstモードまたはsmoothness-firstモードを使用する場合にのみ有効になります。 カスタムモードを使用する場合、この機能は使用できません。

  4. レタッチ機能を設定します。

    Push SDK for Androidでレタッチ機能を使用するには、レタッチライブラリをインポートしてコールバックを設定する必要があります。

    1. Maven依存関係を使用してレタッチライブラリとレタッチパネルをインポートします。 プロジェクトのbuild.gradleファイルに次のコードを追加し、最新バージョンのQueen SDKのデモを指定します

      implementation "com.aliyun.maliang.android:queen:2.5.0-official-full"
      implementation("com.aliyun.maliang.android:queen_menu:2.5.0-official-full") {
          exclude group: 'com.aliyun.maliang.android', module: 'queen'
      }

      次の表では、統合できるデモで提供されているLiveBeautyモジュールについて説明します。

      ファイルまたはフォルダ

      説明

      live_beauty

      レタッチ用の抽象クラス。

      queen_beauty

      レタッチ用のユーザーインターフェイス (UI) ウィジェット。

    2. 顔認識とレタッチのコールバックを設定します。

      サードパーティのレタッチライブラリにアクセスする場合は、setCustomDetectコールバックとsetCustomFilterコールバックを設定できます。

      • AlivcLivePushCustomDetectのcustomDetectProcessコールバックによって返されるdataパラメーターは、データを収集するためのポインターとして使用されます。 コールバックには、long data、int width、int height、int rotation、int format、およびlong extraパラメーターが含まれます。 サードパーティのレタッチライブラリは、返されたデータを識別または処理できます。

      • AlivcLivePushCustomFilterのcustomFilterProcessコールバックによって返されるinputTextureパラメーターは、サードパーティのレタッチライブラリで処理できる画像テクスチャを指定します。 コールバックには、int inputTexture、inttextureWidth、int textureHeight、およびlong extraパラメーターが含まれます。 処理されたテクスチャを返す場合は、テクスチャIDが返されます。 それ以外の場合、inputTextureの値が返されます。

      サンプルコード

      /**
       * The callback for facial recognition.
       */
      mAlivcLivePusher.setCustomDetect(new AlivcLivePushCustomDetect() {
          @Override
          public void customDetectCreate() {
      
          }
      
          @Override
          public long customDetectProcess(long dataPtr, int width, int height, int rotation, int format, long extra) {
              return 0;
          }
      
          @Override
          public void customDetectDestroy() {
      
          }
      });
      
      /**
       * The callback for retouching.
       */
      mAlivcLivePusher.setCustomFilter(new AlivcLivePushCustomFilter() {
          @Override
          public void customFilterCreate() {
              initBeautyManager();
          }
      
          @Override
          public int customFilterProcess(int inputTexture, int textureWidth, int textureHeight, long extra) {
              if (mBeautyManager == null) {
                  return inputTexture;
              }
      
              return mBeautyManager.onTextureInput(inputTexture, textureWidth, textureHeight);
          }
      
          @Override
          public void customFilterDestroy() {
              destroyBeautyManager();
          }
      });
  5. 背景ストリーム取り込み用の画像を指定します。

    Push SDK for Androidを使用すると、アプリがバックグラウンドに切り替えられたとき、またはビットレートが低いときに画像を取り込むことができます。 ユーザーエクスペリエンスが向上します。 アプリをバックグラウンドに切り替えると、ビデオストリームの取り込みが一時停止されます。 この場合、オーディオストリームのみが取り込まれる。 取り込みたいイメージを指定することもできます。 たとえば、次のようなメッセージを含む画像を取り込むことができます。The streamer will be back soon. は視聴者に通知するために表示されます。 サンプルコード:

    mAlivcLivePushConfig.setPausePushImage("The path of the specified image in the PNG format for stream ingest"); // Specify the image for stream ingest when your app is switched to the background.

    ネットワーク条件が悪い場合は、ストリーム取り込み用の静的イメージを指定できます。 ビットレートが低い場合は、吃音を防ぐために指定した画像が取り込まれます。 サンプルコード:

    mAlivcLivePushConfig.setNetworkPoorPushImage("The path of the specified image that is ingested in poor network conditions");// Specify the image for stream ingest in poor network conditions.
  6. 透かしを設定します。

    Push SDK for Androidを使用すると、1つ以上の透かしを追加できます。 透かしはPNG形式でなければなりません。 サンプルコード:

    mAlivcLivePushConfig.addWaterMark(waterPath,0.1,0.2,0.3); // Add a watermark.
    説明
    • x、y、およびwidthパラメータの値は相対的なものです。 たとえば、xパラメータの値0.1は、透かしの左端がストリームのx軸上の10% 位置にあることを示します。 したがって、ストリーム解像度が540 × 960である場合、xパラメータの値は54である。

    • 透かしの高さは、ソース画像の幅および高さ、ならびに透かしの入力幅値に基づいてスケーリングされる。

    • テキスト透かしを追加する場合は、テキストを画像に変換し、addWaterMarkメソッドを呼び出して画像を透かしとして追加します。

  7. プレビューモードを指定します。

    Push SDK for Androidは、次のプレビューモードをサポートしています。 プレビューモードは、ストリーム取り込みには影響しません。

    • AlivcPreviewDisplayMode.ALIVC_LIVE_PUSHER_PREVIEW_SCALE_FILL: このモードでは、ビデオはプレビューウィンドウ全体に表示されます。 ビデオのアスペクト比がプレビューウィンドウのアスペクト比と同じでない場合、プレビュー中に変形が発生します。

    • AlivcPreviewDisplayMode.ALIVC_LIVE_PUSHER_PREVIEW_ASPECT_FIT: このモードでは、プレビュー時にビデオの元のアスペクト比が使用されます。 ビデオのアスペクト比がプレビューウィンドウのアスペクト比と同じでない場合、プレビューウィンドウに黒いバーが表示されます。

    • AlivcPreviewDisplayMode.ALIVC_LIVE_PUSHER_PREVIEW_ASPECT_FILL: このモードでは、プレビュー中にビデオがプレビューウィンドウに合うようにトリミングされます。 ビデオのアスペクト比がプレビューウィンドウのアスペクト比と同じでない場合、ビデオはトリミングされます。

    サンプルコード:

    mAlivcLivePushConfig.setPreviewDisplayMode(AlivcPreviewDisplayMode.ALIVC_LIVE_PUSHER_PREVIEW_ASPECT_FIT);

Android用プッシュSDKを使用してストリームを取り込む (基本版)

AlivcLivePusherは、Android用Push SDKのコアクラスです。 このクラスは、初期化、ストリーム取り込みコールバック、カメラプレビュー、およびストリーム取り込み管理のパラメーターを提供します。 このクラスを使用して、ストリームの取り込み中にパラメーターを変更することもできます。

説明
  • クラスでメソッドを使用する場合は、try-catchステートメントを実行して例外を管理します。

  • 指定した順序でメソッドを呼び出す必要があります。 メソッドを無効な順序で呼び出すと、エラーが発生する可能性があります。

  1. AlivcLivePusherクラスを初期化します。

    ストリーム取り込みパラメーターを設定した後、initメソッドを呼び出してクラスを初期化します。 サンプルコード:

    AlivcLivePusher mAlivcLivePusher = new AlivcLivePusher();
    mAlivcLivePusher.init(mContext, mAlivcLivePushConfig);
    説明

    AlivcLivePusherクラスは複数のインスタンスをサポートしていません。 したがって、initメソッドの呼び出しごとにdestroyメソッドを1回呼び出す必要があります。

  2. ストリーム取り込みコールバックを登録します。

    次のストリーム取り込みコールバックがサポートされています。

    • Info: 通知とステータス検出に使用されるコールバック。

    • エラー: エラーが発生したときに返されるコールバック。

    • ネットワーク: ネットワークに関連するコールバック。

    イベントが発生すると、対応するコールバックがトリガーされ、イベントが通知されます。 サンプルコード:

    ストリーム取り込みエラーのコールバックを設定する

    /**
     * Configure the callbacks for stream ingest errors.
     *
     * @param errorListener The listener for errors.
     */
    mAlivcLivePusher.setLivePushErrorListener(new AlivcLivePushErrorListener() {
        @Override
        public void onSystemError(AlivcLivePusher livePusher, AlivcLivePushError error) {
            if (error != null) {
                // Add UI notifications or custom error solutions.
            }
        }
    
        @Override
        public void onSDKError(AlivcLivePusher livePusher, AlivcLivePushError error) {
            if (error != null) {
                // Add UI notifications or custom error solutions.
            }
        }
    });
                            

    ストリーム取り込み関連の通知のコールバックを設定する

    /**
     * Configure the callbacks for stream ingest-related notifications.
     *
     * @param infoListener The listener for notifications.
     */
    mAlivcLivePusher.setLivePushInfoListener(new AlivcLivePushInfoListener() {
        @Override
        public void onPreviewStarted(AlivcLivePusher pusher) {
            // Notifies that preview starts.
        }
    
        @Override
        public void onPreviewStoped(AlivcLivePusher pusher) {
            // Notifies that preview ends.
        }
    
        @Override
        public void onPushStarted(AlivcLivePusher pusher) {
            // Notifies that stream ingest starts.
        }
    
        @Override
        public void onFirstAVFramePushed(AlivcLivePusher alivcLivePusher) {
            // Notifies that the first audio and video packet is sent.
        }
    
        @Override
        public void onPushPauesed(AlivcLivePusher pusher) {
            // Notifies that stream ingest is paused.
        }
    
        @Override
        public void onPushResumed(AlivcLivePusher pusher) {
            // Notifies that stream ingest is resumed.
        }
    
        @Override
        public void onPushStoped(AlivcLivePusher pusher) {
            // Notifies that stream ingest ends.
        }
    
        @Override
        public void onPushRestarted(AlivcLivePusher pusher) {
            // Notifies that stream ingest is restarted.
        }
    
        @Override
        public void onFirstFramePreviewed(AlivcLivePusher pusher) {
            // Notifies that the first frame is rendered.
        }
    
        @Override
        public void onDropFrame(AlivcLivePusher pusher, int countBef, int countAft) {
            // Notifies that frames are missing.
        }
    
        @Override
        public void onAdjustBitRate(AlivcLivePusher pusher, int curBr, int targetBr) {
            // Notifies that the bitrate is adjusted.
        }
    
        @Override
        public void onAdjustFps(AlivcLivePusher pusher, int curFps, int targetFps) {
            // Notifies that the frame rate is adjusted.
        }
    
        @Override
        public void onPushStatistics(AlivcLivePusher alivcLivePusher, AlivcLivePushStatsInfo alivcLivePushStatsInfo) {
            // The callback for data statistics about ingested streams. This callback is returned every 2 seconds.
        }
    
        @Override
        public void onSetLiveMixTranscodingConfig(AlivcLivePusher alivcLivePusher, boolean isSuccess, String msg) {
            // The callback for cloud-based stream mixing (transcoding), which corresponds to the setLiveMixTranscodingConfig method. This callback takes effect only in interactive mode.
        }
    });

    ネットワーク関連の通知のコールバックの設定

    Configure the callbacks for network-related notifications
    /**
     * Configure the callbacks for network-related notifications.
     *
     * @param infoListener The listener for notifications.
     */
    mAlivcLivePusher.setLivePushNetworkListener(new AlivcLivePushNetworkListener() {
        @Override
        public void onNetworkPoor(AlivcLivePusher pusher) {
            // Notifies that the network is in poor conditions.
        }
    
        @Override
        public void onNetworkRecovery(AlivcLivePusher pusher) {
            // Notifies that the network is recovered.
        }
    
        @Override
        public void onReconnectStart(AlivcLivePusher pusher) {
            // Notifies that the reconnection starts.
        }
    
        @Override
        public void onConnectionLost(AlivcLivePusher alivcLivePusher) {
            // Notifies that the network is disconnected.
        }
    
        @Override
        public void onReconnectFail(AlivcLivePusher pusher) {
            // Notifies that the reconnection failed.
        }
    
        @Override
        public void onReconnectSucceed(AlivcLivePusher pusher) {
            // Notifies that the reconnection is successful.
        }
    
        @Override
        public void onSendDataTimeout(AlivcLivePusher pusher) {
            // Notifies that data transmission timed out.
        }
    
        @Override
        public void onConnectFail(AlivcLivePusher pusher) {
            // Notifies that the connection failed.
        }
    
        @Override
        public String onPushURLAuthenticationOverdue(AlivcLivePusher alivcLivePusher) {
            // Notifies that the authentication expires.
            return null;
        }
    
        @Override
        public void onSendMessage(AlivcLivePusher alivcLivePusher) {
            // Notifies that the supplemental enhancement information (SEI) message is sent.
        }
    
        @Override
        public void onPacketsLost(AlivcLivePusher alivcLivePusher) {
            // The callback for packet loss during stream ingest.
        }
    });

    バックグラウンドミュージックに関連する通知のコールバックを設定する

    Configure the callbacks for notifications related to background music
    /**
     * Configure the callbacks for notifications related to background music.
     *
     * @param pushBGMListener The listener for notifications related to background music.
     */
    mAlivcLivePusher.setLivePushBGMListener(new AlivcLivePushBGMListener() {
        @Override
        public void onStarted() {
            // Notifies that the playback of background music starts.
        }
    
        @Override
        public void onStoped() {
            // Notifies that the playback of background music stops.
        }
    
        @Override
        public void onPaused() {
            // Notifies that the playback of background music is paused.
        }
    
        @Override
        public void onResumed() {
            // Notifies that the playback of background music is resumed.
        }
    
        @Override
        public void onProgress(long l, long l1) {
            // Notifies you of the playback progress.
        }
    
        @Override
        public void onCompleted() {
            // Notifies that the playback of background music ends.
        }
    
        @Override
        public void onDownloadTimeout() {
            // Notifies that the playback of background music timed out.
        }
    
        @Override
        public void onOpenFailed() {
            // Notifies that the stream is invalid.
        }
    });
  3. プレビューを開始します。

    livePusherオブジェクトを初期化し、コールバックを設定した後、プレビューを開始できます。 カメラのプレビューにSurfaceViewパラメータを使用します。 サンプルコード:

    mAlivcLivePusher.startPreview(mSurfaceView)// Start preview. You can also call the asynchronous method startPreviewAysnc to start preview based on your business requirements.
    重要

    バックグラウンドミュージックやカメラコントロールのメソッドなど、プレビューの設定後にのみ呼び出すことができます。 ストリーム取り込みを開始する前にプレビューを実行することを推奨します。

  4. ストリームの取り込みを開始します。

    プレビューが成功した後にのみ、ストリームの取り込みを開始できます。 したがって、onPreviewStartedコールバックを設定し、次のコードをコールバックに追加する必要があります。

    mAlivcLivePusher.startPush(mPushUrl);
    説明
    • Android用Push SDKを使用すると、startPushAsyncを呼び出して非同期でストリームの取り込みを開始できます。

    • Push SDK for Androidは、RTMP形式とRTS形式の取り込みURLをサポートしています。 RTMPフォーマットの取り込みURLと比較して、RTSフォーマットの取り込みURLは、改善された安定性を提供し、劣悪なネットワーク条件でより良好に動作する。 取り込みURLをRTS形式で使用することを推奨します。 RTMP形式とRTS形式の取り込みURLの比較、およびRTS経由でストリームを取り込む方法の詳細については、「プッシュSDKを使用してRTS経由でストリームを取り込む」をご参照ください。

    • 有効な取り込みURLを使用してストリームの取り込みを開始した後、ApsaraVideo player、FFplay、VLCなどのプレーヤーを使用してストリームのプルをテストできます。 ストリーミングURLの取得方法については、「取り込みURLとストリーミングURLの生成」をご参照ください。

  5. 他のストリーム取り込み設定を完了します。

    Push SDK for Androidを使用すると、ストリームの取り込みを管理できます。 たとえば、ストリーム取り込みの開始、停止、再起動、一時停止、再開、ストリーム取り込みインスタンスのプレビューの停止、および破棄ができます。 これらの操作を実行するボタンを追加できます。

    サンプルコード

    /* Pause a stream that is being ingested. For a stream that is being ingested, the video preview and video stream ingest are paused at the last frame, and the audio stream continues to be ingested. */
    mAlivcLivePusher.pause();
    /* Resume stream ingest. After you resume stream ingest, the preview and ingest of audio and video streams are resumed. */
    mAlivcLivePusher.resume();
    /* Stop a stream that is being ingested. */
    mAlivcLivePusher.stopPush();
    /* Stop preview. This operation does not take effect for a stream that is being ingested. When preview is stopped, the preview window is frozen at the last frame. */
    mAlivcLivePusher.stopPreview();
    /* Restart stream ingest when the stream is being ingested or when an error callback is fired. If an error occurs, you can call only this method or the reconnectPushAsync method to restart stream ingest. You can also call the destroy method to destroy the stream ingest instance. Then, you can restart all ALivcLivePusher resources that are required for operations, such as preview and stream ingest. */
    mAlivcLivePusher.restartPush();
    /* Call this method when the stream is being ingested or when an error callback related to AlivcLivePusherNetworkDelegate is fired. If an error occurs, you can call only this method or the restartPush method to restart stream ingest. You can also call the destroy method to destroy the stream ingest instance. Then, you can restart stream ingest over RTMP. */
    mAlivcLivePusher.reconnectPushAsync();
    /* Destroy the stream ingest instance. After you call this method, stream ingest and preview are stopped, and the preview window is removed. All resources related to AlivcLivePusher are destroyed. */
    mAlivcLivePusher.destroy();
  6. バックグラウンドミュージックを管理します。

    Android用プッシュSDKを使用すると、バックグラウンドミュージックを管理できます。 たとえば、バックグラウンドミュージックの再生、オーディオミキシング、ノイズリダクション、インイヤーモニタリング、ミュートなどの機能を設定できます。 サンプルコード:

    /* Start the playback of background music. */
    mAlivcLivePusher.startBGMAsync(mPath);
    /* Stop the playback of background music. If you want to change the background music, call the method that is used to start the playback of background music. You do not need to stop the playback of the current background music. */
    mAlivcLivePusher.stopBGMAsync();
    /* Pause the playback of background music. You can call this method only after the playback of background music starts. */
    mAlivcLivePusher.pauseBGM();
    /* Resume the playback of background music. You can call this method only after the playback of background music is paused. */
    mAlivcLivePusher.resumeBGM();
    /* Enable looping. */
    mAlivcLivePusher.setBGMLoop(true);
    /* Configure noise reduction. If you enable noise reduction, the system filters out non-vocal parts from the collected audio. This feature may slightly reduce the volume of the human voice. We recommend that you allow your users to determine whether to enable this feature. By default, this feature is disabled. */
    mAlivcLivePusher.setAudioDenoise(true);
    /* Configure in-ear monitoring. In-ear monitoring is suitable for scenarios that involve karaoke. If you enable in-ear monitoring, you can hear your voice on your earphones during streaming. If you disable in-ear monitoring, you cannot hear your voice on your earphones during streaming. This feature does not take effect if no earphones are detected. */
    mAlivcLivePusher.setBGMEarsBack(true);
    /* Configure audio mixing. You can adjust the volumes of the background music and human voice. */
    mAlivcLivePusher.setBGMVolume(50); // Specify the volume of the background music.
    mAlivcLivePusher.setCaptureVolume(50); // Specify the volume of the human voice.
    /* Configure muting. If you enable this feature, the background music and human voice are muted. To separately mute the background music or human voice, call the method that is used to configure audio mixing. */
    mAlivcLivePusher.setMute(true);
    重要

    メソッドを呼び出してバックグラウンドミュージックを管理できるのは、プレビューの開始後のみです。

  7. ストリーム取り込みスナップショットを設定します。

    Android用Push SDKを使用すると、ローカルのビデオストリームのスナップショットをキャプチャできます。 サンプルコード:

    // Configure the video stream snapshots by setting relevant parameters, including the number of snapshots, the interval between two snapshots, and the callback.
    pusher.snapshot(1, 1, new AlivcSnapshotListener() {
        @Override
        public void onSnapshot(Bitmap bmp) {
                // You can dump each snapshot as a local PNG file. Sample code:
            String dateFormat = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss-SS").format(new Date());
            File f = new File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "snapshot-" + dateFormat + ".png");
            if (f.exists()) {
                f.delete();
            }
            try {
                FileOutputStream out = new FileOutputStream(f);
                bmp.compress(Bitmap.CompressFormat.PNG, 90, out);
                out.flush();
                out.close();
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    });
  8. カメラ関連の操作を実行します。

    カメラ関連の操作は、ストリーミング、一時停止、または再接続の状態で実行できます。 たとえば、フロントカメラとリアカメラを切り替えて、フラッシュ、焦点距離、ズーム、ミラーリングモードを設定できます。 サンプルコード:

    /* Switch between the front and rear cameras. */
    mAlivcLivePusher.switchCamera();
    /* Enable or disable flash. You cannot enable flash for the front camera. */
    mAlivcLivePusher.setFlash(true); 
    /* Adjust the focal length to zoom in or out. Valid values of the focal length: [0,getMaxZoom()]. */
    mAlivcLivePusher.setZoom(5);
    /* Configure manual focus. To configure manual focus, you must set the following parameters: point and autoFocus. The point parameter specifies the coordinates of the focus point. The autoFocus parameter specifies whether to enable autofocus. The autoFocus parameter takes effect only for this call. Whether autofocus is enabled otherwise varies based on the setAutoFocus method. */
    mAlivcLivePusher.focusCameraAtAdjustedPoint(x, y, true);
    /* Configure autofocus. */
    mAlivcLivePusher.setAutoFocus(true);
    /* Configure the mirroring mode. The methods for mirroring are PushMirror and PreviewMirror. The PushMirror method is used to enable the mirroring mode for stream ingest. The PreviewMirror method is used to enable the mirroring mode for preview. PushMirror takes effect only for stream playback, and PreviewMirror takes effect only for preview. */
    mAlivcLivePusher.setPreviewMirror(false);
    mAlivcLivePusher.setPushMirror(false);
    重要

    メソッドを呼び出して、プレビューの開始後にのみカメラ関連の操作を実行できます。

  9. 外部オーディオおよびビデオソースを設定します。

    Push SDK for Androidを使用すると、ストリーム取り込み用の外部オーディオおよびビデオソースをインポートできます。 たとえば、オーディオまたはビデオファイルを取り込むことができます。

    1. 外部オーディオおよびビデオソースを設定します。

      サンプルコード:

      /**
      * Import custom audio data.
      * @param data The byte array of the audio data.
      * @param size
      * @param sampleRate
      * @param channels
      * @param pts The presentation timestamp (PTS) of audio. Unit: microseconds.
      * This method does not configure the time sequence. You must manually configure the time sequence of input audio frames.
      */
      mAlivcLivePusher. inputStreamAudioData(byte[] data, int size, int sampleRate, int channels, long pts);
      /**
      * Import custom audio data.
      * @param dataptr The pointer of the native memory for the audio data.
      * @param size
      * @param sampleRate
      * @param channels
      * @param pts The PTS of audio. Unit: microseconds.
      * This method does not configure the time sequence. You must manually configure the time sequence of input audio frames.
      */
      mAlivcLivePusher. inputStreamAudioPtr(long dataPtr, int size, int sampleRate, int channels, long pts);
    2. 外部ビデオデータをインポートします。

      サンプルコード:

      /**
      * Import a custom video stream.
      *
      * @param data The byte array of the video.
      * @param width The width of the video.
      * @param height The height of the video.
      * @param size The size of the video.
      * @param stride The stride of the video.
      * @param pts The PTS of the video. Unit: microseconds.
      * @param rotation The rotation angle of the video.
      * This method does not configure the time sequence. You must manually configure the time sequence of input video frames.
      * Note: When you call this method, you must configure setExternMainStream(true,***) in AlivcLivePushConfig.
      */
      mAlivcLivePusher. inputStreamVideoData(byte[] data, int width, int height, int stride, int size, long pts, int rotation);
      /**
      * Import a custom video stream.
      *
      * @param dataptr The pointer of the native memory for the video.
      * @param width The width of the video.
      * @param height The height of the video.
      * @param stride The stride of the video.
      * @param size The size of the video.
      * @param pts The PTS of the video. Unit: microseconds.
      * @param rotation The rotation angle of the video.
      * This method does not configure the time sequence. You must manually configure the time sequence of input video frames.
      * Note: When you call this method, you must configure setExternMainStream(true,***) in AlivcLivePushConfig.
      */
      mAlivcLivePusher. inputStreamVideoPtr(long dataptr, int width, int height, int stride, int size, long pts, int rotation);
    3. 外部オーディオデータをインポートします。

      サンプルコード:

      /**
      * AlivcImageFormat: the format of the input video.
      * AlivcSoundFormat: the format of the input audio frames.
      * Other parameters: To specify the output resolution, the audio sampling rate, and the number of channels, 
      configure setResolution, setAudioSamepleRate, and setAudioChannels in AlivcLivePushConfig.
      * Note: To import custom video and audio streams, call methods such as inputStreamVideoData and inputStreamAudioData.
      */
      mAlivcLivePushConfig.setExternMainStream(true,AlivcImageFormat.IMAGE_FORMAT_YUVNV12,
      AlivcSoundFormat.SOUND_FORMAT_S16);
  10. アニメーションステッカーを管理します。

    Push SDK for Androidを使用すると、ライブストリームにアニメーションステッカーを追加できます。 アニメーションステッカーは透かしとして使用できます。

    1. アニメーションステッカーを作成するには、デモで提供されているマテリアルを使用および変更できます。 アニメーションステッカーのシーケンスフレーム画像を作成します。 config.jsonファイルで次のパラメーターを設定します。

      "du": 2.04,// Specify the duration for which each time the animated sticker is played.
      "n": "qizi",// Specify the name of the animated sticker. Make sure that the name of the folder in which the animated sticker is stored is the same as the name of the sticker, and the name of each frame ends with a sequence number. Example: qizi0.
      "c": 68.0,// Specify the number of frames, which is the number of images included in an animated sticker.
      "kerneframe": 51,// Specify an image as the keyframe. For example, specify the 51st frame as the keyframe in the demo. Make sure that the specified frame exists.
      "frameArry": [
          {"time":0,"pic":0},
          {"time":0.03,"pic":1},
          {"time":0.06,"pic":2},
          ],
      // Configure the parameters of the animated sticker. In the preceding settings, "time":0,"pic":0 indicates that the first frame qizi0 is displayed 0 seconds after the animated sticker is played. "time":0.03,"pic":1 indicates that the second frame qizi1 is displayed 0.03 seconds after the animated sticker is played. Configure all frames in the animated sticker in the same manner.
      説明

      他のパラメーターについては、デモで提供されているconfig.jsonファイルの値を保持できます。

    2. アニメーションステッカーを追加します。

      サンプルコード:

      /**
      * Add an animated sticker.
      * @param path Specify the path of the animated sticker. The path must include the config.json file.
      * @param x Specify the starting position on the x-axis. Valid values: 0 to 1.0f.
      * @param y Specify the starting position on the y-axis. Valid values: 0 to 1.0f.
      * @param w Specify the width. Valid values: 0 to 1.0f.
      * @param h Specify the height. Valid values: 0 to 1.0f.
      * @return id Specify the ID of the sticker. You must specify the ID of a sticker if you want to remove the sticker.
      */
      mAlivcLivePusher.addDynamicsAddons("Path of the sticker", 0.2f, 0.2f, 0.2f, 0.2f);
    3. アニメーションステッカーを削除します。

      サンプルコード:

      mAlivcLivePusher.removeDynamicsAddons(int id);
  11. 他のメソッドを呼び出します。

    /* In custom mode, you can change the minimum bitrate and target bitrate in real time. */
    mAlivcLivePusher.setTargetVideoBitrate(800);
    mAlivcLivePusher.setMinVideoBitrate(400);
    /* Specify whether autofocus is supported. */
    mAlivcLivePusher.isCameraSupportAutoFocus();
    /* Specify whether flash is supported. */
    mAlivcLivePusher.isCameraSupportFlash();
    /* Query whether the stream is being ingested. */
    mAlivcLivePusher.isPushing(); 
    /* Query the ingest URL. */
    mAlivcLivePusher.getPushUrl();
    /* Query the stream ingest performance debugging information. For more information about the parameters of stream ingest performance, see the API references or comments in the code. */
    mAlivcLivePusher.getLivePushStatsInfo();
    /*Query the SDK version number. */
    mAlivcLivePusher.getSDKVersion();
    /* Specify the log level to filter debugging information. */
    mAlivcLivePusher.setLogLevel(AlivcLivePushLogLevelAll);
    /* Query the status of Push SDK for Android. */
    AlivcLivePushStats getCurrentStatus();
    /* Query the previous error code. If no error code is returned, ALIVC_COMMON_RETURN_SUCCESS is displayed. */
    AlivcLivePushError getLastError();

画面録画用のストリーム取り込みの設定 (基本版)

Push SDK for Androidを使用すると、画面録画をストリーミングできます。 SDKの初期化、プレビューの設定、およびストリームの取り込みの開始後にのみ、画面録画をストリーミングできます。 画面録画をストリーミングするには、次の手順を実行します。

  1. 画面録画モードを設定します。

    ビジネス要件に基づいて、次の表に示す画面録画モードのいずれかを使用できます。

    画面録画モード

    必須設定

    カメラを無効にして画面を記録する

    1. メソッドを呼び出した後に返されるデータを設定して、AlivcLivePushConfigで画面録画権限を要求します。

    カメラを有効にして画面を記録する

    説明

    ストリーマ側でカメラプレビューを有効にします。 視聴者は、カメラを使用して記録されたビデオコンテンツを表示できます。

    1. メソッドを呼び出した後に返されるデータを設定して、AlivcLivePushConfigで画面録画権限を要求します。

    2. StartCameraメソッドを呼び出すときにsurfaceViewを渡します。

    カメラを有効にして画面を記録する

    説明

    ストリーマ側のカメラプレビューを無効にします。 視聴者は、カメラを使用して記録されたビデオコンテンツを表示できます。

    1. メソッドを呼び出した後に返されるデータを設定して、AlivcLivePushConfigで画面録画権限を要求します。

    2. surfaceViewで渡す必要なしにStartCameraメソッドを呼び出します。

    3. startCameraMixメソッドを呼び出して、視聴者側のカメラビューの位置を調整します。

  2. 画面録画を有効にします。

    MediaProjectionはスクリーン記録に使用されます。 画面記録を有効にするには、画面記録のアクセス許可を要求し、AlivcLivePushConfigのsetMediaProjectionPermissionResultDataメソッドを呼び出して、返されたデータを設定する必要があります。 デフォルトでは、カメラは画面録画中は無効になっています。 次のサンプルコードは、返されるデータを設定する方法の例を示しています。

    mAlivcLivePushConfig.setMediaProjectionPermissionResultData(resultData)
  3. カメラプレビューを設定します。

    画面録画を有効にした後、カメラのプレビュー方法を呼び出すことができます。 サンプルコード:

    mAlivcLivePusher.startCamera(surfaceView); // Enable camera preview.
    mAlivcLivePusher.stopCamera(); // Disable camera preview.
    説明
    • 画面録画モードでは、surfaceViewのアスペクト比を1:1に設定することを推奨します。 これにより、画面を回転させるときにsurfaceViewのアスペクト比を調整する必要がなくなります。

    • surfaceViewのアスペクト比を1:1に設定しない場合は、画面を回転させるときにアスペクト比を調整し、カメラプレビューを無効にしてから、カメラプレビューを再度有効にする必要があります。

    • ストリーマ側でプレビューが不要な場合は、surfaceViewパラメーターをnullに設定します。

  4. カメラストリームミキシングを設定します。

    この機能は、視聴者がカメラのプレビューを必要とし、ストリーマ側がカメラのプレビューを必要としない場合に有効にできます。 この機能は、主にゲームシナリオで使用されます。 ストリーマがゲームコンテンツをストリーミングしたくない場合、ストリーマは、ゲームコンテンツの上にカメラビューを表示することができる。 サンプルコード:

    /**
    * @param x The starting position on the x-axis. Valid values: 0 to 1.0f.
    * @param y The starting position on the y-axis. Valid values: 0 to 1.0f.
    * @param w The width of the screen. Valid values: 0 to 1.0f.
    * @param h The height of the screen. Valid values: 0 to 1.0f.
    * @return
    */
    mAlivcLivePusher.startCameraMix(x, y, w, h); // Enable camera stream mixing.
    mAlivcLivePusher.stopCameraMix(); // Disable camera stream mixing.
  5. 画面回転を設定します。

    画面録画モードでは、画面を回転させてポートレートモードとランドスケープモードを切り替えることができます。 サンプルコード:

    mAlivcLivePusher.setScreenOrientation(0);
    説明

    画面の向きを変更するときは、アプリケーションレイヤーでOrientationEventListenerを有効にし、向きの設定をsetScreenOrientationメソッドに渡す必要があります。

  6. プライバシー保護を設定します。

    この機能により、ストリーマは画面録画中にプライバシーを保護できます。 たとえば、ストリーマーがパスワードを入力する必要がある場合、ストリーマーはこの機能を有効にできます。 ストリーマーがパスワードを入力すると、ストリーマーはこの機能を無効にできます。 サンプルコード:

    mAlivcLivePusher.pauseScreenCapture(); // Enable privacy protection.
    mAlivcLivePusher.resumeScreenCapture(); // Disable privacy protection.
    説明

    AlivcLivePushConfigでsetPausePushImageメソッドを設定した場合、画面記録が一時停止されると指定された画像が表示されます。 この方法を設定しない場合、画面録画が一時停止されたときに最後のフレームが表示されます。

コストリーミング設定の構成 (インタラクティブエディション)

Push SDK V4.4.4以降のインタラクティブエディションは、RTCベースのコストリーミング機能を提供します。 Push SDK V4.4.5以降のインタラクティブエディションは、RTCベースのバトル機能を提供します。 ストリーマーとビューアは、Push SDKのインタラクティブエディションを使用することで、300ミリ秒未満の超低レイテンシで相互作用できます。 インタラクティブストリーミングの詳細については、「共同ストリーミングの開発者ガイド」および「バトルの開発者ガイド」をご参照ください。

使用上の注意

Push SDK for Androidを使用する前に、次の表に記載されている項目に注意してください。

項目

説明

難読化ルール

難読化の設定を確認します。 Push SDK for Androidのパッケージ名が難読化リストから削除されていることを確認してください。

-keep class com.alivc.** { *;}

メソッド呼び出し

  • 同期メソッドと非同期メソッドの両方を呼び出すことができます。 ただし、同期メソッドはメインスレッドのリソースを消費するため、これらのメソッドを呼び出さないことをお勧めします。

  • Push SDK for Androidは、必要なメソッドの呼び出しに失敗した場合、または無効な順序でメソッドを呼び出した場合に例外をスローします。 try-catchステートメントを追加して、予期しない終了を防ぐ必要があります。

  • 次の図は、メソッドを適切な順序で呼び出す方法を示しています。

    image