このトピックでは、Android 用 Push software development kit (SDK) の機能と使用方法について説明します。主な SDK インターフェイス、基本的なワークフローについて説明し、関連機能の例を示して、開発者がライブストリームのアップストリーミングのために SDK を理解して使用できるようにします。
特徴
リアルタイムメッセージングプロトコル (RTMP) 経由のストリームアップストリーミングをサポートします。
リアルタイムコミュニケーション (RTC) に基づく RTS ストリームのアップストリーミングとプルをサポートします。
共同ストリーミングと対戦をサポートします。
ビデオエンコーディングには H.264、音声エンコーディングには AAC を採用しています。
ビットレート制御、解像度、表示モードなどの機能のカスタム構成をサポートします。
さまざまなカメラ操作をサポートします。
リアルタイムのレタッチとカスタムレタッチ効果をサポートします。
ウォーターマークとしてアニメーションステッカーを追加および削除できます。
画面録画をストリーミングできます。
YUV やパルス符号変調 (PCM) などのさまざまなフォーマットの外部音声およびビデオ入力をサポートします。
複数のストリームのミキシングをサポートします。
音声のみおよびビデオのみのストリームのアップストリーミングと、バックグラウンドでのストリームアップストリーミングをサポートします。
バックグラウンドミュージックをサポートします。
ビデオスナップショットキャプチャをサポートします。
自動再接続とエラー処理をサポートします。
自動ゲイン制御 (AGC)、自動ノイズリダクション (ANR)、および音響エコーキャンセレーション (AEC) アルゴリズムをサポートします。
ビデオファイルのソフトウェアエンコーディングモードとハードウェアエンコーディングモードを切り替えることができます。これにより、エンコーディングモジュールの安定性が向上します。
制限事項
Android 用 Push SDK を使用する前に、次の制限事項に注意してください。
ストリームをアップストリーミングする前に画面の向きを設定する必要があります。ライブストリーミング中に画面を回転させることはできません。
横向きモードでストリームをアップストリーミングするには、画面の自動回転を無効にする必要があります。
ハードウェアエンコーディングモードでは、エンコーダーとの互換性を保つために、出力解像度の値を 16 の倍数にする必要があります。たとえば、解像度を 540p に設定した場合、出力解像度は 544 × 960 になります。黒枠を防ぐには、出力解像度に基づいてプレーヤーの画面サイズをスケーリングする必要があります。
API リファレンス
プロシージャ
基本的なプロシージャは次のとおりです。
機能の使用方法
SDK の登録
ライセンスの申請方法と設定方法の詳細については、「Push SDK のライセンスを統合する」をご参照ください。
ストリームアップストリーミング機能を使用する前に、SDK を登録する必要があります。
Push SDK を使用する前に、アプリケーションのライフサイクルの早い段階でライセンス登録メソッドを呼び出します。
AlivcLiveBase.setListener(new AlivcLiveBaseListener() {
@Override
public void onLicenceCheck(AlivcLivePushConstants.AlivcLiveLicenseCheckResultCode result, String reason) {
Log.e(TAG, "onLicenceCheck: " + result + ", " + reason);
}
});
AlivcLiveBase.registerSDK();AlivcLiveBase クラスを使用すると、ログレベルの設定、ローカルログパスの指定、SDK バージョンの取得ができます。
AlivcLiveBase の registerSDK メソッドを呼び出して、SDK ライセンスを登録します。
AlivcLiveBase#setListener インターフェイスの onLicenceCheck メソッドでは、ライセンスが設定されているかどうかを非同期で確認できます。
説明このコールバックは、プッシャーインスタンスが初期化された後にのみトリガーされます。
ストリームアップストリーミングパラメーターの設定
基本的なストリームアップストリーミングパラメーターにはデフォルト値があり、これを使用することをお勧めします。これにより、追加の設定なしで簡単な初期化が可能です。
// ストリームアップストリーミング設定クラスを初期化します。
AlivcLivePushConfig mAlivcLivePushConfig = new AlivcLivePushConfig();
// ストリームアップストリーミングモードを設定します。デフォルトは基本的なストリームアップストリーミングモードです。
mAlivcLivePushConfig.setLivePushMode(AlivcLiveMode.AlivcLiveBasicMode);
// 解像度を設定します。デフォルトは 540p です。
mAlivcLivePushConfig.setResolution(AlivcResolutionEnum.RESOLUTION_540P);
// フレームレートを設定します。デフォルトは 20 fps です。
mAlivcLivePushConfig.setFps(AlivcFpsEnum.FPS_25);
// ビデオエンコーディングの Group of Pictures (GOP) を設定します。単位: 秒。デフォルトは 2 秒です。
mAlivcLivePushConfig.setVideoEncodeGop(AlivcVideoEncodeGopEnum.GOP_TWO);
// ビットレート制御を有効にします。これはデフォルトで有効になっています。
mAlivcLivePushConfig.setEnableBitrateControl(true);
// 画面の向きを設定します。デフォルトは縦向きです。ホームボタンを左または右にしてデバイスを横向きに設定できます。
mAlivcLivePushConfig.setPreviewOrientation(AlivcPreviewOrientationEnum.ORIENTATION_PORTRAIT);
// 音声エンコーディングモードを設定します。デフォルトは AAC-LC です。
mAlivcLivePushConfig.setAudioProfile(AlivcAudioAACProfileEnum.AAC_LC);
// ビデオエンコーディングモードを設定します。デフォルトはハードウェアエンコーディングです。
mAlivcLivePushConfig.setVideoEncodeMode(AlivcEncodeModeEnum.Encode_MODE_HARD);
// 音声エンコーディングモードを設定します。デフォルトはソフトウェアエンコーディングです。
mAlivcLivePushConfig.setAudioEncodeMode(AlivcEncodeModeEnum.Encode_MODE_SOFT);
// カメラの種類を設定します。デフォルトはフロントカメラです。
mAlivcLivePushConfig.setCameraType(AlivcLivePushCameraTypeEnum.CAMERA_TYPE_FRONT);
// アプリがバックグラウンドで実行されているか一時停止しているときにアップストリーミングする画像を設定します。
mAlivcLivePushConfig.setPausePushImage("TODO: Image Path");
// ネットワーク状態が悪い場合にアップストリーミングする画像を設定します。
mAlivcLivePushConfig.setNetworkPoorPushImage("TODO: Image Path");モバイルデバイスで最適なパフォーマンスを得て、ネットワーク帯域幅を管理するには、解像度を 540p に設定することをお勧めします。ほとんどの主流のライブストリーミングアプリケーションでは、この解像度が使用されています。
ビットレート制御を無効にすると、ビットレートは初期ビットレートに固定されます。ターゲットビットレートと最小ビットレートの間で自動的に調整されません。ネットワーク状態が不安定な場合、再生が途切れることがあります。このオプションは注意して使用してください。
カメラストリームの取り込み
SDK の初期化
ストリームアップストリーミングパラメーターを設定した後、Push SDK の init メソッドを使用して初期化します。次のサンプルコードは、その方法を示しています。
AlivcLivePusher mAlivcLivePusher = new AlivcLivePusher(); mAlivcLivePusher.init(mContext, mAlivcLivePushConfig);説明AlivcLivePusher は複数のインスタンスをサポートしていません。各 init 呼び出しには、対応する destroy 呼び出しが必要です。
プレビューコールバックの登録
setLivePushInfoListener メソッドを使用してプレビューコールバックを登録できます。
/** * ストリームアップストリーミング通知イベントを設定します。 * * @param infoListener 通知リスナー。 */ mAlivcLivePusher.setLivePushInfoListener(new AlivcLivePushInfoListener() { @Override public void onPreviewStarted(AlivcLivePusher pusher) { // プレビューが開始されたことの通知。 } // その他の Override メソッド //.... //.... });プレビューの開始
livePusher オブジェクトが初期化され、コールバックが設定された後、プレビューを開始できます。[カメラ] プレビュー用の SurfaceView を渡す必要があります。次のサンプルコードは、その方法を示しています。
mAlivcLivePusher.startPreview(mSurfaceView)// プレビューを開始します。必要に応じて、非同期の startPreviewAysnc メソッドを呼び出すこともできます。ストリームアップストリーミングの開始
[onPreviewStarted] コールバックメソッド内に次のコードを追加します。
mAlivcLivePusher.startPush(mPushUrl);説明アップストリーミング URL は RTMP と リアルタイムストリーミング (RTS) (artc://) をサポートしています。アップストリーミング URL の取得方法の詳細については、「アップストリーミング URL とストリーミング URL の生成」をご参照ください。
ApsaraVideo Live は、同じアップストリーミング URL への複数のストリームの同時アップストリーミングをサポートしていません。2 番目のストリームアップストリーミングリクエストは拒否されます。
一般的なストリームアップストリーミングメソッド
ストリームアップストリーミングコントロールには、ストリームの開始、停止、再開、一時停止、再開のほか、プレビューの停止やストリームアップストリーミングインスタンスの破棄などがあります。アプリケーションの要件に基づいて、これらの操作を実行するボタンを追加できます。
/* このメソッドを呼び出して、アクティブなストリームを一時停止できます。ストリームのアップストリーミングを一時停止すると、ビデオプレビューとビデオストリームのアップストリーミングは最後のフレームのままになり、オーディオストリームは続行されます。 */
mAlivcLivePusher.pause();
/* このメソッドを呼び出して、一時停止したストリームを再開できます。ストリームのアップストリーミングを再開すると、音声とビデオのプレビューおよびストリームのアップストリーミングは通常の状態に戻ります。 */
mAlivcLivePusher.resume();
/* このメソッドを呼び出して、アクティブなストリームを停止できます。操作が完了すると、ストリームのアップストリーミングは停止します。 */
mAlivcLivePusher.stopPush();
/* このメソッドは、プレビューがアクティブな場合にのみプレビューを停止するために呼び出すことができます。アクティブなストリームでこのメソッドを呼び出しても効果はありません。プレビューが停止すると、プレビュー画像は最後のフレームでフリーズします。 */
mAlivcLivePusher.stopPreview();
/* このメソッドは、ストリームがアクティブなとき、またはエラー関連のコールバックを受信したときに、ストリームのアップストリーミングを再開するために呼び出すことができます。エラー状態では、このメソッド、再接続するための reconnectPushAsync、またはストリームのアップストリーミングを破棄するための destroy のみを呼び出すことができます。操作が完了すると、ストリームのアップストリーミングが再開されます。プレビューとストリームのアップストリーミングを含む、ALivcLivePusher 内のすべてのリソースが再起動されます。 */
mAlivcLivePusher.restartPush();
/* このメソッドは、ストリームがアクティブなとき、または AlivcLivePusherNetworkDelegate に関連するエラーコールバックを受信したときに呼び出すことができます。エラー状態では、このメソッド、ストリームのアップストリーミングを再開するための restartPush、またはストリームのアップストリーミングを破棄するための destroy のみを呼び出すことができます。操作が完了すると、ストリームのアップストリーミングは RTMP URL に再接続します。 */
mAlivcLivePusher.reconnectPushAsync();
/* ストリームのアップストリーミングが破棄されると、ストリームのアップストリーミングとプレビューが停止し、プレビュー画像が削除されます。AlivcLivePusher に関連するすべてのリソースが破棄されます。 */
mAlivcLivePusher.destroy();カメラ関連の操作
カメラ関連の操作は、ストリームのアップストリーミング、一時停止、再接続中に利用できます。カメラを切り替えたり、フラッシュ、フォーカス、ズーム、画像の設定を管理したりできます。次のサンプルコードは、その方法を示しています。
/* フロントカメラとリアカメラを切り替えます。 */
mAlivcLivePusher.switchCamera();
/* フラッシュをオンまたはオフにします。フロントカメラを使用している場合、フラッシュをオンにすることはできません。 */
mAlivcLivePusher.setFlash(true);
/* フォーカスを調整して、キャプチャした画像をズームします。ズーム範囲は [0, getMaxZoom()] です。 */
mAlivcLivePusher.setZoom(5);
/* 手動でフォーカスします。手動フォーカスには 2 つのパラメーターが必要です。1. point: フォーカスする点の座標。2. autoFocus: オートフォーカスを有効にするかどうかを指定します。このパラメーターは、現在のフォーカス操作に対してのみ有効です。その後のオートフォーカスの動作は、前述のオートフォーカスインターフェイスの設定に従います。 */
mAlivcLivePusher.focusCameraAtAdjustedPoint(x, y, true);
/* オートフォーカスを有効にするかどうかを設定します。 */
mAlivcLivePusher.setAutoFocus(true);
/* 画像を設定します。画像関連のインターフェイスは 2 つあります。アップストリーミングストリーム画像用の PushMirror とプレビュー画像用の PreviewMirror です。PushMirror の設定は再生画像にのみ影響します。PreviewMirror の設定はプレビュー画像にのみ影響します。2 つは互いに影響しません。 */
mAlivcLivePusher.setPreviewMirror(false);
mAlivcLivePusher.setPushMirror(false);カメラ関連のインターフェイスは、プレビューが開始された後にのみ呼び出すことができます。
画面共有ストリームを取り込む
Push SDK は、画面共有ストリームのアップストリーミングをサポートしています。画面共有を設定する前に、SDK を初期化し、プレビューを設定し、ストリームのアップストリーミングを開始する必要があります。画面録画では MediaProjection を使用するため、ユーザーの許可をリクエストする必要があります。画面録画モードを有効にするには、このインターフェイスを介して許可リクエストから返されたデータを渡します。デフォルトでは、画面録画中にカメラは有効になりません。
画面共有ストリームのアップストリーミングの設定
// resultData: 画面録画のシステムインテント。
mAlivcLivePushConfig.setMediaProjectionPermissionResultData(resultData);画面の回転を設定する
画面録画モードでは、画面の回転角度を設定して、横向きと縦向きの両方の録画をサポートできます。次のサンプルコードは、その方法を示しています。
mAlivcLivePusher.setScreenOrientation(0);アプリケーション層で OrientationEventListener イベントをリッスンする必要があります。画面の向きが変わったら、新しい回転角度をこのインターフェイスに渡します。
プライバシー保護の設定
ストリーマーが画面録画中にパスワードの入力などの機密操作を行う必要がある場合、プライバシー保護機能を有効にできます。操作が完了したら、ストリーマーはプライバシー保護を無効にできます。次のサンプルコードは、その方法を示しています。
mAlivcLivePusher.pauseScreenCapture();// プライバシー保護を有効にします。
mAlivcLivePusher.resumeScreenCapture();// プライバシー保護を無効にします。画面録画を一時停止し、設定で setPausePushImage を設定している場合、このインターフェイスが呼び出された後、視聴者には画像が表示されます。設定していない場合、視聴者には最後のフレームが表示されます。
画面共有とカメラストリームの両方をアップストリーミングする
画面共有ストリームをアップストリーミングするときに、カメラを有効にして画面共有とカメラストリームの両方をアップストリーミングできます。画面共有とカメラストリームの両方をアップストリーミングするには、2 つのシナリオがあります。
ストリーマーにカメラプレビューがある。
ストリーマーと視聴者の両方がカメラフィードを見ることができます。
ストリーマーにカメラプレビューがない。
たとえば、ゲームのライブストリーム中、ストリーマーはカメラビューがゲーム画面をブロックしないようにしたいと考えています。ただし、視聴者が見るライブコンテンツには、ストリーマーのカメラフィードが含まれます。
ストリーマーにカメラプレビューがある
画面録画が正常に有効になった後、インターフェイスを呼び出してカメラプレビューを有効または無効にします。
mAlivcLivePusher.startCamera(surfaceView);// カメラプレビューを有効にします。
mAlivcLivePusher.stopCamera();// カメラプレビューを無効にします。画面録画モードでは、カメラプレビューの surfaceView の幅と高さを 1:1 の比率に設定することをお勧めします。これにより、画面が回転しても surfaceView を調整する必要がありません。
幅と高さが 1:1 の比率に設定されていない場合は、画面が回転したときに surfaceView の比率を調整し、stopCamera を呼び出してから startCamera を呼び出す必要があります。
ストリーマーがプレビューを必要としない場合は、surfaceView を null に設定します。
ストリーマーにカメラプレビューがない
ストリーマーがカメラプレビューを必要としないが、視聴者が必要とする場合は、カメラストリームミキシングを有効にできます。
mAlivcLivePusher.startCameraMix(x, y, w, h);// カメラストリームミキシングを有効にし、x、y、w、h でミキシングレイアウトを設定します。
mAlivcLivePusher.stopCameraMix();// カメラストリームミキシングを停止します。プレビュー表示モード
Push SDK は 3 つのプレビューモードをサポートしています。プレビュー表示モードはストリームのアップストリーミングには影響しません。
ALIVC_LIVE_PUSHER_PREVIEW_SCALE_FILL: プレビューはウィンドウを埋めます。ビデオとウィンドウの縦横比が異なる場合、プレビューは歪みます。
ALIVC_LIVE_PUSHER_PREVIEW_ASPECT_FIT: プレビューはビデオの縦横比を維持します。ビデオとウィンドウの縦横比が異なる場合、プレビューに黒枠が表示されます。
ALIVC_LIVE_PUSHER_PREVIEW_ASPECT_FILL: プレビューはウィンドウの縦横比に合わせてトリミングされます。ビデオとウィンドウの縦横比が異なる場合、ビデオの一部がトリミングされます。
次のサンプルコードは、プレビューモードの設定方法を示しています。
mAlivcLivePushConfig.setPreviewDisplayMode(AlivcPreviewDisplayMode.ALIVC_LIVE_PUSHER_PREVIEW_ASPECT_FIT);イメージストリームのアップストリーミング
ユーザーエクスペリエンスを向上させるために、Push SDK では、アプリケーションがバックグラウンドにあるときやビットレートが低すぎるときに静止画像をアップストリーミングできます。
アプリケーションがバックグラウンドに移動すると、ビデオストリームのアップストリーミングはデフォルトで一時停止され、オーディオストリームのみがアップストリーミングされます。この間、静止画像をアップストリーミングできます。たとえば、「[ストリーマーはしばらく席を外しています。まもなく戻ります]」という画像を表示できます。
mAlivcLivePushConfig.setPausePushImage("Path to the background PNG image");// バックグラウンドストリームアップストリーミング用の画像を設定します。ネットワークの状態が悪い場合は、SDK が静止画像をアップストリーミングするように設定できます。画像を設定すると、SDK は低いビットレートが検出されたときに自動的に画像をアップストリーミングし、ビデオストリームの途切れを防ぎます。次のサンプルコードは、その方法を示しています。
mAlivcLivePushConfig.setNetworkPoorPushImage("Path to the poor network PNG image");// ネットワークの状態が悪いときにアップストリーミングする画像を設定します。音声のみのストリームのアップストリーミング
mAlivcLivePushConfig.setAudioOnly(true);外部の音声およびビデオストリームのアップストリーミング
Push SDK は、オーディオファイルやビデオファイルなど、外部ソースからの音声とビデオのアップストリーミングをサポートしています。
外部の音声およびビデオストリームをアップストリーミングする前に、カスタムの音声およびビデオストリーム入力機能を有効にする必要があります。
/**
* 出力解像度、音声サンプリングレート、チャンネル数などの他のパラメーターは、setResolution、setAudioSampleRate、setAudioChannels を使用して設定ファイルで設定されます。
*/
mAlivcLivePushConfig.setExternMainStream(true,AlivcImageFormat.IMAGE_FORMAT_YUVNV12,AlivcSoundFormat.SOUND_FORMAT_S16);カスタムの音声およびビデオストリーム入力機能を有効にした後、外部の音声およびビデオストリームをアップストリーミングできます。
外部オーディオストリームのアップストリーミング
/**
* このインターフェイスはタイミングを制御しません。呼び出し元は、入力オーディオフレームのタイミングを制御する必要があります。
*/
mAlivcLivePusher.inputStreamAudioData(byte[] data, int size, int sampleRate, int channels, long pts);外部ビデオストリームのアップストリーミング
/**
* このインターフェイスはタイミングを制御しません。呼び出し元は、入力ビデオフレームのタイミングを制御する必要があります。
*/
mAlivcLivePusher.inputStreamVideoData(byte[] data, int width, int height, int stride, int size, long pts, int rotation);ウォーターマークの設定
Push SDK は、ウォーターマークを追加する機能を提供し、単一のストリームで複数のウォーターマークをサポートします。ウォーターマーク画像は PNG ファイルである必要があります。次のサンプルコードは、ウォーターマークの追加方法を示しています。
mAlivcLivePushConfig.addWaterMark(waterPath,0.1,0.2,0.3);// ウォーターマークを追加します。x、y、width パラメーターは相対値です。たとえば、x=0.1 は、ウォーターマークの x 座標がアップストリーミング画面の x 軸の 10% の位置にあることを意味します。アップストリーミング解像度が 540 × 960 の場合、ウォーターマークの x 座標は 54 です。
ウォーターマーク画像の高さは、ウォーターマーク画像の実際の幅と高さに基づいて、入力幅の値に比例してスケーリングされます。
テキストウォーターマークを実装するには、まずテキストを画像に変換し、次にこのインターフェイスを使用してウォーターマークを追加します。
ビデオ品質の設定
解像度優先、流暢さ優先、カスタムの 3 つのビデオ品質モードがサポートされています。
ビデオ品質を設定するには、ビットレート制御を有効にする必要があります: mAlivcLivePushConfig.setEnableBitrateControl(true);
解像度優先 (デフォルト)
解像度優先モードでは、SDK は内部でビットレートパラメーターを設定して、アップストリーミングされたビデオの鮮明度を優先します。
mAlivcLivePushConfig.setQualityMode(AlivcQualityModeEnum.QM_RESOLUTION_FIRST);// 解像度優先流暢さ優先
流暢さ優先モードでは、SDK は内部でビットレートパラメーターを設定して、アップストリーミングされたビデオの流暢さを優先します。
mAlivcLivePushConfig.setQualityMode(AlivcQualityModeEnum.QM_FLUENCY_FIRST);// 流暢さ優先カスタムモード
カスタムモードでは、SDK は開発者の設定に基づいてビットレートを設定します。モードをカスタムに設定する場合は、初期、最小、およびターゲットのビットレートを定義する必要があります。
ターゲットビットレート: ネットワークの状態が良い場合、ビットレートは徐々にターゲットビットレートまで増加し、ビデオの鮮明度が向上します。
最小ビットレート: ネットワークの状態が悪い場合、ビットレートは徐々に最小ビットレートまで減少し、ビデオの途切れが軽減されます。
初期ビットレート: ライブストリーム開始時のビットレート。
mAlivcLivePushConfig.setQualityMode(AlivcQualityModeEnum.QM_CUSTOM);// カスタムモード
mAlivcLivePushConfig.setTargetVideoBitrate(1000); // ターゲットビットレート: 1,000 kbps
mAlivcLivePushConfig.setMinVideoBitrate(300); // 最小ビットレート: 300 kbps
mAlivcLivePushConfig.setInitialVideoBitrate(800); // 初期ビットレート: 800 kbpsカスタムビットレートを設定する場合は、Alibaba Cloud の推奨設定を参照してビットレートを設定してください。詳細については、次の表をご参照ください。
表 1. 解像度優先モードの推奨設定
解像度 | initialVideoBitrate | minVideoBitrate | targetVideoBitrate |
360p | 600 | 300 | 1000 |
480p | 800 | 300 | 1200 |
540p | 1000 | 600 | 1400 |
720p | 1500 | 600 | 2000 |
1080p | 1800 | 1200 | 2500 |
表 1. 解像度優先モードの推奨設定
解像度 | initialVideoBitrate | minVideoBitrate | targetVideoBitrate |
360p | 400 | 200 | 600 |
480p | 600 | 300 | 800 |
540p | 800 | 300 | 1000 |
720p | 1000 | 300 | 1200 |
1080p | 1500 | 1200 | 2200 |
適応解像度
適応解像度は、アップストリーミング解像度を動的に調整します。この機能を有効にすると、ネットワークの状態が悪い場合に解像度が自動的に低下し、ビデオの流暢さと鮮明度が向上します。次のサンプルコードは、この機能を有効にする方法を示しています。
mAlivcLivePushConfig.setEnableAutoResolution(true); // 適応解像度を有効にします。デフォルトでは無効になっています。適応解像度は、ビデオ品質モードが解像度優先または流暢さ優先に設定されている場合にのみ有効です。カスタムモードでは効果がありません。
一部のプレーヤーは動的解像度をサポートしていない場合があります。適応解像度機能を使用するには、ApsaraVideo Player を使用することをお勧めします。
バックグラウンドミュージック
Push SDK は、再生、ミキシング、ノイズ除去、インイヤーモニタリング、ミュートなどのバックグラウンドミュージック機能を提供します。次のサンプルコードは、これらの機能の使用方法を示しています。
/* バックグラウンドミュージックの再生を開始します。 */
mAlivcLivePusher.startBGMAsync(mPath);
/* バックグラウンドミュージックの再生を停止します。バックグラウンドミュージックが再生中で曲を切り替える必要がある場合は、バックグラウンドミュージック開始インターフェイスを呼び出すだけです。現在再生中のバックグラウンドミュージックを停止する必要はありません。 */
mAlivcLivePusher.stopBGMAsync();
/* バックグラウンドミュージックを一時停止します。このインターフェイスは、バックグラウンドミュージックの再生が開始された後にのみ呼び出すことができます。 */
mAlivcLivePusher.pauseBGM();
/* バックグラウンドミュージックを再開します。このインターフェイスは、バックグラウンドミュージックが一時停止している場合にのみ呼び出すことができます。 */
mAlivcLivePusher.resumeBGM();
/* 音楽のループ再生を有効にします。 */
mAlivcLivePusher.setBGMLoop(true);
/* ノイズ除去スイッチを設定します。ノイズ除去をオンにすると、キャプチャされた音声の非人間の声の部分がフィルタリングされます。これにより、人間の声がわずかに抑制される場合があります。ユーザーがノイズ除去機能を有効にするかどうかを選択できるようにすることをお勧めします。デフォルトでは使用されません。 */
mAlivcLivePusher.setAudioDenoise(true);
/* インイヤーモニタリングスイッチを設定します。インイヤーモニタリング機能は、主に KTV シナリオで使用されます。インイヤーモニタリングをオンにすると、ストリーマーはヘッドフォンで自分の声を聞くことができます。オフにすると、ストリーマーはヘッドフォンで自分の声を聞くことができません。インイヤーモニタリングはヘッドフォンなしでは機能しません。 */
mAlivcLivePusher.setBGMEarsBack(true);
/* ミキシングを設定して、バックグラウンドミュージックとキャプチャされた人間の声の音量を調整します。 */
mAlivcLivePusher.setBGMVolume(50);// バックグラウンドミュージックの音量を設定します。
mAlivcLivePusher.setCaptureVolume(50);// キャプチャされた人間の声の音量を設定します。
/* ミュートを設定します。ミュートすると、音楽と人間の声の両方の入力がミュートされます。音楽または人間の声のみをミュートするには、ミキシング音量設定インターフェイスを使用します。 */
mAlivcLivePusher.setMute(true);バックグラウンドミュージック関連のインターフェイスは、プレビューが開始された後にのみ呼び出すことができます。
ストリームアップストリーミング中のスナップショットのキャプチャ
Push SDK は、ローカルビデオストリームのスナップショットをキャプチャする機能を提供します。次のサンプルコードは、その方法を示しています。
// ビデオストリームのスナップショットをキャプチャします。パラメーター: キャプチャする画像の数、各画像間の間隔、およびインターフェイスコールバック。
pusher.snapshot(1, 1, new AlivcSnapshotListener() {
@Override
public void onSnapshot(Bitmap bmp) {
// スナップショットをローカルの PNG ファイルにダンプできます。以下はサンプルコードです。
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();
}
}
});バックグラウンド実行と画面ロック
アプリがバックグラウンドに移動したり、画面がロックされたりした場合、AlivcLivePusher の pause() または resume() メソッドを呼び出して、ストリームのアップストリーミングを一時停止または再開できます。
システム以外の音声およびビデオ通話の場合、SDK は音声をキャプチャしてアップストリーミングします。アプリケーションの要件に応じて、アプリケーションがバックグラウンドに移動したり画面がロックされたりしたときに mAlivcLivePusher.setMute(true or false) インターフェイスを呼び出して、バックグラウンドで音声がキャプチャされるかどうかを制御できます。
コールバックリスナー
コールバックタイプ | コールバッククラス名 | 設定メソッド |
AlivcLivePushInfoListener |
| |
AlivcLivePushNetworkListener |
| |
AlivcLivePushErrorListener |
| |
AlivcLivePushBGMListener |
|
ストリームインジェスト コールバック
ストリームアップストリーミングコールバックは、プレビューの開始、最初のビデオフレームのレンダリング、最初のオーディオまたはビデオフレームの送信、ストリームアップストリーミングの開始、ストリームアップストリーミングの停止など、SDK のステータスをアプリケーションに通知します。
onPushStarted: サーバーへの接続が成功したことを示します。
onFirstFramePushed: 最初のオーディオまたはビデオフレームが正常に送信されたことを示します。
onPushStarted と onFirstFramePushed: SDK ストリームのアップストリーミングが成功したことを示します。
ネットワーク関連のコールバック
ネットワーク関連のコールバックは、SDK のネットワークと接続ステータスをアプリケーションに通知します。SDK は、AlivcLivePushConfig で設定された再接続タイムアウトと再試行回数内の短いネットワーク変動またはネットワーク移行中に自動的に再接続を試みます。再接続が成功すると、ストリームのアップストリーミングが続行されます。
onConnectFail: ストリームのアップストリーミングが失敗したことを示します。これは、アップストリーミング URL が無効である、無効な文字が含まれている、認証に問題がある、同時ストリームアップストリーミングの最大制限を超えている、またはストリームアップストリーミングのブラックリストに載っている場合に発生する可能性があります。再度ストリームをアップストリーミングする前に、アップストリーミング URL が有効で利用可能であることを確認してください。特定のエラーコードは 0x30020901 から 0x30020905 および 0x30010900 から 0x30010901 です。
onConnectionLost: リンクが切断された場合のコールバック。リンクが切断された後、SDK は自動的に再接続プロセスを開始し、onReconnectStart をトリガーします。最大再試行回数 (config.connectRetryCount) 後にストリームアップストリーミングリンクが復元されない場合、SDK は onReconnectFail をトリガーします。
onNetworkPoor: ネットワークが遅い場合のコールバック。このコールバックを受信すると、現在のネットワークがストリームのアップストリーミングをサポートするのに十分ではないことを意味します。この時点では、ストリームのアップストリーミングはまだ進行中であり、中断されていません。ここで、ユーザーに UI 通知を表示するなど、ビジネスロジックを処理できます。
onNetworkRecovery: ネットワーク回復のコールバック。
onReconnectFail: このメソッドは、ネットワーク切断時間が AlivcLivePushConfig で設定された再接続タイムアウトと再試行回数を超え、SDK の自動再接続が失敗した場合に呼び出されます。ネットワークが回復した後、
mAlivcLivePusher.reconnectPushAsyncインターフェイスを呼び出して再接続できます。onSendDataTimeout: データ送信タイムアウトのコールバック。現在のネットワークステータスを確認する必要があります。ネットワークが回復したら、現在のストリームのアップストリーミングを停止してから再開します。
onPushURLAuthenticationOverdue: 認証期限切れのコールバック。このコールバックは、現在のアップストリーミング URL の認証が期限切れになったことを示します。SDK に新しい URL を提供する必要があります。
エラーコールバック
onSystemError: システムデバイス例外のコールバック。エンジンを破棄して再試行する必要があります。
onSDKError: SDK エラーコールバック。エラーコードに基づいて異なる方法で処理する必要があります。
エラーコードが 805438211 の場合、デバイスのパフォーマンスが低く、エンコーディングとレンダリングのフレームレートが低いことを示します。ストリーマーに通知し、高度なレタッチやアニメーションなど、アプリケーション層で時間のかかるビジネスロジックを停止する必要があります。
アプリケーションにマイクまたはカメラの権限がない場合のコールバックを処理する必要があります。マイク権限がない場合のエラーコードは 268455940、カメラ権限がない場合のエラーコードは 268455939 です。
他のすべてのエラーについては、トラブルシューティングのためにログに記録し、他の操作は行わないでください。
バックグラウンドミュージックコールバック
onOpenFailed: バックグラウンドミュージックの開始に失敗しました。バックグラウンドミュージック開始インターフェイスに渡された音楽パスとファイルが正しいかどうかを確認してください。startBGMAsync を呼び出して再度再生を試みることができます。
onDownloadTimeout: バックグラウンドミュージックの再生がタイムアウトしました。これは、ネットワーク URL からバックグラウンドミュージックを再生するときによく発生します。ストリーマーに現在のネットワークステータスを確認するように促す必要があります。startBGMAsync を呼び出して再度再生を試みることができます。
一般的なメソッドとインターフェイス
一般的なメソッド
/* カスタムモードでは、ユーザーは最小ビットレートとターゲットビットレートをリアルタイムで調整できます。 */
mAlivcLivePusher.setTargetVideoBitrate(800);
mAlivcLivePusher.setMinVideoBitrate(400);
/* オートフォーカスがサポートされているかどうかを確認します。 */
mAlivcLivePusher.isCameraSupportAutoFocus();
/* フラッシュがサポートされているかどうかを確認します。 */
mAlivcLivePusher.isCameraSupportFlash();
/* ストリームのアップストリーミングが進行中かどうかのステータスを取得します。 */
mAlivcLivePusher.isPushing();
/* アップストリーミング URL を取得します。 */
mAlivcLivePusher.getPushUrl();
/* ストリームアップストリーミングのパフォーマンスデバッグ情報を取得します。ストリームアップストリーミングパフォーマンスの特定のパラメーターと説明については、API ドキュメントまたはインターフェイスのコメントをご参照ください。 */
mAlivcLivePusher.getLivePushStatsInfo();
/* バージョン番号を取得します。 */
mAlivcLivePusher.getSDKVersion();
/* ログレベルを設定して、必要に応じて目的のデバッグ情報をフィルタリングします。 */
mAlivcLivePusher.setLogLevel(AlivcLivePushLogLevelAll);
/* 現在の SDK ステータスを取得します。 */
mAlivcLivePusher.getCurrentStatus();
/* 最後のエラーコードを取得します。エラーがない場合は、ALIVC_COMMON_RETURN_SUCCESS を返します。 */
mAlivcLivePusher.getLastError();一般的なインターフェイスのリスト
クラス | 説明 |
AlivcLivePushConfig | 初期ストリームアップストリーミング設定 |
AlivcLivePusher | ストリームアップストリーミング機能クラス |
AlivcLivePusherErrorListener | エラーコールバック |
AlivcLivePusherNetworkListener | ネットワーク関連の通知コールバック |
AlivcLivePusherInfoListener | ストリームアップストリーミング関連の情報コールバック |
AlivcLivePusherBGMListener | バックグラウンドミュージックコールバック |
AlivcLivePushCustomFilter | カスタムフィルターコールバック |
AlivcLivePushCustomDetect | カスタム顔検出コールバック |
AlivcSnapshotListener | スナップショットコールバック |
レタッチ機能の統合
Push SDK でレタッチ機能を使用するには、レタッチライブラリをインポートし、対応するコールバックを設定する必要があります。
レタッチ機能を使用するには、Queen SDK のライセンスを取得する必要があります。手順の詳細については、「Queen SDK のライセンスを取得する」をご参照ください。
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 コントロール
LiveBeauty プラグインライブラリを取得します。
cloneコマンドを使用して、このパス (LiveBeauty) からプラグインライブラリコードをローカルマシンにダウンロードします。git clone https://github.com/MediaBox-Demos/amdemos-android-live.gitAndroid Studio プロジェクトのルートディレクトリでコマンドラインを開きます。次のコードを実行し、
[File] > [New] > [Import Module]を使用してLiveBeautyモジュールを Android プロジェクトにインポートします。git submodule add https://github.com/MediaBox-Demos/amdemos-android-live.git ***/***/***説明サンプルコードでは、「***/***/***」は
LiveBeautyモジュールを配置する場所を表します。プロジェクトの
settings.gradleファイルに、モジュールのパスを追加します。include ':app', ':LiveBeauty', ':LiveBeauty:live_queenbeauty'説明サンプルコードでは、「app」はメインモジュールを表します。
メインモジュールの
build.gradleファイルに、LiveBeautyモジュールへの依存関係を追加します。dependencies { implementation project(':LiveBeauty') implementation project(':LiveBeauty:live_queenbeauty') }[File] > [Sync Project with Gradle Files]をクリックします。Gradle が同期するのを待ちます。その後、LiveBeautyモジュールを使用できます。
レタッチプラグイン UI モジュールを設定します。
プロジェクトのレイアウト XML ファイルに、
QueenBeautyMenuコントロールを追加します。例:<com.aliyunsdk.queen.menu.QueenBeautyMenu android:id="@+id/beauty_beauty_menuPanel" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" />Activity で、
QueenBeautyMenuを初期化します。例:// レタッチメニューパネルを初期化します。 QueenMenuPanel beautyMenuPanel = QueenBeautyMenu.getPanel(context); beautyMenuPanel.onHideMenu(); beautyMenuPanel.onHideValidFeatures(); beautyMenuPanel.onHideCopyright(); // レタッチメニューをレイアウトに追加します。 QueenBeautyMenu beautyBeautyContainerView = findViewById(R.id.beauty_beauty_menuPanel); beautyBeautyContainerView.addView(beautyMenuPanel);
顔検出とレタッチのコールバックを設定します。
サードパーティのレタッチライブラリを統合するには、setCustomDetect と setCustomFilter のコールバックを設定できます。
AlivcLivePushCustomDetect の customDetectProcess (long data, int width, int height, int rotation, int format, long extra) コールバック関数で返される data パラメーターは、キャプチャされたデータへのポインターです。サードパーティのレタッチライブラリは、このポインターからデータを認識または処理できます。
AlivcLivePushCustomFilter の customFilterProcess (int inputTexture, int textureWidth, int textureHeight, long extra) コールバック関数で返される inputTexture パラメーターは、画像のテクスチャです。サードパーティのレタッチライブラリは、このテクスチャを処理できます。処理されたテクスチャを返すには、そのテクスチャ ID を返します。それ以外の場合は、元の inputTexture を返します。
使用上の注意
Android 用 Push SDK を使用する際は、次の点に注意してください。
項目 | 説明 |
難読化ルール | 難読化ルールを確認します。SDK 関連のパッケージ名が、難読化されないパッケージのリストに追加されていることを確認してください。 |
メソッド呼び出し |
|
よくある質問
ストリームのアップストリーミングが失敗する
セルフサービスのトラブルシューティングツールを使用して、アップストリーミング URL が有効かどうかを確認できます。
アップストリーミングされたストリームに関する情報を取得するにはどうすればよいですか?
ストリーム管理に移動して、[アクティブなストリーム] タブでアップストリーミングされたオーディオおよびビデオストリームを表示および管理できます。
ストリームを再生するにはどうすればよいですか?
ストリームのアップストリーミングを開始した後、ApsaraVideo Player、FFplay、VLC などのプレーヤーを使用してストリームのプルをテストできます。再生 URL の取得方法の詳細については、「アップストリーミング URL とストリーミング URL の生成」をご参照ください。