ライブ ストリーム インジェスト向けに Push SDK for Android を登録、設定、使用する方法を、カメラキャプチャ、画面共有、レタッチなどの例を挙げて説明します。
機能
RTMP (Real-Time Messaging Protocol) によるストリーム取り込みをサポートします。
リアルタイム通信 (RTC) に基づくリアルタイムストリーミング (RTS) プロトコルを介したストリームの取り込みとストリームのプルをサポートします。
共同ストリーミングと戦闘をサポートします。
ビデオエンコーディングにH.264、オーディオエンコーディングにAdvanced Audio Coding (AAC) を採用。
ビットレート制御、解像度、表示モードなどの機能のカスタム設定をサポートします。
さまざまなカメラ操作をサポートします。
リアルタイムのレタッチをサポートし、レタッチ効果を調整できます。
アニメーションステッカーをアニメーション透かしとして追加し、アニメーションステッカーを削除できます。
画面録画をストリーミングできます。
YUVやパルス符号変調 (PCM) など、さまざまな形式の外部オーディオおよびビデオ入力をサポートします。
複数のストリームの混合をサポートします。
オーディオのみとビデオのみのストリームの取り込みと、バックグラウンドでのストリーム取り込みをサポートします。
バックグラウンドミュージックをサポートし、バックグラウンドミュージックを管理できます。
ビデオスナップショットのキャプチャをサポートします。
自動再接続とエラー処理をサポートします。
オーディオ3Aアルゴリズムをサポートします。
ビデオファイルのソフトウェアとハードウェアのエンコードモードを切り替えることができます。 これは、符号化モジュールの安定性を改善します。
制限事項
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メソッドを呼び出す必要があります。 -
onLicenceCheckコールバックをAlivcLiveBase#setListenerインターフェイスで実装して、ライセンス設定を非同期で検証します。説明このコールバックは、プッシャーインスタンスを初期化した後にのみトリガーされます。
ストリームインジェストパラメーターの設定
ストリームインジェストパラメーターにはデフォルト値があり、追加の設定は不要です。
// ストリームインジェスト設定クラスを初期化します。
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: 画像パス");
// ネットワーク状態が悪い場合に表示する画像を設定します。
mAlivcLivePushConfig.setNetworkPoorPushImage("TODO: 画像パス");
-
デバイスのパフォーマンスと帯域幅のバランスを最適化するため、解像度を 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 は、ビデオファイルなどの外部ソースからのオーディオとビデオのインジェストをサポートしています。
まず、カスタムオーディオおよびビデオ入力を有効にします。
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、幅のパラメーターは相対値です。例えば、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 | 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 |
適応解像度
適応解像度は、ネットワーク状況が悪い場合に解像度を自動的に下げて、スムーズさを向上させます。
mAlivcLivePushConfig.setEnableAutoResolution(true); // 適応解像度を有効にします。デフォルトは false です。
バックグラウンドミュージック
SDK は、バックグラウンドミュージック (BGM) の再生、ミキシング、ノイズ除去、インイヤーモニタリング、ミュートに対応しています:
/* BGM の再生を開始します。 */
mAlivcLivePusher.startBGMAsync(mPath);
/* BGM の再生を停止します。 BGM が再生中に曲を切り替える場合は、BGM の開始 API を再度呼び出すだけで十分です。 現在の BGM を停止する必要はありません。 */
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); // キャプチャした音声のボリュームを設定します。
/* 音声をミュートします。 これにより、BGM とマイク入力の両方がミュートされます。 BGM またはマイク入力の片方のみをミュートする場合は、ボリューム調整用のミキシング 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 自動生成された catch ブロック
e.printStackTrace();
} catch (IOException e) {
// TODO 自動生成された catch ブロック
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 (カメラ)。
-
その他のすべてのエラーをログに記録してください。
-
バックグラウンドミュージックコールバック
-
onOpenFailed:バックグラウンドミュージックの開始に失敗しました。ファイルパスとフォーマットを確認してから、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 のバージョンについては、最新の Demo を確認してください。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.git -
Android 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 = QueenMenuPanel.getPanel(context); beautyMenuPanel.onHideMenu(); beautyMenuPanel.onHideValidFeatures(); beautyMenuPanel.onHideCopyright(); // 美顔メニューをレイアウトに追加します。 QueenBeautyMenu beautyBeautyContainerView = findViewById(R.id.beauty_beauty_menuPanel); beautyBeautyContainerView.addView(beautyMenuPanel);
-
-
顔認識と美顔のコールバックを設定します。
サードパーティ製の美顔ライブラリを統合する必要がある場合は、
setCustomDetectとsetCustomFilterコールバックを設定します。-
customDetectProcessでは、dataPtrパラメーターは、サードパーティ処理用にキャプチャされたデータへのポインターです。 -
customFilterProcessでは、inputTextureパラメーターは処理用の画像テクスチャです。処理済みのテクスチャ ID を返すか、変更がない場合は元のinputTextureを返します。
-
使用上の注意
|
項目 |
説明 |
|
難読化ルール |
難読化の問題を防ぐため、SDK のパッケージ名を ProGuard 除外リストに追加してください。
|
|
API 呼び出しシーケンス |
|
よくある質問
ストリームインジェストが失敗するのはなぜですか?
トラブルシューティングツールを使用して、インジェスト URL を検証してください。
アクティブなストリームの情報を取得するにはどうすればよいですか?
ストリーム管理ページで、アクティブなストリームを表示および管理できます。
ストリーム再生をテストするにはどうすればよいですか?
インジェストの開始後に、Alibaba Cloud プレーヤー、FFplay、または VLC を使用して再生をテストしてください。詳細については、インジェスト URL とストリーミング URL の生成をご参照ください。