easyproctor-hml 2.5.28 → 2.5.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm/index.js +242 -68
- package/index.js +242 -68
- package/new-flow/recorders/CameraRecorder.d.ts +7 -2
- package/package.json +1 -1
- package/plugins/recorder.d.ts +1 -0
- package/unpkg/easyproctor.min.js +32 -30
package/index.js
CHANGED
|
@@ -30387,38 +30387,93 @@ function recorder(stream4, buffer, videoOptions, onBufferSizeError = false, onBu
|
|
|
30387
30387
|
};
|
|
30388
30388
|
}
|
|
30389
30389
|
console.log("recorderOptions bitsPerSecond", recorderOptions.videoBitsPerSecond);
|
|
30390
|
-
|
|
30391
|
-
|
|
30392
|
-
if (
|
|
30393
|
-
|
|
30394
|
-
|
|
30395
|
-
|
|
30396
|
-
|
|
30397
|
-
|
|
30398
|
-
|
|
30399
|
-
|
|
30400
|
-
|
|
30401
|
-
|
|
30402
|
-
|
|
30403
|
-
|
|
30404
|
-
|
|
30405
|
-
|
|
30406
|
-
|
|
30407
|
-
|
|
30408
|
-
);
|
|
30409
|
-
|
|
30410
|
-
|
|
30411
|
-
|
|
30412
|
-
|
|
30413
|
-
|
|
30414
|
-
|
|
30390
|
+
function buildMediaRecorder(stream5, recorderOptions2) {
|
|
30391
|
+
const tracks = stream5.getTracks();
|
|
30392
|
+
if (tracks.length == 0) {
|
|
30393
|
+
throw new Error("No tracks found");
|
|
30394
|
+
}
|
|
30395
|
+
const invalidTracks = tracks.find((t2) => t2.readyState != "live");
|
|
30396
|
+
if (invalidTracks) {
|
|
30397
|
+
throw new Error("Track not live: " + invalidTracks.label);
|
|
30398
|
+
}
|
|
30399
|
+
console.log("buildMediaRecorder tracks OK");
|
|
30400
|
+
let mediaRecorder2 = new MediaRecorder(stream5, recorderOptions2);
|
|
30401
|
+
console.log("buildMediaRecorder mediaRecorder OK");
|
|
30402
|
+
mediaRecorder2.ondataavailable = (e2) => {
|
|
30403
|
+
bufferSize = bufferSize + e2.data.size;
|
|
30404
|
+
console.log("video tracks length > 0", stream5.getVideoTracks().length > 0);
|
|
30405
|
+
if (stream5.getVideoTracks().length > 0) {
|
|
30406
|
+
const videoTrack = stream5.getVideoTracks()[0];
|
|
30407
|
+
console.log(videoTrack.readyState);
|
|
30408
|
+
console.log(videoTrack.enabled);
|
|
30409
|
+
}
|
|
30410
|
+
if (e2.data.size > 0) {
|
|
30411
|
+
buffer.push(e2.data);
|
|
30412
|
+
}
|
|
30413
|
+
if (!stopped) {
|
|
30414
|
+
if (lastEvent && e2.data.size === lastEvent.data.size || e2.data.size === 0) {
|
|
30415
|
+
proctoringId && lastEvent && e2.data.size === lastEvent.data.size && trackers.registerOnBufferSizeError(
|
|
30416
|
+
proctoringId,
|
|
30417
|
+
`onBufferSizeError: Recorder size freezed: ${e2.data.size} Mb`
|
|
30418
|
+
);
|
|
30419
|
+
proctoringId && e2.data.size === 0 && trackers.registerOnBufferSizeError(
|
|
30420
|
+
proctoringId,
|
|
30421
|
+
`onBufferSizeError: Recorder size equal 0 Mb`
|
|
30422
|
+
);
|
|
30423
|
+
console.log("onbuffer size error" + e2.data.size);
|
|
30424
|
+
onBufferSizeErrorCallback && onBufferSizeErrorCallback();
|
|
30425
|
+
}
|
|
30426
|
+
lastEvent = e2;
|
|
30427
|
+
} else {
|
|
30428
|
+
resolvePromise && resolvePromise();
|
|
30415
30429
|
}
|
|
30416
|
-
|
|
30417
|
-
|
|
30418
|
-
|
|
30430
|
+
};
|
|
30431
|
+
return mediaRecorder2;
|
|
30432
|
+
}
|
|
30433
|
+
let mediaRecorder = buildMediaRecorder(stream4, recorderOptions);
|
|
30434
|
+
async function startRecorder(recorder2) {
|
|
30435
|
+
return new Promise((resolve, reject) => {
|
|
30436
|
+
let started = false;
|
|
30437
|
+
recorder2.onstart = () => {
|
|
30438
|
+
started = true;
|
|
30439
|
+
resolve();
|
|
30440
|
+
};
|
|
30441
|
+
recorder2.onerror = (e2) => {
|
|
30442
|
+
reject(e2);
|
|
30443
|
+
};
|
|
30444
|
+
try {
|
|
30445
|
+
recorder2.start(1e4);
|
|
30446
|
+
} catch (e2) {
|
|
30447
|
+
return reject(e2);
|
|
30448
|
+
}
|
|
30449
|
+
setTimeout(() => {
|
|
30450
|
+
if (!started) {
|
|
30451
|
+
reject(new Error("Timeout ao iniciar o recorder"));
|
|
30452
|
+
}
|
|
30453
|
+
}, 500);
|
|
30454
|
+
});
|
|
30455
|
+
}
|
|
30456
|
+
async function startWithRetry(recorder2) {
|
|
30457
|
+
for (let i2 = 0; i2 < 3; i2++) {
|
|
30458
|
+
try {
|
|
30459
|
+
console.log("startWithRetry try", i2);
|
|
30460
|
+
await startRecorder(recorder2);
|
|
30461
|
+
if (recorder2.state === "recording") {
|
|
30462
|
+
bufferSize = 0;
|
|
30463
|
+
stopped = false;
|
|
30464
|
+
return;
|
|
30465
|
+
}
|
|
30466
|
+
} catch (e2) {
|
|
30467
|
+
console.error("Erro ao iniciar o recorder:", e2);
|
|
30468
|
+
}
|
|
30469
|
+
await new Promise((r2) => setTimeout(r2, 300));
|
|
30470
|
+
recorder2 = buildMediaRecorder(stream4, recorderOptions);
|
|
30419
30471
|
}
|
|
30420
|
-
|
|
30421
|
-
|
|
30472
|
+
throw new Error("Falha ao iniciar o recorder");
|
|
30473
|
+
}
|
|
30474
|
+
async function startRecording() {
|
|
30475
|
+
await startWithRetry(mediaRecorder);
|
|
30476
|
+
return;
|
|
30422
30477
|
return new Promise((resolve, reject) => {
|
|
30423
30478
|
var timeSlice = 1e4;
|
|
30424
30479
|
if ((videoOptions == null ? void 0 : videoOptions.timeSlice) != void 0) {
|
|
@@ -30445,9 +30500,10 @@ function recorder(stream4, buffer, videoOptions, onBufferSizeError = false, onBu
|
|
|
30445
30500
|
bufferSize = 0;
|
|
30446
30501
|
stopped = false;
|
|
30447
30502
|
setTimeout(async () => {
|
|
30448
|
-
|
|
30503
|
+
if (mediaRecorder.state == "recording") return;
|
|
30504
|
+
+console.log("onstart Timeout");
|
|
30449
30505
|
reject(new Error("onstart Timeout"));
|
|
30450
|
-
},
|
|
30506
|
+
}, 2e3);
|
|
30451
30507
|
});
|
|
30452
30508
|
}
|
|
30453
30509
|
function stopRecording() {
|
|
@@ -30490,6 +30546,7 @@ function recorder(stream4, buffer, videoOptions, onBufferSizeError = false, onBu
|
|
|
30490
30546
|
}
|
|
30491
30547
|
return {
|
|
30492
30548
|
startRecording,
|
|
30549
|
+
startWithRetry,
|
|
30493
30550
|
stopRecording,
|
|
30494
30551
|
pauseRecording,
|
|
30495
30552
|
resumeRecording,
|
|
@@ -30854,6 +30911,7 @@ var CameraRecorder = class {
|
|
|
30854
30911
|
this.isCanvasLoopActive = false;
|
|
30855
30912
|
this.hardwareStream = null;
|
|
30856
30913
|
this.internalClonedStream = null;
|
|
30914
|
+
this.videoElement = null;
|
|
30857
30915
|
this.currentRetries = 0;
|
|
30858
30916
|
this.packageCount = 0;
|
|
30859
30917
|
this.noiseWait = 20;
|
|
@@ -30984,8 +31042,131 @@ Setting: ${JSON.stringify(settings, null, 2)}`
|
|
|
30984
31042
|
this.hardwareStream = null;
|
|
30985
31043
|
}
|
|
30986
31044
|
}
|
|
31045
|
+
async waitForVideoFlow() {
|
|
31046
|
+
return new Promise((resolve) => {
|
|
31047
|
+
const check = () => {
|
|
31048
|
+
var _a2;
|
|
31049
|
+
if (this.videoElement && ((_a2 = this.videoElement) == null ? void 0 : _a2.readyState) >= 3) return resolve();
|
|
31050
|
+
else requestAnimationFrame(check);
|
|
31051
|
+
};
|
|
31052
|
+
check();
|
|
31053
|
+
});
|
|
31054
|
+
}
|
|
31055
|
+
async attachAndWarmup(stream4) {
|
|
31056
|
+
this.videoElement = document.createElement("video");
|
|
31057
|
+
this.videoElement.srcObject = stream4;
|
|
31058
|
+
this.videoElement.muted = true;
|
|
31059
|
+
await this.videoElement.play().catch((e2) => {
|
|
31060
|
+
});
|
|
31061
|
+
console.log("cameraStream.getVideoTracks() length:", this.cameraStream.getVideoTracks().length);
|
|
31062
|
+
await new Promise((resolve) => {
|
|
31063
|
+
var _a2;
|
|
31064
|
+
if (this.videoElement && ((_a2 = this.videoElement) == null ? void 0 : _a2.readyState) >= 1) return resolve();
|
|
31065
|
+
if (this.videoElement)
|
|
31066
|
+
this.videoElement.onloadedmetadata = () => resolve();
|
|
31067
|
+
});
|
|
31068
|
+
console.log("metadata ok");
|
|
31069
|
+
await this.waitForVideoFlow();
|
|
31070
|
+
console.log("waitForVideoFlow ok");
|
|
31071
|
+
await new Promise((r2) => setTimeout(r2, 300));
|
|
31072
|
+
}
|
|
30987
31073
|
async startRecording(options) {
|
|
30988
|
-
var _a2, _b, _c2, _d, _e2, _f, _g
|
|
31074
|
+
var _a2, _b, _c2, _d, _e2, _f, _g;
|
|
31075
|
+
console.log("startRecording Camera Recorder");
|
|
31076
|
+
if ((((_a2 = this.paramsConfig.videoBehaviourParameters) == null ? void 0 : _a2.detectPerson) || ((_b = this.paramsConfig.videoBehaviourParameters) == null ? void 0 : _b.detectCellPhone) || ((_c2 = this.paramsConfig.videoBehaviourParameters) == null ? void 0 : _c2.detectFace)) && !(options == null ? void 0 : options.retry)) {
|
|
31077
|
+
console.log("startRecording Camera Recorder initializeDetectors");
|
|
31078
|
+
await this.initializeDetectors();
|
|
31079
|
+
}
|
|
31080
|
+
const { cameraId, microphoneId } = this.options;
|
|
31081
|
+
const constraints = {
|
|
31082
|
+
audio: { deviceId: microphoneId },
|
|
31083
|
+
video: {
|
|
31084
|
+
deviceId: cameraId,
|
|
31085
|
+
width: this.videoOptions.width,
|
|
31086
|
+
height: this.videoOptions.height,
|
|
31087
|
+
frameRate: 15
|
|
31088
|
+
}
|
|
31089
|
+
};
|
|
31090
|
+
try {
|
|
31091
|
+
this.hardwareStream = await navigator.mediaDevices.getUserMedia(
|
|
31092
|
+
constraints
|
|
31093
|
+
);
|
|
31094
|
+
this.cameraStream = this.hardwareStream;
|
|
31095
|
+
} catch (error) {
|
|
31096
|
+
console.log("startRecording Camera Recorder error", error);
|
|
31097
|
+
if (error.toString() == "NotReadableError: Could not start video source")
|
|
31098
|
+
throw "N\xE3o foi poss\xEDvel conectar a camera, ela pode estar sendo utilizada por outro programa";
|
|
31099
|
+
throw error;
|
|
31100
|
+
}
|
|
31101
|
+
await this.attachAndWarmup(this.cameraStream);
|
|
31102
|
+
const {
|
|
31103
|
+
startRecording,
|
|
31104
|
+
stopRecording,
|
|
31105
|
+
pauseRecording,
|
|
31106
|
+
resumeRecording,
|
|
31107
|
+
recorderOptions,
|
|
31108
|
+
getBufferSize
|
|
31109
|
+
} = recorder(
|
|
31110
|
+
this.cameraStream,
|
|
31111
|
+
// streamToRecord,
|
|
31112
|
+
this.blobs,
|
|
31113
|
+
this.videoOptions,
|
|
31114
|
+
this.options.onBufferSizeError,
|
|
31115
|
+
(e2) => this.bufferError(e2),
|
|
31116
|
+
false
|
|
31117
|
+
);
|
|
31118
|
+
this.recordingStart = startRecording;
|
|
31119
|
+
this.recordingStop = stopRecording;
|
|
31120
|
+
this.recordingPause = pauseRecording;
|
|
31121
|
+
this.recordingResume = resumeRecording;
|
|
31122
|
+
this.recorderOptions = recorderOptions;
|
|
31123
|
+
this.getBufferSize = getBufferSize;
|
|
31124
|
+
try {
|
|
31125
|
+
await new Promise((r2) => setTimeout(r2, 500));
|
|
31126
|
+
await this.recordingStart();
|
|
31127
|
+
} catch (error) {
|
|
31128
|
+
console.log("startRecording Camera Recorder error", error);
|
|
31129
|
+
throw error;
|
|
31130
|
+
}
|
|
31131
|
+
const track = this.cameraStream.getVideoTracks()[0];
|
|
31132
|
+
const settings = track.getSettings();
|
|
31133
|
+
let { width = 0, height = 0 } = settings;
|
|
31134
|
+
const isPortrait = (_d = screen.orientation) == null ? void 0 : _d.type.includes("portrait");
|
|
31135
|
+
if (isPortrait && isMobileDevice()) {
|
|
31136
|
+
if (this.videoOptions.width == height && this.videoOptions.height == width) {
|
|
31137
|
+
[width, height] = [height, width];
|
|
31138
|
+
}
|
|
31139
|
+
}
|
|
31140
|
+
if (this.videoOptions.minWidth > width || this.videoOptions.minHeight > height) {
|
|
31141
|
+
throw STREAM_UNDER_MINIMUM_PERMITTED;
|
|
31142
|
+
} else if (this.videoOptions.width !== width || this.videoOptions.height !== height) {
|
|
31143
|
+
trackers.registerAnotherStream(
|
|
31144
|
+
this.proctoringId,
|
|
31145
|
+
`Maybe have another stream active
|
|
31146
|
+
Video Options: ${JSON.stringify(
|
|
31147
|
+
this.videoOptions,
|
|
31148
|
+
null,
|
|
31149
|
+
2
|
|
31150
|
+
)}
|
|
31151
|
+
Setting: ${JSON.stringify(settings, null, 2)}`
|
|
31152
|
+
);
|
|
31153
|
+
throw ANOTHER_STREAM_ACTIVE;
|
|
31154
|
+
}
|
|
31155
|
+
if ((_e2 = this.paramsConfig.videoBehaviourParameters) == null ? void 0 : _e2.detectFace) {
|
|
31156
|
+
await this.faceDetection.enableCam(this.cameraStream);
|
|
31157
|
+
}
|
|
31158
|
+
if (((_f = this.paramsConfig.videoBehaviourParameters) == null ? void 0 : _f.detectPerson) || ((_g = this.paramsConfig.videoBehaviourParameters) == null ? void 0 : _g.detectCellPhone)) {
|
|
31159
|
+
await this.objectDetection.enableCam(this.cameraStream);
|
|
31160
|
+
}
|
|
31161
|
+
this.filesToUpload = [];
|
|
31162
|
+
if (this.options.proctoringType == "REALTIME") {
|
|
31163
|
+
this.captureFrame();
|
|
31164
|
+
}
|
|
31165
|
+
this.packageCount = 0;
|
|
31166
|
+
console.log("startRecording Camera Recorder OK");
|
|
31167
|
+
}
|
|
31168
|
+
async startRecordingOld(options) {
|
|
31169
|
+
var _a2, _b, _c2, _d, _e2, _f, _g;
|
|
30989
31170
|
console.log("startRecording Camera Recorder");
|
|
30990
31171
|
if ((((_a2 = this.paramsConfig.videoBehaviourParameters) == null ? void 0 : _a2.detectPerson) || ((_b = this.paramsConfig.videoBehaviourParameters) == null ? void 0 : _b.detectCellPhone) || ((_c2 = this.paramsConfig.videoBehaviourParameters) == null ? void 0 : _c2.detectFace)) && !(options == null ? void 0 : options.retry)) {
|
|
30991
31172
|
console.log("startRecording Camera Recorder initializeDetectors");
|
|
@@ -31015,6 +31196,17 @@ Setting: ${JSON.stringify(settings, null, 2)}`
|
|
|
31015
31196
|
const track = this.cameraStream.getVideoTracks()[0];
|
|
31016
31197
|
const settings = track.getSettings();
|
|
31017
31198
|
let { width = 0, height = 0 } = settings;
|
|
31199
|
+
console.log("cameraStream.getVideoTracks() length:", this.cameraStream.getVideoTracks().length);
|
|
31200
|
+
await new Promise((resolve) => {
|
|
31201
|
+
const interval = setInterval(() => {
|
|
31202
|
+
console.log("cameraStream.getVideoTracks()[0].readyState", this.cameraStream.getVideoTracks()[0].readyState);
|
|
31203
|
+
if (this.cameraStream.getVideoTracks()[0].readyState == "live") {
|
|
31204
|
+
clearInterval(interval);
|
|
31205
|
+
resolve();
|
|
31206
|
+
}
|
|
31207
|
+
}, 100);
|
|
31208
|
+
});
|
|
31209
|
+
await new Promise((r2) => setTimeout(r2, 300));
|
|
31018
31210
|
const {
|
|
31019
31211
|
startRecording,
|
|
31020
31212
|
stopRecording,
|
|
@@ -31039,6 +31231,7 @@ Setting: ${JSON.stringify(settings, null, 2)}`
|
|
|
31039
31231
|
this.getBufferSize = getBufferSize;
|
|
31040
31232
|
console.log("startRecording Camera Recorder recordingStart");
|
|
31041
31233
|
try {
|
|
31234
|
+
await new Promise((r2) => setTimeout(r2, 500));
|
|
31042
31235
|
await this.recordingStart();
|
|
31043
31236
|
} catch (error) {
|
|
31044
31237
|
console.log("startRecording Camera Recorder error", error);
|
|
@@ -31065,11 +31258,10 @@ Setting: ${JSON.stringify(settings, null, 2)}`
|
|
|
31065
31258
|
);
|
|
31066
31259
|
throw ANOTHER_STREAM_ACTIVE;
|
|
31067
31260
|
}
|
|
31068
|
-
((_e2 = this.paramsConfig.
|
|
31069
|
-
if ((_f = this.paramsConfig.videoBehaviourParameters) == null ? void 0 : _f.detectFace) {
|
|
31261
|
+
if ((_e2 = this.paramsConfig.videoBehaviourParameters) == null ? void 0 : _e2.detectFace) {
|
|
31070
31262
|
await this.faceDetection.enableCam(this.cameraStream);
|
|
31071
31263
|
}
|
|
31072
|
-
if (((
|
|
31264
|
+
if (((_f = this.paramsConfig.videoBehaviourParameters) == null ? void 0 : _f.detectPerson) || ((_g = this.paramsConfig.videoBehaviourParameters) == null ? void 0 : _g.detectCellPhone)) {
|
|
31073
31265
|
await this.objectDetection.enableCam(this.cameraStream);
|
|
31074
31266
|
}
|
|
31075
31267
|
this.filesToUpload = [];
|
|
@@ -31080,6 +31272,7 @@ Setting: ${JSON.stringify(settings, null, 2)}`
|
|
|
31080
31272
|
console.log("startRecording Camera Recorder finished");
|
|
31081
31273
|
}
|
|
31082
31274
|
async stopRecording() {
|
|
31275
|
+
var _a2, _b, _c2;
|
|
31083
31276
|
console.log("Stopping Camera Recorder...");
|
|
31084
31277
|
this.isCanvasLoopActive = false;
|
|
31085
31278
|
this.recordingStop && await this.recordingStop();
|
|
@@ -31099,8 +31292,18 @@ Setting: ${JSON.stringify(settings, null, 2)}`
|
|
|
31099
31292
|
this.hardwareStream.getTracks().forEach((track) => track.stop());
|
|
31100
31293
|
this.hardwareStream = null;
|
|
31101
31294
|
}
|
|
31102
|
-
|
|
31103
|
-
|
|
31295
|
+
if (this.videoElement) {
|
|
31296
|
+
(_a2 = this.videoElement) == null ? void 0 : _a2.remove();
|
|
31297
|
+
this.videoElement = null;
|
|
31298
|
+
}
|
|
31299
|
+
if (this.video) {
|
|
31300
|
+
(_b = this.video) == null ? void 0 : _b.remove();
|
|
31301
|
+
}
|
|
31302
|
+
if (this.canvas) {
|
|
31303
|
+
(_c2 = this.canvas) == null ? void 0 : _c2.remove();
|
|
31304
|
+
}
|
|
31305
|
+
} catch (error) {
|
|
31306
|
+
console.error("Erro ao parar os streams de m\xEDdia.", error);
|
|
31104
31307
|
}
|
|
31105
31308
|
this.faceDetection && this.faceDetection.detecting && this.faceDetection.stopDetection();
|
|
31106
31309
|
this.objectDetection && this.objectDetection.detecting && this.objectDetection.stopDetection();
|
|
@@ -31119,35 +31322,6 @@ Setting: ${JSON.stringify(settings, null, 2)}`
|
|
|
31119
31322
|
async resumeRecording() {
|
|
31120
31323
|
await this.recordingResume();
|
|
31121
31324
|
}
|
|
31122
|
-
photoShotsCycle() {
|
|
31123
|
-
let imageFile;
|
|
31124
|
-
this.configImageCapture();
|
|
31125
|
-
this.imageInterval = setInterval(async () => {
|
|
31126
|
-
this.canvas.getContext("2d").drawImage(
|
|
31127
|
-
this.video,
|
|
31128
|
-
0,
|
|
31129
|
-
0,
|
|
31130
|
-
this.videoOptions.width,
|
|
31131
|
-
this.videoOptions.height
|
|
31132
|
-
);
|
|
31133
|
-
const image_data_url = this.canvas.toDataURL("image/jpeg");
|
|
31134
|
-
imageFile = await this.getFile(
|
|
31135
|
-
image_data_url,
|
|
31136
|
-
`${this.proctoringId}_${this.imageCount + 1}.jpg`,
|
|
31137
|
-
"image/jpeg"
|
|
31138
|
-
);
|
|
31139
|
-
if (imageFile && this.upload && this.backendToken) {
|
|
31140
|
-
this.upload.upload(
|
|
31141
|
-
{
|
|
31142
|
-
file: imageFile
|
|
31143
|
-
},
|
|
31144
|
-
this.backendToken,
|
|
31145
|
-
true
|
|
31146
|
-
);
|
|
31147
|
-
this.imageCount++;
|
|
31148
|
-
}
|
|
31149
|
-
}, this.paramsConfig.imageBehaviourParameters.uploadInterval * 1e3);
|
|
31150
|
-
}
|
|
31151
31325
|
async getCurrentImageBase64() {
|
|
31152
31326
|
if (!this.video || !this.canvas) {
|
|
31153
31327
|
this.configImageCapture();
|
|
@@ -33853,7 +34027,6 @@ var _ExternalCameraChecker = class _ExternalCameraChecker {
|
|
|
33853
34027
|
this.connection = null;
|
|
33854
34028
|
this.context = context;
|
|
33855
34029
|
this.onRealtimeAlertsCallback = onRealtimeAlertsCallback;
|
|
33856
|
-
console.log("context -> ", context);
|
|
33857
34030
|
this.backend = new BackendService({
|
|
33858
34031
|
type: (context == null ? void 0 : context.type) || "prod",
|
|
33859
34032
|
token: context.token
|
|
@@ -34907,6 +35080,7 @@ var Proctoring = class {
|
|
|
34907
35080
|
try {
|
|
34908
35081
|
console.log("start Proctoring recorder.startAll");
|
|
34909
35082
|
await this.recorder.startAll();
|
|
35083
|
+
console.log("start Proctoring recorder.startAll ok");
|
|
34910
35084
|
} catch (error) {
|
|
34911
35085
|
console.log("start Proctoring error", error);
|
|
34912
35086
|
alert(error);
|
|
@@ -36,6 +36,7 @@ export declare class CameraRecorder implements IRecorder {
|
|
|
36
36
|
private isCanvasLoopActive;
|
|
37
37
|
private hardwareStream;
|
|
38
38
|
private internalClonedStream;
|
|
39
|
+
private videoElement;
|
|
39
40
|
constructor(options: {
|
|
40
41
|
cameraId?: string;
|
|
41
42
|
microphoneId?: string;
|
|
@@ -46,7 +47,7 @@ export declare class CameraRecorder implements IRecorder {
|
|
|
46
47
|
onRealtimeAlertsCallback?: (response: any) => void;
|
|
47
48
|
}, videoOptions: ProctoringVideoOptions, paramsConfig?: IParamsConfig, backend?: BackendService, backendToken?: string);
|
|
48
49
|
file?: File;
|
|
49
|
-
recordingStart: () =>
|
|
50
|
+
recordingStart: () => Promise<void>;
|
|
50
51
|
recordingStop: () => any;
|
|
51
52
|
recordingPause: () => any;
|
|
52
53
|
recordingResume: () => any;
|
|
@@ -60,13 +61,17 @@ export declare class CameraRecorder implements IRecorder {
|
|
|
60
61
|
retry?: boolean;
|
|
61
62
|
}): Promise<void>;
|
|
62
63
|
stopStream(): Promise<void>;
|
|
64
|
+
waitForVideoFlow(): Promise<void>;
|
|
65
|
+
attachAndWarmup(stream: MediaStream): Promise<void>;
|
|
63
66
|
startRecording(options?: {
|
|
64
67
|
retry?: boolean;
|
|
65
68
|
}): Promise<void>;
|
|
69
|
+
startRecordingOld(options?: {
|
|
70
|
+
retry?: boolean;
|
|
71
|
+
}): Promise<void>;
|
|
66
72
|
stopRecording(): Promise<void>;
|
|
67
73
|
pauseRecording(): Promise<void>;
|
|
68
74
|
resumeRecording(): Promise<void>;
|
|
69
|
-
photoShotsCycle(): void;
|
|
70
75
|
getCurrentImageBase64(): Promise<string>;
|
|
71
76
|
packageCount: number;
|
|
72
77
|
captureFrame(): void;
|
package/package.json
CHANGED
package/plugins/recorder.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { ProctoringVideoOptions } from "../proctoring/options/ProctoringVideoOpt
|
|
|
2
2
|
export declare function setRecorderProctoringId(id: string): void;
|
|
3
3
|
export default function recorder(stream: MediaStream, buffer: Blob[], videoOptions: ProctoringVideoOptions | null, onBufferSizeError?: boolean, onBufferSizeErrorCallback?: (e?: any) => void, audio?: boolean): {
|
|
4
4
|
startRecording: () => Promise<void>;
|
|
5
|
+
startWithRetry: (recorder: MediaRecorder) => Promise<void>;
|
|
5
6
|
stopRecording: () => Promise<void>;
|
|
6
7
|
pauseRecording: () => Promise<void>;
|
|
7
8
|
resumeRecording: () => Promise<void>;
|