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

ApsaraVideo Live:エラー、例外、特殊ケースの処理

最終更新日:Sep 04, 2024

このトピックでは、Push SDK for Androidを使用するときに発生する可能性のある例外と特殊なケースについて説明します。 このトピックでは、このような例外と特殊なケースを処理する方法についても説明します。

エラーと例外の処理

Push SDKは、次のタイプのコールバックを提供します。

コールバックタイプ

クラス

ストリーム取り込みコールバック

AlivcLivePushInfoListener

ネットワークコールバック

AlivcLivePushNetworkListener

エラーコールバック

AlivcLivePushErrorListener

バックグラウンドミュージックのコールバック

AlivcLivePushBGMListener

ストリーム取り込みコールバック

プレビュー開始のコールバック、最初のフレームをレンダリングするコールバック、オーディオまたはビデオストリームの最初のフレームを送信するコールバック、ストリーム取り込み開始のコールバック、ストリーム取り込み停止のコールバックなど、SDKステータスをアプリに通知するために使用されます。

  • onPushStartedおよびonFirstFramePushed: ストリームの取り込みが成功したことを示します。

  • onPushStarted: サーバーが接続されていることを示します。

  • onFirstFramePushed: オーディオまたはビデオストリームの最初のフレームが送信されることを示します。

ネットワークコールバック

ネットワークコールバックは、SDKに関するネットワークステータスとリンクステータスをアプリに通知するために使用されます。

基本モード: 基本的なライブストリーミングシナリオ

  • onConnectFail: ストリームの取り込みが失敗したことを示します。 取り込みURLが有効かどうか (たとえば、URLに無効な文字が含まれているかどうか) 、認証の問題があるかどうか、同時に取り込まれたストリームの数の上限を超えているかどうか、およびストリームがブラックリストにあるかどうかを確認することをお勧めします。 ストリームの取り込みを試みる前に、取り込みURLが有効で利用可能であることを確認してください。 該当するエラーコードは、0x30020901〜0x30020905、0x30010900〜0x30010901です。

  • onConnectionLost: ネットワークが切断されていることを示します。 ネットワークが切断されると、SDKは自動的にネットワークへの再接続を試み、onReconnectStartコールバックを起動します。 再接続試行の最大許容数 (config.connectRetryCount) に達したが、ネットワークがまだ回復されていない場合、SDKはonReconnectErrorコールバックを起動します。

  • onNetworkPoor: ネットワーク速度が遅いことを示します。 このコールバックを受け取った場合、ストリームが中断されずに実行を続けることができても、現在のネットワークでは取り込みストリームを完全にサポートできない場合があります。 この場合、アプリのユーザーインターフェイス (UI) でユーザーに通知するなど、独自のビジネスロジックを処理できます。

  • onNetworkRecovery: ネットワークが回復されたことを示します。

  • onReconnectError: ネットワーク再接続が失敗したことを示します。 現在のネットワークを確認し、ネットワークが復旧したときにストリームを再取り込みすることを推奨します。

  • onSendDataTimeout: データの送信時にタイムアウトが発生することを示します。 現在のネットワークを確認し、ネットワークが復旧したときにストリームを再取り込みすることを推奨します。

  • onPushURLAuthenticationOverdue: 署名された取り込みURLの有効期限が近づいていることを示します。 URL署名が有効になっている場合、取り込みURLにはauth_keyフィールドが含まれ、Alibaba Cloudはこれを定期的に検証します。 このコールバックは、取り込みURLの有効期限が切れる1分前に起動されます。 コールバックが返された後、元のURLの有効期限が切れたときにストリーム取り込みが中断されないように、新しい取り込みURLを指定する必要があります。

インタラクティブモード: 共同ストリーミングシナリオ

  • onConnectFail: ストリームの取り込みが失敗したことを示します。 コストリーミング用の取り込みURLのトークンが有効かどうか、およびネットワークが正常かどうかを確認することをお勧めします。 ストリームの取り込みを試みる前に、取り込みURLが有効であり、ネットワークが正常であることを確認してください。

  • onConnectionStatusChange: 接続ステータスが変わることを示します。 コールバックでは、接続ステータスが返されます。 たとえば、ネットワークが切断され、ネットワーク接続が確立され、ネットワークが接続され、ネットワーク接続が失敗します。 コールバックでAliLiveConnectionStatusFailedが返された場合、接続を回復することはできません。 この場合、現在のネットワークを確認し、ネットワークが回復した後にストリームを再取り込みします。 接続ステータスを取得するには、このコールバックを対話モードで設定することを推奨します。

  • onPushURLTokenWillExpire: コストリーミングの取り込みURLのトークンの有効期限が近づいていることを示します。 このコールバックは、トークンの有効期限が切れる30秒前に起動されます。 コールバックを受け取った後、ビジネスサーバーからの新しいトークンを含むコストリーミングの取り込みURLを即座に要求し、refreshPushURLTokenを呼び出して新しいトークンをSDKに渡す必要があります。

  • onPushURLTokenExpired: コストリーミングの取り込みURLのトークンが期限切れになったことを示します。 このコールバックが発生した場合、ストリームを再取り込みするために新しいトークンを含む取り込みURLを使用する必要があります。

  • onPusherNetworkQualityChanged: アップストリームネットワーク品質が変更されることを示します。 コールバックを使用して、アップストリームネットワークの品質を評価できます。

  • onConnectionLost: ネットワークが切断されていることを示します。 インタラクティブモードでは、onConnectionLostコールバックが発生すると、接続を回復できません。 現在のネットワークを確認し、ネットワークの復旧後にストリームを再取り込みすることを推奨します。

エラーコールバック

  • onSystemError: システムデバイスの例外を示します。 あなたはエンジンを破壊し、再試行する必要があります。

  • onSDKError: SDKエラーを示します。 エラーコードに基づいて操作を実行する必要があります。

    • エラーコードが805438211場合、デバイスのパフォーマンスは低く、エンコードとレンダリングのフレームレートは低くなります。 ストリーマーにプロンプトを表示し、高度なレタッチやアニメーションなどの時間のかかるビジネスロジックをアプリ層で停止する必要があります。

    • マイクとカメラの権限に関連するコールバックに特別な注意を払う必要があります。 268455940エラーコードは、アプリがマイクの権限を必要とすることを示します。 268455939エラーコードは、アプリがカメラの権限を必要とすることを示します。

    • 他のエラーコードについては、追加の操作は必要ない。 すべてのエラーコードはログに記録されます。

バックグラウンドミュージックのコールバック

  • onOpenFailed: バックグラウンドミュージックの開始に失敗したことを示します。 音楽ファイルが有効かどうか、および関連する方法で指定した音楽ファイルのパスが正しいかどうかを確認してください。 startBGMAsyncメソッドを呼び出して、音楽を再度再生できます。

  • onDownloadTimeout: バックグラウンドミュージックの再生中のタイムアウトを示します。 これは通常、バックグラウンドミュージックがURLから来るときに発生します。 この場合は、ネットワークの状態を確認し、startBGMAsyncメソッドを呼び出して音楽を再度再生してください。

ハンドルの特別なケース

ネットワーク切断

  • 短期間のネットワーク切断およびネットワーク切り替え: ネットワーク切断またはネットワーク切り替えが発生すると、SDKはネットワークへの再接続を試みます。 AlivcLivePushConfigクラスを使用して、再接続タイムアウト期間と再接続の最大試行回数を設定できます。 SDKがネットワークに再接続した後、ストリーム取り込みが再開されます。 ApsaraVideo Playerを使用する場合は、タイムアウト通知を受け取ってから5秒後に再接続操作を実行することを推奨します。

  • 長期間のネットワーク切断: 再接続要求がタイムアウトするか、再接続の試行回数が上限を超えた場合、SDKはネットワークへの再接続に失敗します。 この場合、onReconnectErrorコールバックが発生します。 ネットワーク接続が回復したら、reconnectAsynを呼び出してネットワークに再接続します。 SDKをApsaraVideo Playerに再接続する必要もあります。

    • ネットワーク接続を外部から監視することを推奨します。

    • サーバーを使用して、ストリーマー側とプレーヤー間の通信障害を処理します。 たとえば、ストリーマーがサーバーから切断された場合、サーバーはAlibaba Cloud CDNからストリーム取り込み割り込みのコールバックを受け取ります。 サーバーはコールバックメッセージをプレーヤーにプッシュします。 次に、プレーヤはストリーム取り込み中断を処理する。 サーバーは同じ手順を使用してストリーム取り込みを再開します。

    • 再生を停止し、ApsaraVideo Playerを再起動して、プレーヤーをサーバーに再接続します。 stopを呼び出してプレーヤーを停止し、prepareAndPlayを呼び出してプレーヤーを再起動します。

      mPlayer.stop();
      mPlayer.prepareAndPlay(mUrl);
      説明

      ApsaraVideo Playerの詳細については、「高度な機能」をご参照ください。

背景または画面ロックへの切り替え

  • アプリがバックグラウンドに切り替えられたとき、または画面がロックされているときに、AlivcLivePusherクラスのpause() またはresume() メソッドを呼び出して、ストリームの取り込みを一時停止または再開できます。

  • システム以外のオーディオおよびビデオ通話の場合、SDKはオーディオストリームの記録と取り込みを継続します。 mAlivcLivePusher.setMute() メソッドを呼び出して、アプリがバックグラウンドに切り替えられたとき、または画面がロックされたときにオーディオ録音を有効にするかどうかを指定できます。 setMuteをtrueまたはfalseに設定できます。

ビットレート設定

SDKは動的ビットレート機能をサポートしています。 AlivcLivePushConfigクラスを使用して、デフォルトのビットレートを変更できます。 異なるサービスは異なるビデオ品質を必要とします。 出力ビデオの解像度、滑らかさ、および品質は、取り込まれたストリームのビットレートによって異なります。

  • ビデオ品質: 取り込まれたストリームのビットレートが高いほど、ビデオ品質が高いことを示します。 より高いビデオ品質を確保するために、より高いビットレートを設定することを推奨します。

  • ビデオの滑らかさ: 取り込まれたストリームのビットレートが高いほど、より多くのネットワーク帯域幅が必要です。 劣悪なネットワーク条件でのより高いビットレートは、ビデオ再生の滑らかさに影響し得ます。