createCameraVideoTrack static method

dynamic createCameraVideoTrack({
  1. String? cameraId,
  2. CustomVideoTrackConfig encoderConfig = CustomVideoTrackConfig.h360p_w640p,
  3. String facingMode = "user",
  4. bool multiStream = true,
})

Implementation

static createCameraVideoTrack(
    {String? cameraId,
    CustomVideoTrackConfig encoderConfig = CustomVideoTrackConfig.h360p_w640p,
    String facingMode = "user",
    // String optimizationMode = "motion",
    bool multiStream = true}) async {
  late Map<String, dynamic> mediaConstraints;

  if (!kIsWeb) {
    var optional = cameraId != null
        ? [
            {
              'sourceId': cameraId,
            }
          ]
        : [];

    if (cameraId != null && Platform.isAndroid) {
      final DeviceInfoPlugin deviceInfoPlugin = DeviceInfoPlugin();
      final AndroidDeviceInfo info = await deviceInfoPlugin.androidInfo;
      var osVersion = info.version.sdkInt;
      MediaDeviceInfo? device = mediaDevices[MediaDeviceType.videoInput]!
          .firstWhereOrNull((element) => element.deviceId == cameraId);
      if (device != null && Platform.isAndroid && osVersion <= 28) {
        if (info.supportedAbis.first != "arm64-v8a" && info.supportedAbis.first != "x86_64") {
          optional = [
            {
              'sourceId': device.label,
            }
          ];
        }
      }
    }

    mediaConstraints = <String, dynamic>{
      'audio': false,
      'video': {
        'facingMode': facingMode,
        'width': customVideotrackConfigMap[encoderConfig]!["width"],
        'height': customVideotrackConfigMap[encoderConfig]!["height"],
        'frameRate': customVideotrackConfigMap[encoderConfig]!["frameRate"],
        'optional': optional,
      },
    };
  } else {
    mediaConstraints = <String, dynamic>{
      'audio': false,
      'video': {
        'facingMode': facingMode,
        'width': customVideotrackConfigMap[encoderConfig]!["width"],
        'height': customVideotrackConfigMap[encoderConfig]!["height"],
        'frameRate': customVideotrackConfigMap[encoderConfig]!["frameRate"],
        'deviceId': cameraId ?? 1,
      },
    };
  }

  MediaStream mediaStream =
      await navigator.mediaDevices.getUserMedia(mediaConstraints);

  CustomTrack customVideoTrack = CustomTrack.videoTrack(
    mediaStream: mediaStream,
    multiStream: multiStream,
    videoEncoderConfig: encoderConfig,
    // optimizationMode: optimizationMode
  );
  return customVideoTrack;
}