このトピックでは、Android向けプッシュSDKの使用方法と、SDKのクラスとメソッドについて説明します。また、Android向けプッシュSDKで提供される機能の使用方法の例も示します。このトピックを読むことで、ライブストリーミングにSDKを使用する方法をより深く理解できます。
モバイルデバイスでのストリームの取り込み方法の詳細については、「ストリームの取り込み、ストリームのプッシュ、およびストリーミング」をご参照ください。
機能
リアルタイムメッセージングプロトコル(RTMP)を介したストリームの取り込みをサポートします。
リアルタイムコミュニケーション(RTC)に基づくリアルタイムストリーミング(RTS)プロトコルを介したストリームの取り込みとストリームのプッシュをサポートします。
共同ストリーミングとバトルをサポートします。
ビデオエンコーディングには H.264、オーディオエンコーディングには Advanced Audio Coding(AAC)を採用しています。
ビットレート制御、解像度、表示モードなどの機能のカスタム設定をサポートします。
さまざまなカメラ操作をサポートします。
リアルタイムレタッチをサポートし、レタッチ効果を調整できます。
アニメーションステッカーをアニメーションウォーターマークとして追加したり、アニメーションステッカーを削除したりできます。
画面録画のストリーミングを可能にします。
YUVやパルス符号変調(PCM)などのさまざまな形式の外部オーディオおよびビデオ入力をサポートします。
複数のストリームのミキシングをサポートします。
オーディオのみおよびビデオのみのストリームの取り込みと、バックグラウンドでのストリームの取り込みをサポートします。
バックグラウンドミュージックをサポートし、バックグラウンドミュージックを管理できます。
ビデオスナップショットのキャプチャをサポートします。
自動再接続とエラー処理をサポートします。
オーディオ 3A アルゴリズムをサポートします。
ビデオファイルのソフトウェアエンコーディングモードとハードウェアエンコーディングモードを切り替えることができます。これにより、エンコーディングモジュールの安定性が向上します。
Android向けプッシュSDKのクラス
クラス | 説明 |
AlivcLivePushConfig | ストリーム取り込み設定用のクラスです。 |
AlivcLivePusher | ストリーム取り込み機能用のクラスです。 |
AlivcLivePusherErrorListener | エラーコールバック用のクラスです。 |
AlivcLivePusherNetworkListener | ネットワークコールバック用のクラスです。 |
AlivcLivePusherInfoListener | ストリーム取り込みコールバック用のクラスです。 |
AlivcLivePusherBGMListener | バックグラウンドミュージックコールバック用のクラスです。 |
AlivcLivePushCustomFilter | カスタムフィルターコールバック用のクラスです。 |
AlivcLivePushCustomDetect | カスタム顔検出コールバック用のクラスです。 |
AlivcSnapshotListener | スナップショットコールバック用のクラスです。 |
制限事項
Android向けプッシュSDKを使用する前に、以下の制限事項に注意してください。
ストリーム取り込み前に画面の向きを設定する必要があります。ライブストリーミング中は画面を回転させることはできません。
横向きモードでのストリーム取り込みの場合は、画面の自動回転を無効にする必要があります。
ハードウェアエンコーディングモードでは、出力解像度の値はエンコーダーとの互換性のために16の倍数である必要があります。たとえば、解像度を 540p に設定した場合、出力解像度は 544 × 960 になります。黒い帯を防ぐために、出力解像度に基づいてプレーヤーの画面サイズを調整する必要があります。
手順
次の表は、Android向けプッシュSDKの基本版の使用方法を示しています。
手順 | 説明 | 参照 |
1. SDKを登録します。 | ライセンス関連のパラメーターを設定して、Android向けプッシュSDKを登録します。登録機能を呼び出さない場合、ストリーム取り込み機能を使用できません。 | |
2. ストリーム取り込みパラメーターを設定します。 | 基本パラメーター、ビットレート制御モード、適応解像度機能、レタッチ機能など、ストリーム取り込みの設定を完了します。 | |
3. Android向けプッシュSDKを使用してストリームを取り込みます。 | Android向けプッシュSDKを初期化し、ストリーム取り込みコールバックを登録し、プレビュービューを作成したら、ストリームの取り込みを開始できます。ビジネス要件に基づいて、ストリームの管理、バックグラウンドミュージックの設定、カメラ設定の設定、外部オーディオソースの取り込み、アニメーションステッカーの追加を行うことができます。 重要
| |
4. (オプション)画面録画のストリーム取り込みを設定します。 | 画面録画をストリーミングする場合は、画面録画のストリーム取り込みを設定します。 |
次の表は、Android向けプッシュSDKのインタラクティブ版の使用方法を示しています。
手順 | 説明 | 参照 |
1. SDKを登録します。 | ライセンス関連のパラメーターを設定して、Android向けプッシュSDKを登録します。登録機能を呼び出さない場合、ストリーム取り込み機能を使用できません。 | |
2. 共同ストリーミング設定を行います。 | 共同ストリーミング設定を行った後、ストリーマーと視聴者は、Android向けプッシュSDKのインタラクティブ版を使用して、300ミリ秒未満の超低レイテンシで相互にやり取りできます。 |
SDK の登録
Android向けプッシュSDK V4.4.2以降では、オールインワンライセンスが使用されます。ストリーム取り込み機能を使用するには、Android向けプッシュSDKを登録する必要があります。詳細については、「プッシュSDKライセンスを統合する」をご参照ください。
ストリーム取り込みパラメーターの設定(基本版)
AlivcLivePushConfigクラスを使用して、ストリーム取り込みパラメーターを設定できます。各パラメーターにはデフォルト値があります。ビジネス要件に基づいてパラメーターの値を変更できます。各パラメーターのデフォルト値と有効値の詳細については、Android向けプッシュSDK V6.9.0 APIリファレンス(基本版)またはAndroid向けプッシュSDK V6.9.0 APIリファレンス(インタラクティブ版)を参照してください。
ストリーム取り込み中にこれらのパラメーターをリアルタイムで変更するには、AlivcLivePusherクラスが提供するメソッドを参照してください。
基本的なストリーム取り込み設定を完了します。
基本的なストリーム取り込み設定に使用されるすべてのパラメーターにはデフォルト値があります。デフォルト値を使用することをお勧めします。
重要携帯電話の性能とネットワーク帯域幅の要件に基づいて、解像度を 540p に設定することをお勧めします。ほとんどの場合、ライブストリーミング用の主流アプリは 540p を使用します。
適応ビットレートストリーミングが無効になっている場合、ビットレートは初期値に固定され、指定されたターゲットビットレートと最小ビットレートの間で自動的に調整されません。この場合、ネットワークが不安定なときに途切れが発生する可能性があります。この機能を無効にする前に、注意して進めてください。
ビットレート制御モードを指定します。
AlivcQualityModeEnum パラメーターを設定して、ビットレート制御モードを指定できます。Android向けプッシュSDKは、複数のビットレート制御モードを提供します。ビジネス要件に基づいて各パラメーターの値を指定します。次の表に、ビットレート制御モードを示します。
ビットレート制御モード
説明
サンプルコード
QM_RESOLUTION_FIRST
画質優先モード。Android向けプッシュSDKは、ビデオストリームの画質を優先するようにビットレートパラメーターを設定します。
mAlivcLivePushConfig.setQualityMode(AlivcQualityModeEnum.QM_RESOLUTION_FIRST); // モードを画質優先に設定します。QM_FLUENCY_FIRST
滑らかさ優先モード。Android向けプッシュSDKは、ビデオストリームの滑らかさを優先するようにビットレートパラメーターを設定します。
mAlivcLivePushConfig.setQualityMode(AlivcQualityModeEnum.QM_FLUENCY_FIRST);// モードを滑らかさ優先に設定します。QM_CUSTOM
カスタムモード。Android向けプッシュSDKは、カスタム設定に基づいてビットレートパラメーターを設定します。カスタムモードを使用する場合、ビジネス要件に基づいて画質優先または滑らかさ優先を選択し、初期ビットレート、最小ビットレート、ターゲットビットレートを指定できます。
initialVideoBitrate:ライブストリーム開始時の初期ビットレート。
minVideoBitrate:ネットワーク状態が悪い場合、途切れを防ぐためにビットレートは徐々に最小ビットレートまで低下します。
targetVideoBitrate:ネットワーク状態が良い場合、ビデオストリームの画質を向上させるためにビットレートは徐々にターゲットビットレートまで増加します。
mAlivcLivePushConfig.setQualityMode(AlivcQualityModeEnum.QM_CUSTOM); mAlivcLivePushConfig.setTargetVideoBitrate(1000); // ターゲットビットレートは 1,000 Kbit/s です。 mAlivcLivePushConfig.setMinVideoBitrate(300); // 最小ビットレートは 300 Kbit/s です。 mAlivcLivePushConfig.setInitialVideoBitrate(800); // 初期ビットレートは 800 Kbit/s です。説明画質優先モードまたは滑らかさ優先モードを使用する場合、initialVideoBitrate、minVideoBitrate、targetVideoBitrateパラメーターを設定する必要はありません。プッシュSDKは、ネットワークジッターが発生した場合にビデオストリームの画質または滑らかさを確保できます。
カスタムモードを使用する場合は、推奨設定に基づいてビットレートパラメーターを設定します。次の表に、推奨設定を示します。
表 1. 画質優先モードのカスタムビットレートの推奨設定
解像度
initialVideoBitrate
minVideoBitrate
targetVideoBitrate
360p
600
300
1000
480p
800
300
1200
540p
1000
600
1400
720p
1500
600
2000
1080p
1800
1200
2500
表 2. 滑らかさ優先モードのカスタムビットレートの推奨設定
解像度
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 です。重要適応解像度機能はすべてのプレーヤーでサポートされているわけではありません。この機能を使用する必要がある場合は、ApsaraVideo Playerを使用することをお勧めします。
適応解像度機能は、AlivcQualityModeEnumパラメーターを設定して画質優先モードまたは滑らかさ優先モードを使用する場合にのみ有効になります。カスタムモードを使用する場合は、この機能は使用できません。
レタッチ機能を設定します。
Android向けプッシュSDKでレタッチ機能を使用するには、レタッチライブラリをインポートし、コールバックを設定する必要があります。
Mavenの依存関係を使用して、レタッチライブラリとレタッチパネルをインポートします。Queen SDKデモの最新バージョンを指定して、次のコードをプロジェクトの build.gradle ファイルに追加します。
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モジュールを取得します。
説明ライセンスの取得方法については、「Queen SDKのライセンスを取得する」をご参照ください。
cloneコマンドを使用して、GitHub からプラグインライブラリのコードをダウンロードします。git clone https://github.com/MediaBox-Demos/amdemos-android-live.gitAndroid Studio プロジェクトのルートディレクトリで、コマンドラインインターフェースを開き、次のコードを実行します。次に、[ファイル] > [新規] > [モジュールのインポート] を選択し、
LiveBeautyモジュールをプロジェクトにインポートします。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') }[ファイル] > [Gradleファイルとプロジェクトを同期] を選択します。同期が完了すると、
LiveBeautyモジュールが使用可能になります。
プラグインのUIを設定します。
QueenBeautyMenuをXMLレイアウトファイルに追加します。<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" />アクティビティで
QueenBeautyMenuを初期化します。// 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コールバックによって返される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の値が返されます。
バックグラウンドストリーム取り込み用の画像を指定します。
Android向けプッシュSDKでは、アプリがバックグラウンドに切り替えられたとき、またはビットレートが低いときに画像を取り込むことができます。これにより、ユーザーエクスペリエンスが向上します。アプリがバックグラウンドに切り替えられると、ビデオストリームの取り込みは一時停止されます。この場合、オーディオストリームのみが取り込まれます。取り込みたい画像を指定することもできます。たとえば、ストリーマーはすぐに戻ります。などのメッセージが表示された画像を取り込んで、視聴者に通知することができます。サンプルコード:
mAlivcLivePushConfig.setPausePushImage("取り込み用の指定されたPNG形式の画像のパス"); // アプリがバックグラウンドに切り替えられたときのストリーム取り込み用の画像を指定します。ネットワーク状態が悪い場合にストリーム取り込み用の静止画像を指定できます。ビットレートが低い場合、途切れを防ぐために指定した画像が取り込まれます。サンプルコード:
mAlivcLivePushConfig.setNetworkPoorPushImage("ネットワーク状態が悪いときに取り込まれる指定された画像のパス");// ネットワーク状態が悪い場合のストリーム取り込み用の画像を指定します。ウォーターマークを設定します。
Android向けプッシュSDKでは、1つまたは複数のウォーターマークを追加できます。ウォーターマークはPNG形式である必要があります。サンプルコード:
mAlivcLivePushConfig.addWaterMark(waterPath,0.1,0.2,0.3); // ウォーターマークを追加します。説明x、y、widthパラメーターの値は相対値です。たとえば、xパラメーターの値が 0.1 の場合、ウォーターマークの左端がストリームのx軸上の 10% の位置にあることを示します。したがって、ストリームの解像度が 540 × 960 の場合、xパラメーターの値は 54 になります。
ウォーターマークの高さは、ソース画像の幅と高さ、およびウォーターマークの入力幅の値に基づいて調整されます。
テキストウォーターマークを追加する場合は、テキストを画像に変換し、addWaterMarkメソッドを呼び出して画像をウォーターマークとして追加できます。
プレビューモードを指定します。
Android向けプッシュSDKは、次のプレビューモードをサポートしています。プレビューモードはストリーム取り込みには影響しません。
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向けプッシュSDKのコアクラスです。このクラスは、初期化、ストリーム取り込みコールバック、カメラプレビュー、ストリーム取り込み管理のためのパラメーターを提供します。また、このクラスを使用して、ストリーム取り込み中にパラメーターを変更することもできます。
クラスのメソッドを使用する場合は、try-catchステートメントを実行して例外を管理します。
メソッドは指定された順序で呼び出す必要があります。無効な順序でメソッドを呼び出すと、エラーが発生する可能性があります。
AlivcLivePusherクラスを初期化します。
ストリーム取り込みパラメーターを設定した後、initメソッドを呼び出してクラスを初期化します。サンプルコード:
AlivcLivePusher mAlivcLivePusher = new AlivcLivePusher(); mAlivcLivePusher.init(mContext, mAlivcLivePushConfig);説明AlivcLivePusherクラスは複数のインスタンスをサポートしていません。したがって、initメソッドの呼び出しごとに1回、destroyメソッドを呼び出す必要があります。
ストリーム取り込みコールバックを登録します。
次のストリーム取り込みコールバックがサポートされています。
情報:通知と状態検出に使用されるコールバック。
エラー:エラー発生時に返されるコールバック。
ネットワーク:ネットワークに関連するコールバック。
イベントが発生すると、対応するコールバックがトリガーされ、イベントが通知されます。サンプルコード:
プレビューを開始します。
livePusherオブジェクトを初期化し、コールバックを設定した後、プレビューを開始できます。カメラプレビューにはSurfaceViewパラメーターを使用します。サンプルコード:
mAlivcLivePusher.startPreview(mSurfaceView)// プレビューを開始します。ビジネス要件に基づいて、非同期メソッドstartPreviewAysncを呼び出してプレビューを開始することもできます。重要プレビューが設定された後にのみ、バックグラウンドミュージックやカメラ制御などのメソッドを呼び出すことができます。ストリーム取り込みを開始する前にプレビューを実行することをお勧めします。
ストリーム取り込みを開始します。
プレビューが成功した後でのみ、ストリーム取り込みを開始できます。したがって、onPreviewStartedコールバックを設定し、次のコードをコールバックに追加する必要があります。
mAlivcLivePusher.startPush(mPushUrl);説明Android向けプッシュSDKでは、startPushAsyncを呼び出して、非同期的にストリーム取り込みを開始できます。
Android向けプッシュSDKは、RTMP形式とRTS形式の取り込みURLをサポートしています。RTMP形式の取り込みURLと比較して、RTS形式の取り込みURLは安定性が向上し、ネットワーク状態が悪い場合のパフォーマンスが向上します。RTS形式の取り込みURLを使用することをお勧めします。RTMP形式とRTS形式の取り込みURLの比較、およびRTSを介したストリームの取り込み方法の詳細については、「プッシュSDKを使用してRTSを介してストリームを取り込む」をご参照ください。
有効な取り込みURLを使用してストリーム取り込みを開始した後、ApsaraVideo Player、FFplay、VLCなどのプレーヤーを使用して、ストリームプッシュをテストできます。ストリーミングURLの取得方法については、「取り込みURLとストリーミングURLを生成する」をご参照ください。
その他のストリーム取り込み設定を完了します。
Android向けプッシュSDKでは、ストリーム取り込みを管理できます。たとえば、ストリーム取り込みの開始、停止、再起動、一時停止、再開、プレビューの停止、ストリーム取り込みインスタンスの破棄を行うことができます。これらの操作を実行するためのボタンを追加できます。
バックグラウンドミュージックを管理します。
Android向けプッシュSDKでは、バックグラウンドミュージックを管理できます。たとえば、バックグラウンドミュージックの再生、オーディオミキシング、ノイズリダクション、インイヤーモニタリング、ミュートなどの機能を設定できます。サンプルコード:
/* バックグラウンドミュージックの再生を開始します。 */ mAlivcLivePusher.startBGMAsync(mPath); /* バックグラウンドミュージックの再生を停止します。バックグラウンドミュージックを変更する場合は、バックグラウンドミュージックの再生を開始するために使用されるメソッドを呼び出します。現在のバックグラウンドミュージックの再生を停止する必要はありません。 */ mAlivcLivePusher.stopBGMAsync(); /* バックグラウンドミュージックの再生を一時停止します。このメソッドは、バックグラウンドミュージックの再生が開始された後にのみ呼び出すことができます。 */ mAlivcLivePusher.pauseBGM(); /* バックグラウンドミュージックの再生を再開します。このメソッドは、バックグラウンドミュージックの再生が一時停止された後にのみ呼び出すことができます。 */ mAlivcLivePusher.resumeBGM(); /* ループを有効にします。 */ mAlivcLivePusher.setBGMLoop(true); /* ノイズリダクションを設定します。ノイズリダクションを有効にすると、システムは収集されたオーディオから非音声部分をフィルタリングします。この機能により、人間の声のボリュームがわずかに低下する可能性があります。ユーザーがこの機能を有効にするかどうかを決定できるようにすることをお勧めします。デフォルトでは、この機能は無効になっています。 */ mAlivcLivePusher.setAudioDenoise(true); /* インイヤーモニタリングを設定します。インイヤーモニタリングは、カラオケを含むシナリオに適しています。インイヤーモニタリングを有効にすると、ストリーミング中にイヤホンで自分の声を聞くことができます。インイヤーモニタリングを無効にすると、ストリーミング中にイヤホンで自分の声を聞くことができません。イヤホンが検出されない場合、この機能は有効になりません。 */ mAlivcLivePusher.setBGMEarsBack(true); /* オーディオミキシングを設定します。バックグラウンドミュージックと人間の声のボリュームを調整できます。 */ mAlivcLivePusher.setBGMVolume(50); // バックグラウンドミュージックのボリュームを指定します。 mAlivcLivePusher.setCaptureVolume(50); // 人間の声のボリュームを指定します。 /* ミュートを設定します。この機能を有効にすると、バックグラウンドミュージックと人間の声がミュートされます。バックグラウンドミュージックまたは人間の声を個別にミュートするには、オーディオミキシングを設定するために使用されるメソッドを呼び出します。 */ mAlivcLivePusher.setMute(true);重要プレビューが開始された後にのみ、バックグラウンドミュージックを管理するためのメソッドを呼び出すことができます。
ストリーム取り込みスナップショットを設定します。
Android向けプッシュSDKでは、ローカルビデオストリームのスナップショットをキャプチャできます。サンプルコード:
// スナップショットの数、2つのスナップショットの間隔、コールバックなど、関連するパラメーターを設定して、ビデオストリームスナップショットを設定します。 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(); } } });カメラ関連の操作を実行します。
ストリーミング中、一時停止中、または再接続中の状態では、カメラ関連の操作を実行できます。たとえば、フロントカメラとリアカメラを切り替えたり、フラッシュ、焦点距離、ズーム、ミラーリングモードを設定したりできます。サンプルコード:
/* フロントカメラとリアカメラを切り替えます。 */ mAlivcLivePusher.switchCamera(); /* フラッシュを有効または無効にします。フロントカメラのフラッシュを有効にすることはできません。 */ mAlivcLivePusher.setFlash(true); /* 焦点距離を調整してズームインまたはズームアウトします。焦点距離の有効値:[0,getMaxZoom()]。 */ mAlivcLivePusher.setZoom(5); /* 手動フォーカスを設定します。手動フォーカスを設定するには、pointパラメーターとautoFocusパラメーターを設定する必要があります。pointパラメーターは、焦点の座標を指定します。autoFocusパラメーターは、オートフォーカスを有効にするかどうかを指定します。autoFocusパラメーターは、この呼び出しに対してのみ有効になります。それ以外の場合は、setAutoFocusメソッドに基づいてオートフォーカスが有効かどうかが異なります。 */ mAlivcLivePusher.focusCameraAtAdjustedPoint(x, y, true); /* オートフォーカスを設定します。 */ mAlivcLivePusher.setAutoFocus(true); /* ミラーリングモードを設定します。ミラーリングのメソッドは、PushMirrorとPreviewMirrorです。PushMirrorメソッドは、ストリーム取り込みのミラーリングモードを有効にするために使用されます。PreviewMirrorメソッドは、プレビューのミラーリングモードを有効にするために使用されます。PushMirrorはストリーム再生に対してのみ有効であり、PreviewMirrorはプレビューに対してのみ有効です。 */ mAlivcLivePusher.setPreviewMirror(false); mAlivcLivePusher.setPushMirror(false);重要プレビューが開始された後にのみ、カメラ関連の操作を実行するためのメソッドを呼び出すことができます。
外部オーディオソースとビデオソースを設定します。
Android向けプッシュSDKでは、ストリーム取り込み用に外部オーディオソースとビデオソースをインポートできます。たとえば、オーディオファイルまたはビデオファイルを取り込むことができます。
外部の音声とビデオソースを設定します。
サンプルコード:
/** * カスタム音声データをインポートします。 * @param data 音声データのバイト配列。 * @param size * @param sampleRate * @param channels * @param pts 音声のプレゼンテーションタイムスタンプ (PTS)。単位: マイクロ秒。 * このメソッドは、タイムシーケンスを設定しません。入力オーディオフレームのタイムシーケンスを手動で設定する必要があります。 */ mAlivcLivePusher. inputStreamAudioData(byte[] data, int size, int sampleRate, int channels, long pts); /** * カスタム音声データをインポートします。 * @param dataptr 音声データのネイティブメモリのポインター。 * @param size * @param sampleRate * @param channels * @param pts 音声の PTS。単位: マイクロ秒。 * このメソッドは、タイムシーケンスを設定しません。入力オーディオフレームのタイムシーケンスを手動で設定する必要があります。 */ mAlivcLivePusher. inputStreamAudioPtr(long dataPtr, int size, int sampleRate, int channels, long pts);外部ビデオデータをインポートします。
サンプルコード:
/** * カスタムビデオストリームをインポートします。 * * @param data ビデオのバイト配列。 * @param width ビデオの幅。 * @param height ビデオの高さ。 * @param size ビデオのサイズ。 * @param stride ビデオのストライド。 * @param pts ビデオの PTS。単位: マイクロ秒。 * @param rotation ビデオの回転角度。 * このメソッドは、タイムシーケンスを設定しません。入力ビデオフレームのタイムシーケンスを手動で設定する必要があります。 * 注: このメソッドを呼び出すときは、AlivcLivePushConfig で setExternMainStream(true,***) を設定する必要があります。 */ mAlivcLivePusher. inputStreamVideoData(byte[] data, int width, int height, int stride, int size, long pts, int rotation); /** * カスタムビデオストリームをインポートします。 * * @param dataptr ビデオのネイティブメモリのポインター。 * @param width ビデオの幅。 * @param height ビデオの高さ。 * @param stride ビデオのストライド。 * @param size ビデオのサイズ。 * @param pts ビデオの PTS。単位: マイクロ秒。 * @param rotation ビデオの回転角度。 * このメソッドは、タイムシーケンスを設定しません。入力ビデオフレームのタイムシーケンスを手動で設定する必要があります。 * 注: このメソッドを呼び出すときは、AlivcLivePushConfig で setExternMainStream(true,***) を設定する必要があります。 */ mAlivcLivePusher. inputStreamVideoPtr(long dataptr, int width, int height, int stride, int size, long pts, int rotation);外部オーディオデータをインポートします。
サンプルコード:
/** * AlivcImageFormat: 入力ビデオの形式。 * AlivcSoundFormat: 入力オーディオフレームの形式。 * その他のパラメーター: 出力解像度、オーディオサンプリングレート、およびチャンネル数を指定するには、 AlivcLivePushConfig で setResolution、setAudioSamepleRate、および setAudioChannels を構成します。 * 注: カスタムビデオストリームとオーディオストリームをインポートするには、inputStreamVideoData や inputStreamAudioData などのメソッドを呼び出します。 */ mAlivcLivePushConfig.setExternMainStream(true,AlivcImageFormat.IMAGE_FORMAT_YUVNV12, AlivcSoundFormat.SOUND_FORMAT_S16);
アニメーションステッカーを管理します。
Android 向け Push SDK を使用すると、ライブストリームにアニメーションステッカーを追加できます。アニメーションステッカーはウォーターマークとして使用できます。
アニメーションステッカーを作成するには、デモで提供されている素材を使用および変更できます。アニメーションステッカーのシーケンスフレーム画像を作成します。 config.json ファイルで次のパラメーターを構成します。
"du": 2.04,// アニメーションステッカーが再生されるたびに表示される時間を指定します。 "n": "qizi",// アニメーションステッカーの名前を指定します。アニメーションステッカーが保存されているフォルダーの名前がステッカーの名前と同じであり、各フレームの名前がシーケンス番号で終わっていることを確認してください。例: qizi0。 "c": 68.0,// フレーム数を指定します。これは、アニメーションステッカーに含まれる画像の数です。 "kerneframe": 51,// 画像をキーフレームとして指定します。たとえば、デモの 51 番目のフレームをキーフレームとして指定します。指定したフレームが存在することを確認してください。 "frameArry": [ {"time":0,"pic":0}, {"time":0.03,"pic":1}, {"time":0.06,"pic":2}, ], // アニメーションステッカーのパラメーターを構成します。上記の例では、"time":0,"pic":0 は、アニメーションステッカーの再生開始から 0 秒後に最初のフレーム qizi0 が表示されることを示しています。"time":0.03,"pic":1 は、アニメーションステッカーの再生開始から 0.03 秒後に 2 番目のフレーム qizi1 が表示されることを示しています。アニメーションステッカーのすべてのフレームを同じ方法で構成します。説明その他のパラメーターについては、デモで提供されている config.json ファイルの値を保持できます。
アニメーションステッカーを追加します。
サンプルコード:
/** * アニメーションステッカーを追加します。 * @param path ステッカーのパスを指定します。パスには config.json ファイルを含める必要があります。 * @param x x 軸の開始位置を指定します。有効な値: 0 ~ 1.0f。 * @param y y 軸の開始位置を指定します。有効な値: 0 ~ 1.0f。 * @param w 幅を指定します。有効な値: 0 ~ 1.0f。 * @param h 高さを指定します。有効な値: 0 ~ 1.0f。 * @return id ステッカーの ID を指定します。ステッカーを削除する場合は、ステッカーの ID を指定する必要があります。 */ mAlivcLivePusher.addDynamicsAddons("Path of the sticker", 0.2f, 0.2f, 0.2f, 0.2f);アニメーションステッカーを削除します。
サンプルコード:
mAlivcLivePusher.removeDynamicsAddons(int id);
他のメソッドを呼び出します。
/* カスタムモードでは、最小ビットレートとターゲットビットレートをリアルタイムで変更できます。 */ mAlivcLivePusher.setTargetVideoBitrate(800); mAlivcLivePusher.setMinVideoBitrate(400); /* オートフォーカスがサポートされているかどうかを指定します。 */ mAlivcLivePusher.isCameraSupportAutoFocus(); /* フラッシュがサポートされているかどうかを指定します。 */ mAlivcLivePusher.isCameraSupportFlash(); /* ストリームが取り込まれているかどうかを照会します。 */ mAlivcLivePusher.isPushing(); /* 取り込み URL を照会します。 */ mAlivcLivePusher.getPushUrl(); /* ストリームの取り込みパフォーマンスのデバッグ情報を照会します。ストリームの取り込みパフォーマンスのパラメーターの詳細については、API リファレンスまたはコード内のコメントを参照してください。 */ mAlivcLivePusher.getLivePushStatsInfo(); /* SDK バージョン番号を照会します。 */ mAlivcLivePusher.getSDKVersion(); /* デバッグ情報をフィルタリングするためのログレベルを指定します。 */ mAlivcLivePusher.setLogLevel(AlivcLivePushLogLevelAll); /* Android 用 Push SDK のステータスを照会します。 */ AlivcLivePushStats getCurrentStatus(); /* 前回のエラーコードを照会します。エラーコードが返されない場合は、ALIVC_COMMON_RETURN_SUCCESS が表示されます。 */ AlivcLivePushError getLastError();
画面録画 (ベーシック版) のストリーム取り込みの設定
Push SDK for Android では、画面録画をストリーミングできます。画面録画をストリーミングするには、SDK を初期化し、プレビューを設定し、ストリーム取り込みを開始した後でのみ可能です。画面録画をストリーミングするには、次の手順を実行します。
画面録画モードを設定します。
ビジネス要件に基づいて、次の表に示す画面録画モードのいずれかを使用できます。
画面録画モード
必要な設定
カメラを無効にして画面を録画する
AlivcLivePushConfig で画面録画の許可を要求するメソッドを呼び出した後に返されるデータを構成します。
カメラを有効にして画面を録画する
説明ストリーマー側でカメラプレビューを有効にします。視聴者は、カメラを使用して録画されたビデオコンテンツを表示できます。
AlivcLivePushConfig で画面録画の許可を要求するメソッドを呼び出した後に返されるデータを構成します。
StartCamera メソッドを呼び出すときに surfaceView を渡します。
カメラを有効にして画面を録画する
説明ストリーマー側でカメラプレビューを無効にします。視聴者は、カメラを使用して録画されたビデオコンテンツを表示できます。
AlivcLivePushConfig で画面録画の許可を要求するメソッドを呼び出した後に返されるデータを構成します。
surfaceView を渡すことなく StartCamera メソッドを呼び出します。
startCameraMix メソッドを呼び出して、視聴者側のカメラビューの位置を調整します。
画面録画を有効にします。
画面録画には MediaProjection が使用されます。画面録画を有効にするには、画面録画の許可を要求し、AlivcLivePushConfig の setMediaProjectionPermissionResultData メソッドを呼び出して、返されたデータを設定する必要があります。デフォルトでは、画面録画中はカメラが無効になっています。次のサンプルコードは、返されたデータを設定する方法の例を示しています。
mAlivcLivePushConfig.setMediaProjectionPermissionResultData(resultData)カメラプレビューを設定します。
画面録画を有効にした後、カメラプレビューメソッドを呼び出すことができます。サンプルコード:
mAlivcLivePusher.startCamera(surfaceView); // カメラプレビューを有効にします。 mAlivcLivePusher.stopCamera(); // カメラプレビューを無効にします。説明画面録画モードでは、surfaceView のアスペクト比を 1:1 に設定することをお勧めします。こうすることで、画面を回転させたときに surfaceView のアスペクト比を調整する必要がなくなります。
surfaceView のアスペクト比を 1:1 に設定しない場合は、画面を回転させ、カメラプレビューを無効にしてから、再度カメラプレビューを有効にするときに、アスペクト比を調整する必要があります。
ストリーマー側でプレビューが不要な場合は、surfaceView パラメーターを null に設定します。
カメラストリームミキシングを設定します。
ストリーマー側でカメラプレビューが不要な場合でも、視聴者がカメラプレビューを必要とする場合は、この機能を有効にできます。この機能は、主にゲームシナリオで使用されます。ストリーマーがゲームコンテンツをストリーミングしたくない場合、ストリーマーはゲームコンテンツの上にカメラビューを表示できます。サンプルコード:
/** * @param x x 軸の開始位置。有効な値: 0 ~ 1.0f。 * @param y y 軸の開始位置。有効な値: 0 ~ 1.0f。 * @param w 画面の幅。有効な値: 0 ~ 1.0f。 * @param h 画面の高さ。有効な値: 0 ~ 1.0f。 * @return */ mAlivcLivePusher.startCameraMix(x, y, w, h); // カメラストリームミキシングを有効にします。 mAlivcLivePusher.stopCameraMix(); // カメラストリームミキシングを無効にします。画面の回転を設定します。
画面録画モードでは、画面を回転させて縦向きモードと横向きモードを切り替えることができます。サンプルコード:
mAlivcLivePusher.setScreenOrientation(0);説明画面の向きを変更する場合は、アプリケーション層で OrientationEventListener を有効にし、方向設定を setScreenOrientation メソッドに渡す必要があります。
プライバシー保護を設定します。
この機能により、ストリーマーは画面録画中にプライバシーを保護できます。たとえば、ストリーマーがパスワードを入力する必要がある場合、ストリーマーはこの機能を有効にできます。ストリーマーがパスワードを入力した後、ストリーマーはこの機能を無効にできます。サンプルコード:
mAlivcLivePusher.pauseScreenCapture(); // プライバシー保護を有効にします。 mAlivcLivePusher.resumeScreenCapture(); // プライバシー保護を無効にします。説明AlivcLivePushConfig で setPausePushImage メソッドを設定すると、画面録画が一時停止されたときに指定された画像が表示されます。このメソッドを設定しない場合、画面録画が一時停止されたときに最後のフレームが表示されます。
同時配信設定の構成(インタラクティブ版)
Push SDK V4.4.4 以降のインタラクティブ版は、RTC ベースの同時配信機能を提供します。Push SDK V4.4.5 以降のインタラクティブ版は、RTC ベースの対戦機能を提供します。配信者と視聴者は、Push SDK のインタラクティブ版を使用することで、300 ミリ秒未満の超低遅延で相互にやり取りできます。インタラクティブストリーミングの詳細については、同時配信の開発者ガイド および 対戦の開発者ガイド をご参照ください。
使用上の注意
Android向けPush SDKを使用する前に、次の表に記載されている項目を確認してください。
項目 | 説明 |
難読化ルール | 難読化の設定を確認してください。Android向けPush SDKのパッケージ名が難読化リストから削除されていることを確認してください。 |
メソッド呼び出し |
|