createCameraVideoTrack static method
dynamic
createCameraVideoTrack({
- String? cameraId,
- CustomVideoTrackConfig encoderConfig = CustomVideoTrackConfig.h360p_w640p,
- String facingMode = "user",
- 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;
}