Agora Go Real

{{ page_meta.name }}|{{ group.public_title }}|{{ site_settings.logo_alt }}

作成者: ブイキューブ|May 13, 2022 5:57:32 AM

利用するAPI一覧

  • AgoraRTC.createStream()
  • Stream.replaceTrack()

基本的にはこの2つで実現可能です。

初期のカメラ指定

index.html
var facingMode = "user";
    //中略
    rtc.localStream = AgoraRTC.createStream({
      streamID: rtc.params.uid,
      audio: true,
      video: true,
      screen: false,
      microphoneId: option.microphoneId,
      facingMode: facingMode
    })
    

"facingMode"で前面カメラか背面カメラを選択できます。"user"が前面カメラ、"environment"が背面カメラになります。

手法1

Stream.replaceTrack()で簡単に切り替える方法です。

index.html
if(facingMode == "user"){
      facingMode = "environment";
    }else{
      facingMode = "user";
    }
    var localStream2 = AgoraRTC.createStream({
      video: true,
      audio: false,
      facingMode: facingMode
    });
    
    localStream2.init(function(){
      var newVideoTrack = localStream2.getVideoTrack();
      rtc.localStream.replaceTrack(newVideoTrack);
      rtc.localStream.stop();
      rtc.localStream.play("local_stream");
    });
    

新規で映像ストリームを作成し、そのストリームに差し替える手法になります。
冒頭で記載の通り、この方法では一部正常に動作しません。理由は同時に前面・背面のカメラをオープンさせることができない為です。その代替手法は以下になります。

手法2

一度カメラを閉じて、再度映像を取得してパブリッシュします。(サーバーとの接続は途切れないので、チャネルからの離脱にはなりません)

index.html
if(facingMode == "user"){
      facingMode = "environment";
    }else{
      facingMode = "user";
    }
    rtc.localStream.stop();
    rtc.localStream.close();
    unpublish(rtc);
    var params = serializeformData();
    
    rtc.localStream = AgoraRTC.createStream({
      streamID: rtc.params.uid,
      audio: true,
      video: true,
      screen: false,
      microphoneId: params.microphoneId,
      facingMode: facingMode
    })
    
    rtc.localStream.init(function () {
      rtc.localStream.play("local_stream")
      publish(rtc);
    }, function (err)  {
    })
    

こちらの手法ですべてのスマホに対応ができます。