Push SDK for Android を登録、設定、使用してライブアップストリーミングを行う方法について、カメラキャプチャ、画面共有、レタッチなどの例を交えて説明します。
機能
リアルタイムメッセージングプロトコル (RTMP) でのアップストリーミングをサポートします。
Real-Time Communication (RTC) に基づく RTS のアップストリーミングとプルをサポートします。
共同ストリーミングと対戦をサポートします。
ビデオエンコーディングには H.264 を、音声エンコーディングには AAC を採用しています。
ビットレート制御、解像度、表示モードなどの機能のカスタム設定をサポートします。
さまざまなカメラ操作をサポートします。
リアルタイムのレタッチとカスタムレタッチ効果をサポートします。
ウォーターマークとしてアニメーションスタンプを追加および削除できます。
画面録画をストリーミングできます。
YUV やパルス符号変調 (PCM) など、さまざまなフォーマットの外部音声およびビデオ入力をサポートします。
複数のストリームのミキシングをサポートします。
音声のみおよびビデオのみのストリームのアップロードと、バックグラウンドでのアップストリーミングをサポートします。
BGM をサポートします。
ビデオスナップショットのキャプチャをサポートします。
自動再接続とエラー処理をサポートします。
自動ゲイン制御 (AGC)、自動ノイズリダクション (ANR)、アコースティックエコーキャンセレーション (AEC) アルゴリズムをサポートします。
ビデオファイルのソフトウェアエンコーディングモードとハードウェアエンコーディングモードを切り替えることができます。これにより、エンコーディングモジュールの安定性が向上します。
制限事項
Push SDK for Android を使用する前に、次の制限事項にご注意ください:
アップストリーミングの前に画面の向きを設定する必要があります。ライブストリーミング中に画面を回転させることはできません。
横向きモードでアップストリーミングを行うには、画面の自動回転を無効にする必要があります。
ハードウェアエンコーディングモードでは、エンコーダーとの互換性を保つため、出力解像度の値を 16 の倍数にする必要があります。たとえば、解像度を 540p に設定した場合、出力解像度は 544 × 960 になります。黒帯を防ぐために、出力解像度に基づいてプレーヤーの画面サイズを調整する必要があります。
API リファレンス
操作手順
機能の使用方法
SDK の登録
ライセンスを取得して設定するには、「Push SDK ライセンスの統合」をご参照ください。
アップストリーミング機能を使用する前に、SDK を登録する必要があります。
Push SDK for Android を使用する前に、アプリケーションのライフサイクルの早い段階でライセンス登録 API を呼び出してください。
AlivcLiveBase.setListener(new AlivcLiveBaseListener() {
@Override
public void onLicenceCheck(AlivcLivePushConstants.AlivcLiveLicenseCheckResultCode result, String reason) {
Log.e(TAG, "onLicenceCheck: " + result + ", " + reason);
}
});
AlivcLiveBase.registerSDK();AlivcLiveBaseクラスを使用して、ログレベルの設定、ローカルログパスの指定、SDK バージョンの取得を行います。SDK ライセンスを登録するには、AlivcLiveBase の
registerSDKメソッドを呼び出す必要があります。AlivcLiveBase#setListenerインターフェイスのonLicenceCheckコールバックを実装して、ライセンス設定を非同期で検証します。説明このコールバックは、プッシャーインスタンスを初期化した後にのみトリガーされます。
アップストリーミングパラメーターの設定
アップストリーミングパラメーターにはデフォルト値があり、追加の設定は不要です。
// アップストリーミング設定クラスを初期化します。
AlivcLivePushConfig mAlivcLivePushConfig = new AlivcLivePushConfig();
// アップストリーミングモードを設定します。デフォルトは基本モードです。
mAlivcLivePushConfig.setLivePushMode(AlivcLiveMode.AlivcLiveBasicMode);
// 解像度を設定します。デフォルトは 540p です。
mAlivcLivePushConfig.setResolution(AlivcResolutionEnum.RESOLUTION_540P);
// フレームレートを設定します。デフォルトは 25 fps です。
mAlivcLivePushConfig.setFps(AlivcFpsEnum.FPS_25);
// ビデオエンコーディングの 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 に設定してください。
ビットレート制御を無効にすると、ビットレートは初期値に固定され、ネットワーク状態に適応しなくなるため、再生がコマ落ちする可能性があります。
カメラストリームの取り込み
初期化
アップストリーミングパラメーターを設定した後、
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) { // プレビューが開始されたことの通知。 } // その他のオーバーライドメソッド //.... //.... });プレビューの開始
カメラプレビュー用の
SurfaceViewを渡してプレビューを開始します:mAlivcLivePusher.startPreview(mSurfaceView); // プレビューを開始します。必要に応じて非同期の startPreviewAsync メソッドを呼び出すこともできます。アップストリーミングの開始
onPreviewStarted コールバックメソッド内に次のコードを追加します。
mAlivcLivePusher.startPush(mPushUrl);説明RTMP および RTS (artc://) の取り込み URL がサポートされています。URL を取得するには、「取り込み URL とストリーミング URL の生成」をご参照ください。
ApsaraVideo Live は、同じ URL への同時アップストリーミングリクエストを拒否します。
一般的なアップストリーミングメソッド
SDK は、ストリームのライフサイクル (開始、停止、一時停止、再開、再起動、再接続、破棄) を制御するメソッドを提供します。
/* アップストリーミング中のストリームを一時停止します。一時停止後、ビデオプレビューとビデオアップストリーミングは最後のフレームで保持され、音声アップストリーミングは継続されます。*/
mAlivcLivePusher.pause();
/* 一時停止したストリームを再開します。再開後、音声とビデオのプレビューおよびアップストリーミングは通常の状態に戻ります。*/
mAlivcLivePusher.resume();
/* アップストリーミング中のストリームを停止します。完了後、アップストリーミングは停止します。*/
mAlivcLivePusher.stopPush();
/* プレビュー状態の場合にのみプレビューを停止します。アップストリーミング中に呼び出しても効果はありません。プレビューが停止すると、プレビューフレームは最後のフレームでフリーズします。*/
mAlivcLivePusher.stopPreview();
/* ストリームがアップストリーミング中、またはエラー関連のコールバックを受信した後に、アップストリーミングを再起動します。エラー状態では、この API、reconnectPushAsync、または destroy のみを呼び出すことができます。再起動すると、プレビューとアップストリーミングを含む AlivcLivePusher のすべての内部リソースが再初期化されます。*/
mAlivcLivePusher.restartPush();
/* ストリームがアップストリーミング中、または AlivcLivePusherNetworkDelegate に関連するエラーコールバックを受信した後に、ストリームを再接続します。エラー状態では、この API、restartPush、または destroy のみを呼び出すことができます。再接続すると、アップストリーミングのための RTMP 接続が再確立されます。*/
mAlivcLivePusher.reconnectPushAsync();
/* アップストリーミングインスタンスを破棄します。破棄後、アップストリーミングとプレビューは停止し、プレビューサーフェスは削除されます。AlivcLivePusher に関連するすべてのリソースが解放されます。*/
mAlivcLivePusher.destroy();カメラ操作
アップストリーミング、一時停止、または再接続中に、カメラの切り替え、フラッシュの切り替え、フォーカス、ズーム、ミラーリングの調整を行います:
/* フロントカメラとリアカメラを切り替えます。*/
mAlivcLivePusher.switchCamera();
/* フラッシュをオンまたはオフにします。フロントカメラがアクティブな場合、フラッシュをオンにしても効果はありません。*/
mAlivcLivePusher.setFlash(true);
/* 焦点距離を調整して、キャプチャした画像をズームします。ズーム範囲は [0, getMaxZoom()] です。*/
mAlivcLivePusher.setZoom(5);
/* カメラを手動でフォーカスします。これには 2 つのパラメーターが必要です:1. `point` (フォーカスするポイントの座標) と 2. `autoFocus` (この特定の操作でオートフォーカスを有効にするかどうか)。その後のオートフォーカスの動作は、setAutoFocus API で設定された値に従います。*/
mAlivcLivePusher.focusCameraAtAdjustedPoint(x, y, true);
/* オートフォーカスを有効にするかどうかを設定します。*/
mAlivcLivePusher.setAutoFocus(true);
/* ミラーリングを設定します。ミラーリング API は 2 つあります:アップストリーミング用の PushMirror とローカルプレビュー用の PreviewMirror です。PushMirror は再生表示にのみ影響し、PreviewMirror はプレビュー表示にのみ影響します。互いに影響しません。*/
mAlivcLivePusher.setPreviewMirror(false);
mAlivcLivePusher.setPushMirror(false);カメラ API は、プレビューが開始された後にのみ利用可能です。
画面共有ストリームのインジェスト
画面共有は MediaProjection を使用し、ユーザーの権限が必要です。権限の結果データを SDK に渡します。画面共有中は、カメラはデフォルトで無効になっています。
画面共有の設定
// resultData は画面共有システムのインテントです。
mAlivcLivePushConfig.setMediaProjectionPermissionResultData(resultData);画面回転の設定
画面の回転角度を設定して、画面共有中の横向きおよび縦向きの録画をサポートします:
mAlivcLivePusher.setScreenOrientation(0);アプリケーション層で OrientationEventListener イベントをリッスンし、画面の向きが変わったときにこの API を通じて回転角度を設定する必要があります。
プライバシー保護の設定
画面共有中にプライバシー保護を有効にして、パスワードなどの機密入力を非表示にします:
mAlivcLivePusher.pauseScreenCapture(); // プライバシー保護を有効にします。
mAlivcLivePusher.resumeScreenCapture(); // プライバシー保護を無効にします。これにより画面共有が一時停止します。設定で setPausePushImage が設定されている場合、視聴者には指定された画像が表示されます。そうでない場合、視聴者には一時停止前の最後のフレームが表示されます。
カメラと画面共有のストリームを取り込む
画面共有中にカメラのアップロードを有効にできます。2 つのアプローチがあります:
ストリーマーにカメラプレビューがある。
ストリーマーと視聴者の両方がカメラフィードを見ることができます。
ストリーマーにカメラプレビューがない。
たとえば、ゲームストリーミング中、ストリーマーはカメラビューがゲームを妨げることを望まないかもしれません。しかし、視聴者は最終的なストリームでストリーマーのカメラフィードを見ることができます。
ストリーマーがカメラプレビューを見ることができる
画面共有が開始された後、API を呼び出してカメラプレビューを開始または停止します。
mAlivcLivePusher.startCamera(surfaceView); // カメラプレビューを開始します。
mAlivcLivePusher.stopCamera(); // カメラプレビューを停止します。画面回転時の調整を避けるため、カメラプレビューの
surfaceViewのアスペクト比を 1:1 に設定します。アスペクト比が 1:1 でない場合、画面が回転したときに
surfaceViewの比率を調整し、stopCameraを呼び出した後にstartCameraを呼び出す必要があります。ストリーマーがプレビューを必要としない場合は、
surfaceviewを null に設定します。
ストリーマーがカメラプレビューを見ることができない
カメラストリームミキシングを有効にして、ローカルプレビューなしでカメラフィードをストリームに含めます。
mAlivcLivePusher.startCameraMix(x, y, w, h); // カメラストリームミキシングを有効にし、ミックスされたストリームの x, y, w, h レイアウトを設定します。
mAlivcLivePusher.stopCameraMix(); // カメラストリームミキシングを停止します。プレビュー表示モード
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);画像ストリームのアップロード
SDKは、アプリがバックグラウンドにある場合やネットワークの状態が悪い場合に、プレースホルダーイメージを取り込むことができます。
アプリがバックグラウンドに入ると、ビデオのアップロードは一時停止しますが、音声は継続されます。視聴者に知らせるためにプレースホルダー画像を表示します:
mAlivcLivePushConfig.setPausePushImage("path/to/background.png"); // バックグラウンドアップストリーミング用の画像を設定します。SDK は、ビットレートの低下を検出するとこの画像をアップロードし、ビデオのコマ落ちを減らします:
mAlivcLivePushConfig.setNetworkPoorPushImage("path/to/network_poor.png"); // ネットワーク状態が悪いときにアップロードする画像を設定します。音声のみのアップストリーミング
mAlivcLivePushConfig.setAudioOnly(true);外部の音声およびビデオストリームのアップロード
SDK は、ビデオファイルなどの外部ソースからの音声およびビデオのアップロードをサポートしています。
まず、カスタムの音声およびビデオ入力を有効にします:
/**
* 出力解像度、音声サンプルレート、チャンネル数などの他のパラメーターは、
* setResolution、setAudioSampleRate、setAudioChannels を使用して config オブジェクトで設定されます。
*/
mAlivcLivePushConfig.setExternMainStream(true,AlivcImageFormat.IMAGE_FORMAT_YUVNV12,AlivcSoundFormat.SOUND_FORMAT_S16);カスタムオーディオ/ビデオ入力を有効にすると、外部ストリームを取り込むことができます。
外部音声ストリームのアップロード
/**
* この API はタイミングを制御しません。呼び出し元が入力音声フレームのタイミングを制御する必要があります。
*/
mAlivcLivePusher.inputStreamAudioData(byte[] data, int size, int sampleRate, int channels, long pts);外部ビデオストリームの取り込み
/**
* この API はタイミングを制御しません。呼び出し元が入力ビデオフレームのタイミングを制御する必要があります。
*/
mAlivcLivePusher.inputStreamVideoData(byte[] data, int width, int height, int stride, int size, long pts, int rotation);ウォーターマークの設定
PNG 形式のウォーターマークを 1 つ以上追加します:
mAlivcLivePushConfig.addWaterMark(waterPath,0.1,0.2,0.3); // ウォーターマークを追加します。x、y、および width パラメーターは相対値です。たとえば、x=0.1 は、ウォーターマークの x 座標がストリームの幅の 10% の位置にあることを意味します。ストリームの解像度が 540x960 の場合、ウォーターマークの x 座標は 54 になります。
ウォーターマーク画像の高さは、元の縦横比と指定された幅の値に基づいて比例的にスケーリングされます。
テキストウォーターマークを実装するには、まずテキストを画像に変換し、次にこの API を使用してウォーターマークとして追加します。
ビデオ品質の設定
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 kbit/s
mAlivcLivePushConfig.setMinVideoBitrate(300); // 最小ビットレート:300 kbit/s
mAlivcLivePushConfig.setInitialVideoBitrate(800); // 初期ビットレート:800 kbit/s以下の推奨ビットレート設定をご参照ください:
表 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); // 解像度適応を有効にします。デフォルトは false です。解像度適応は、解像度優先または流暢性優先モードでのみ機能し、カスタムモードでは機能しません。
一部のプレーヤーは動的な解像度の変更をサポートしていません。互換性のために Alibaba Cloud プレーヤーを使用してください。
BGM
SDK は、BGM の再生、ミキシング、ノイズ除去、インイヤーモニタリング、ミュートをサポートしています:
/* BGM の再生を開始します。*/
mAlivcLivePusher.startBGMAsync(mPath);
/* BGM の再生を停止します。BGM がすでに再生中で曲を切り替える必要がある場合は、現在の BGM を停止する必要はなく、再度 BGM 開始 API を呼び出すだけです。*/
mAlivcLivePusher.stopBGMAsync();
/* BGM を一時停止します。これは BGM が再生を開始した後にのみ呼び出すことができます。*/
mAlivcLivePusher.pauseBGM();
/* BGM を再開します。これは BGM が一時停止している場合にのみ呼び出すことができます。*/
mAlivcLivePusher.resumeBGM();
/* BGM のループを有効にします。*/
mAlivcLivePusher.setBGMLoop(true);
/* ノイズ除去スイッチを設定します。有効にすると、キャプチャされた音声の非人間的な音がフィルタリングされます。これにより、人間の声がわずかに抑制される場合があります。ユーザーがこの機能を有効にするかどうかを選択できるようにすることを推奨します。デフォルトでは無効になっています。*/
mAlivcLivePusher.setAudioDenoise(true);
/* インイヤーモニタリングスイッチを設定します。この機能は主にカラオケシナリオで使用されます。ヘッドフォンを接続して有効にすると、ストリーマーは自分の声を聞くことができます。無効にすると、聞こえません。ヘッドフォンが接続されていない場合は効果がありません。*/
mAlivcLivePusher.setBGMEarsBack(true);
/* ミキシングを設定して、BGM とキャプチャされた音声の音量を調整します。*/
mAlivcLivePusher.setBGMVolume(50); // BGM の音量を設定します。
mAlivcLivePusher.setCaptureVolume(50); // キャプチャされた音声の音量を設定します。
/* 音声をミュートします。これにより、音楽と音声入力の両方がミュートされます。音楽または音声のみをミュートするには、ミキシング音量調整 API を使用します。*/
mAlivcLivePusher.setMute(true);BGM API は、プレビューが開始された後にのみ利用可能です。
ストリームスナップショット
ローカルビデオストリームのスナップショットを撮ります:
// ビデオストリームのスナップショットを撮ります。パラメーター:キャプチャする画像の数、各キャプチャ間の間隔 (秒)、およびコールバックリスナー。
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)API を呼び出して、アプリがバックグラウンドにあるときや画面がロックされているときに音声をキャプチャするかどうかを決定できます。
コールバック
コールバックタイプ | コールバッククラス名 | 設定方法 |
AlivcLivePushInfoListener |
| |
AlivcLivePushNetworkListener |
| |
AlivcLivePushErrorListener |
| |
AlivcLivePushBGMListener |
|
ストリーム取り込みコールバック
アップストリーミングコールバックは、SDK のステータスの変更 (プレビュー開始、最初のフレームのレンダリング、最初のフレームの送信、アップストリーミング開始、アップストリーミング停止) をアプリに通知します。
onPushStarted:サーバーへの接続が成功したことを示します。onFirstFramePushed:最初の音声またはビデオフレームが正常に送信されたことを示します。onPushStartedおよびonFirstFramePushedコールバックは、SDK がアップストリーミングを正常に開始したことを示します。
ネットワーク関連のコールバック
ネットワークコールバックは接続ステータスを報告します。SDK は、AlivcLivePushConfig で設定されたタイムアウトとリトライ制限内で、短いネットワーク変動時に自動的に再接続します。
onConnectFail:アップストリーミングに失敗しました。アップストリーミング URL の有効性、認証の問題、同時ストリーム制限、またはブロックリストのステータスを確認してください。エラーコード:0x30020901–0x30020905, 0x30010900–0x30010901。onConnectionLost:接続が失われました。SDK は自動的に再接続し、onReconnectStartをトリガーします。リトライ回数がconfig.connectRetryCountを超えると、onReconnectFailが発生します。onNetworkPoor:ネットワークが安定したアップストリーミングには不十分ですが、ストリームは中断されていません。これを使用して UI 通知を表示します。onNetworkRecovery:ネットワークが回復しました。onReconnectFail:AlivcLivePushConfig のタイムアウトとリトライ制限を超えた後、自動再接続に失敗しました。ネットワークが回復した後、mAlivcLivePusher.reconnectPushAsyncを呼び出して手動で再接続します。onSendDataTimeout:データ送信がタイムアウトしました。ネットワークを確認し、アップストリーミングを停止して再起動してください。onPushURLAuthenticationOverdue:アップストリーミング URL の認証が期限切れになりました。SDK に新しい URL を提供してください。
エラーコールバック
onSystemError:システムまたはデバイスのエラー。エンジンを破棄して再試行してください。onSDKError:エラーコードに基づいて処理します:エラー 805438211:デバイスのパフォーマンスが低く、エンコーディングのフレームレートが低い。ストリーマーに通知し、高度なレタッチなどのリソースを大量に消費する操作を停止してください。
権限不足のエラーを処理します:268455940 (マイク) および 268455939 (カメラ)。
他のすべてのエラーをログに記録します。
BGM コールバック
onOpenFailed:BGM の開始に失敗しました。ファイルパスとフォーマットを確認し、再度startBGMAsyncを呼び出してください。onDownloadTimeout:音楽の再生がタイムアウトしました。通常、URL からストリーミングしている場合に発生します。ネットワークを確認し、再度startBGMAsyncを呼び出してください。
一般的なメソッドと API
一般的なメソッド
/* カスタムモードでは、最小およびターゲットビットレートをリアルタイムで調整できます。*/
mAlivcLivePusher.setTargetVideoBitrate(800);
mAlivcLivePusher.setMinVideoBitrate(400);
/* カメラがオートフォーカスをサポートしているかどうかを確認します。*/
mAlivcLivePusher.isCameraSupportAutoFocus();
/* カメラがフラッシュをサポートしているかどうかを確認します。*/
mAlivcLivePusher.isCameraSupportFlash();
/* 現在のアップストリーミングステータスを取得します。*/
mAlivcLivePusher.isPushing();
/* アップストリーミング URL を取得します。*/
mAlivcLivePusher.getPushUrl();
/* アップストリーミングのパフォーマンスとデバッグ情報を取得します。パフォーマンスパラメーターの詳細については、API リファレンスまたはインターフェイスのコメントをご参照ください。*/
mAlivcLivePusher.getLivePushStatsInfo();
/* SDK のバージョン番号を取得します。*/
mAlivcLivePusher.getSDKVersion();
/* 必要に応じてデバッグ情報をフィルタリングするためにログレベルを設定します。*/
mAlivcLivePusher.setLogLevel(AlivcLivePushLogLevelAll);
/* SDK の現在のステータスを取得します。*/
mAlivcLivePusher.getCurrentStatus();
/* 最後のエラーコードを取得します。エラーがない場合は ALIVC_COMMON_RETURN_SUCCESS を返します。*/
mAlivcLivePusher.getLastError();一般的な API
クラス | 説明 |
AlivcLivePushConfig | ストリーム取り込みの初期構成 |
AlivcLivePusher | ストリーム取り込み機能のクラスです。 |
AlivcLivePusherErrorListener | エラー用のコールバックです。 |
AlivcLivePusherNetworkListener | ネットワーク関連の通知に関するコールバック。 |
AlivcLivePusherInfoListener | アップストリーミング情報のコールバック |
AlivcLivePusherBGMListener | バックグラウンドミュージックのコールバック |
AlivcLivePushCustomFilter | カスタムフィルターのコールバック。 |
AlivcLivePushCustomDetect | カスタム顔認識のコールバック。 |
AlivcSnapshotListener | スナップショットのコールバック。 |
レタッチの統合
レタッチライブラリをインポートし、コールバックを設定してレタッチを有効にします。
レタッチにはレタッチ SDK のライセンスが必要です。Queen SDK のライセンスを取得する。
Maven 経由でレタッチライブラリをインポートします。
build.gradleファイルに以下を追加します。 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コールバックを設定します。customDetectProcessでは、dataパラメーターはサードパーティ処理用のキャプチャデータへのポインターです。customFilterProcessでは、inputTextureパラメーターは処理対象の画像テクスチャです。処理されたテクスチャ ID を返すか、変更されていない場合は元のinputTextureを返します。
注意事項
項目 | 説明 |
難読化ルール | 難読化による問題を防ぐために、SDK のパッケージ名を ProGuard の除外リストに追加してください。 |
API 呼び出しシーケンス |
|
よくある質問
アップストリーミングが失敗するのはなぜですか?
トラブルシューティングツールを使用して、アップストリーミング URL を検証します。
アクティブなストリームに関する情報を取得するにはどうすればよいですか?
ストリーム管理ページでアクティブなストリームを表示および管理します。
ストリームの再生をテストするにはどうすればよいですか?
アップストリーミングを開始した後、Alibaba Cloud プレーヤー、FFplay、または VLC で再生をテストします。「アップストリーミング URL とストリーミング URL の生成」をご参照ください。