他カメラアプリを起動すると、ローカルストリームの映像が非表示になる。
はじめまして。
サンプルアプリにて次のような事象を確認いたしました。対応策をご教授頂けますと幸いでございます。
【発生事象】
skyway-android-sdk-1.0.6に同梱されておりますサンプルプログラム(sfu-videochat)をAndroid端末にて実行しましたが、
他のカメラアプリを起動すると、ローカルストリーム(自分のカメラ映像)の映像が非表示になってしまいます。
【環境】
・SDKバージョン:Android SDK ver 1.0.6
・クライアント: SO-01K
・OS: Android 8.0.0
・ネットワーク : Wi-Fi
【再現手順】
1. Sample-sfu-videochat をビルドして端末にインストールする。
2. サンプルアプリを起動する。
3. 通話の状態にする。(リモート、ローカルストリームの映像が表示されている状態にする)
4. サンプルアプリをバックグラウンドに移行させ、他のカメラアプリを起動する。
5. バックグランドのサンプルアプリをフォアグランドに移行させる。
6. ローカルストリームの映像が非表示になっている。
【期待される事象】
ローカルストリーム(自分のカメラ映像)の映像が非表示にならないこと。
-
こちら調査結果のご連絡が遅くなり申し訳ございません。
Android SDKのカメラデバイス制御はベースとなっているWebRTCライブラリで行われています。
そちらを調査したところ、他のアプリケーションにカメラデバイスの制御が奪われた場合例外が投げられるのですが、その後復旧処理までは行っていませんでした。また、カメラデバイスが奪われた事実を外部から知る手段も用意されていませんでした。
対策としては、お客様アプリで、onStart()/onStop()をトリガーに、カメラデバイスの制御が奪われる前に、カメラデバイスのシャットダウン処理と復旧処理を実施していただくのが有効かと思います。この場合、アプリがバックグラウンドにいる間は映像は非表示となりますが、フォアグラウンドに移動すると再表示されます。
SFUサンプルから一部抜粋ですが、以下のように改修すると動作します。
- 復旧処理はstartLocalStream()を実行し(サンプルに既存であるfunctionです)、replaceStream()でStreamを更新
- シャットダウン処理はreplaceStream()でStreamを削除し、stopLocalStream()を実行(今回新規追)
// ---- コードのサンプル ここから ----
private boolean suspended = false;
@Override
protected void onStart() {
super.onStart();// 省略
if (suspended) {
startLocalStream();
if (_room instanceof SFURoom) {
((SFURoom)_room).replaceStream(_localStream);
}
suspended = false;
}
}// 省略
}
@Override
protected void onStop() {// 省略
if (_localStream != null) {
if (_room instanceof SFURoom) {
((SFURoom)_room).replaceStream(null);
}
stopLocalStream();
suspended = true;
}// 省略
}
void stopLocalStream() {
if (null != _localStream) {
Canvas canvas = (Canvas) findViewById(R.id.svLocalView);
_localStream.removeVideoRenderer(canvas,0);
_localStream.close();
_localStream = null;
}
}// ---- コードのサンプル ここまで ----
以上です。
参考になれば幸いです。
Please sign in to leave a comment.
Comments
4 comments