jspsych 8.2.1 → 8.2.2

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jspsych",
3
- "version": "8.2.1",
3
+ "version": "8.2.2",
4
4
  "description": "Behavioral experiments in a browser",
5
5
  "type": "module",
6
6
  "main": "dist/index.cjs",
@@ -48,7 +48,7 @@
48
48
  },
49
49
  "devDependencies": {
50
50
  "@fontsource/open-sans": "4.5.3",
51
- "@jspsych/config": "^3.2.2",
51
+ "@jspsych/config": "^3.3.0",
52
52
  "@types/dom-mediacapture-record": "^1.0.11",
53
53
  "base64-inline-loader": "^2.0.1",
54
54
  "css-loader": "^6.6.0",
@@ -284,11 +284,38 @@ export class MediaAPI {
284
284
  private camera_recorder: MediaRecorder = null;
285
285
 
286
286
  initializeCameraRecorder(stream: MediaStream, opts?: MediaRecorderOptions) {
287
+ let mimeType = this.getCompatibleMimeType() || "video/webm";
288
+ const recorderOptions: MediaRecorderOptions = {
289
+ ...opts,
290
+ mimeType
291
+ }
292
+
287
293
  this.camera_stream = stream;
288
- const recorder = new MediaRecorder(stream, opts);
294
+ const recorder = new MediaRecorder(stream, recorderOptions);
289
295
  this.camera_recorder = recorder;
290
296
  }
291
297
 
298
+ // mimetype checking code adapted from https://github.com/lookit/lookit-jspsych/blob/develop/packages/record/src/videoConfig.ts#L673-L699
299
+ /** returns a compatible mimetype string, or null if none from the array are supported. */
300
+ private getCompatibleMimeType(): string {
301
+ const types = [
302
+ // chrome firefox edge
303
+ "video/webm;codecs=vp9,opus",
304
+ "video/webm;codecs=vp8,opus",
305
+ // general
306
+ "video/mp4;codecs=avc1.42E01E,mp4a.40.2",
307
+ // safari
308
+ "video/mp4;codecs=h264,aac",
309
+ "video/mp4;codecs=hevc,aac",
310
+ ]
311
+ for (const mimeType of types) {
312
+ if (MediaRecorder.isTypeSupported(mimeType)) {
313
+ return mimeType;
314
+ }
315
+ }
316
+ return null;
317
+ }
318
+
292
319
  getCameraStream(): MediaStream {
293
320
  return this.camera_stream;
294
321
  }