こちらのページは旧SkyWayの情報です。新しいSkyWayに関する情報はこちら

他カメラアプリを起動すると、ローカルストリームの映像が非表示になる。

Comments

4 comments

  • Avatar
    Yusuke Naka (Edited )

    情報ありがとうございます。調査致します。

    > 他のカメラアプリ

    これはなにか特定のアプリでしょうか?それともカメラを利用するアプリであれば発生する可能性があるということでしょうか?

    0
    Comment actions Permalink
  • Avatar
    KK (Edited )

    ご連絡ありがとうございます。

    >これはなにか特定のアプリでしょうか?それともカメラを利用するアプリであれば発生する可能性があるということでしょうか?

    ご質問頂戴した件ですが、後者になります。

    現状、プリインストールされたカメラアプリと、Playストアからダウンロードしてきたカメラアプリで、

    動作確認を致しましたが、いずれも当事象が発生する状況でございます。

    ご多忙のところ大変恐縮ですが、ご確認頂けますと幸いに御座います。

     

    以上です。

     

    0
    Comment actions Permalink
  • Avatar
    Yusuke Naka (Edited )

    こちら調査結果のご連絡が遅くなり申し訳ございません。

    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;
      }
    }

    // ---- コードのサンプル ここまで ----

     

    以上です。

    参考になれば幸いです。

    0
    Comment actions Permalink
  • Avatar
    KK

    ご連絡ありがとうございます。

    ご教授頂きましたコードで改善致しました。

    ありがとうございました。

     

    以上です。

    0
    Comment actions Permalink

Please sign in to leave a comment.