📹

Agora.ioで配信する映像のカメラを切り替える

2023/12/07に公開

はじめに

この記事は、Agora.ioで配信する映像のカメラを切り替える方法を個人的な備忘録としてまとめたものです。
Agora.ioバージョン6.xの話になります。アップデートおよび仕様変更によって将来的にこの手順が使用できなくなる可能性があります。(記.2023/12/07)

補足

この記事はFlutterでの実装例を含みますが、それ以外の言語でもドキュメントを読む限りではそんなに変わらないと思います。

方法1

RtcEngineクラスのswitchCameraメソッドを使用する。これはカメラが有効になっているときしか使用できないことに注意。また、AndroidとiOS以外では使えない。

公式ドキュメントに書かれている注意点のコピペ
  • This method is for Android and iOS only.
  • This method must be called after the camera is successfully enabled, that is, after the SDK triggers the onLocalVideoStateChanged callback and returns the local video state as localVideoStreamStateCapturing(1).
RtcEngine agoraEngine = createAgoraRtcEngine();
// 略...
agoraEngine.switchCamera();
// 略...

方法2

setCameraCapturerConfigurationというメソッドがあるので、これを使用すればカメラの詳細設定を弄ることができる。configの詳細はここ。これもAndroidとiOS以外では使えない。
この実装例では様々な設定のカメラを後々実装することになるかもしれないと考え、CameraTypeというenum型を独自で実装している。

公式ドキュメントに書かれている注意点のコピペ
  • This method is for Android and iOS only.
  • This method must be called after the camera is turned on, such as calling after startPreview and enableVideo.
import 'package:agora_rtc_engine/agora_rtc_engine.dart';

enum CameraType {
  cameraRear,
  cameraFront,
}

Future<CameraType> switchCameraType(RtcEngine agoraEngine, CameraType type) async {

  // switch camera type
  switch(type) {
    case CameraType.cameraRear:
      type = CameraType.cameraFront;
    case CameraType.cameraFront:
      type = CameraType.cameraRear;
  }

  if (type == CameraType.cameraRear) {
    await agoraEngine.setCameraCapturerConfiguration(
        const CameraCapturerConfiguration(
            cameraDirection: CameraDirection.cameraRear
        )
    );
  }

  if (type == CameraType.cameraFront) {
    await agoraEngine.setCameraCapturerConfiguration(
        const CameraCapturerConfiguration(
            cameraDirection: CameraDirection.cameraFront
        )
    );
  }

  return type;
}

参考

Video SDK v6.x for Flutter ドキュメント

Discussion