shiguredo / sora-ios-sdk

WebRTC SFU Sora iOS SDK
https://sora-ios-sdk.shiguredo.jp/
Apache License 2.0
41 stars 8 forks source link

2.2.0での映像配信ON/OFFについて #25

Closed daihase closed 6 years ago

daihase commented 6 years ago

先日sora-ios-sdkをSwift4.2対応済みである2.2.0へアップデートし、諸々既存アプリのテストを行なっていた際に気づいたのですが、以前のバージョンまでは映像配信のON/OFFは以下のようにvideoEnabledにtrue/falseをセットすることで制御しておりました。

  guard let mainStream = currentMediaChannel?.mainStream else { return  }
            mainStream.videoEnabled = false
      // or
            mainStream.videoEnabled = true

もちろんこれで以前のバージョンを組み込んでいた既存アプリで問題なく映像配信を制御出来たのですが、2.2.0にあげると、こちらfalseにするとVideoViewの上に1つ黒いUIViewが覆い被さり、再びtrueで配信ONとしても黒いUIViewが消えない状態となっておりました。

私の方でソースを色々見て原因を探っていたところ、こちらでそれらしき追加実装を確認しまして... SDK内でローカル変数としてViewを生成しaddSubviewしているので、一旦自身のアプリからvideoEnabled = trueとし、強引にこの黒いUIViewをremoveFromSuperviewして見たのですが、VideoViewの映像は停止したままでした。

その代わりに2.2.0で新たに追加実装されたstopstartメソッドを使ってみると、これまでの映像配信ON/OFFと同様の挙動をしたように見受けられました。

こちら長くなってしまい恐縮ですが、これまでの2.2.0以下のバージョンで正しく?動いていた映像配信ON/OFFを行うにはどの方法が適切か、ご教示いただけると幸いです。

■確認環境

Xcode10.0 Swift4.2 sora-ios-sdk 2.2.0 iOS11.2.6

szktty commented 6 years ago

詳細な検証と報告をありがとうございます。先に対処方法を書きますと、 MediaStream.videoEnabledVideoView.start(), stop() を組み合わせてください。以下一例です。

// 映像の送受信と描画を停止する
publisher.mainStream?.videoEnabled = false
publisherVideoView.stop()

// 映像の送受信と描画を再開する
publisher.mainStream?.videoEnabled = true
publisherVideoView.start()

2.2.0 で追加した VideoView.start()stop() は UI 上の描画の on/off を行う API で、映像の送受信を制御する MediaStream.videoEnabled プロパティと役割が異なります。 VideoView.stop() を実行すると映像の描画は停止されますが、 MediaStream による映像の送受信は停止されません。ただし、 MediaStream で映像の送受信を停止すると、 VideoView による映像の描画も停止する仕様です。

ですが、 MediaStream.videoEnabledfalse から true に戻したときに VideoView による描画が再開されないのはバグです(次期リリースで修正します)。映像の送受信は再開されていますので、再開後に VideoView.start() を実行していただければ問題ないと思います。

これらの変更点の詳細な説明についてドキュメント化していませんでしたので、近いうちに追記します。

daihase commented 6 years ago

@szktty ご確認有難うございます。 上記にご記載いただいた組み合わせ方法、こちら参考に対応してみたいと思います。

いつも迅速なご対応有難うございます、それでは引き続き宜しくお願い致します。