From 98ddd84a7341fa52863b246b5f5b583197f91b78 Mon Sep 17 00:00:00 2001 From: Miguel Climent Date: Thu, 15 Oct 2020 16:32:26 +0200 Subject: [PATCH 1/2] allow fallback videoConstraints --- src/react-webcam.tsx | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/react-webcam.tsx b/src/react-webcam.tsx index 1459f594..1bf03ae0 100644 --- a/src/react-webcam.tsx +++ b/src/react-webcam.tsx @@ -60,7 +60,7 @@ export interface WebcamProps extends React.HTMLProps { onUserMediaError: (error: string) => void; screenshotFormat: "image/webp" | "image/png" | "image/jpeg"; screenshotQuality: number; - videoConstraints?: MediaStreamConstraints["video"]; + videoConstraints?: MediaStreamConstraints["video"] | MediaStreamConstraints["video"][]; } interface WebcamState { @@ -242,7 +242,10 @@ export default class Webcam extends React.Component { private requestUserMedia() { const { props } = this; - const sourceSelected = (audioConstraints, videoConstraints) => { + const sourceSelected = (audioConstraints, videoConstraintsSet) => { + const videoConstraints = Array.isArray(videoConstraintsSet) + ? videoConstraintsSet[0] + : videoConstraintsSet; const constraints: MediaStreamConstraints = { video: typeof videoConstraints !== "undefined" ? videoConstraints : true }; @@ -252,6 +255,10 @@ export default class Webcam extends React.Component { typeof audioConstraints !== "undefined" ? audioConstraints : true; } + if (constraints.video) { + console.log('[webcam] trying constraints', constraints.video); + } + navigator.mediaDevices .getUserMedia(constraints) .then(stream => { @@ -262,7 +269,13 @@ export default class Webcam extends React.Component { } }) .catch(e => { - this.handleUserMedia(e); + // try next constraints if available + const isRecoverableError = e.name === "AbortError" || e.name === "OverconstrainedError"; + if (isRecoverableError && Array.isArray(videoConstraintsSet) && videoConstraintsSet.length > 1) { + sourceSelected(audioConstraints, videoConstraintsSet.slice(1)); + } else { + this.handleUserMedia(e); + } }); }; From 12086821e7fe7a8d566ccecd4250578f412f61b7 Mon Sep 17 00:00:00 2001 From: Miguel Climent Date: Thu, 15 Oct 2020 16:32:36 +0200 Subject: [PATCH 2/2] add prepare script --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 9f66d078..c8f63b74 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "types": "dist/react-webcam.d.ts", "scripts": { "prepublish": "npm run build:production", + "prepare": "npm run build:production", "build": "NODE_ENV=development webpack-cli", "build:production": "npm run build && NODE_ENV=production webpack-cli", "lint": "eslint src/react-webcam.tsx",