エラーハンドリングとリトライ機能

エラー1: NotReadableError(デバイスが使用中)
他のアプリケーションがカメラを使用している場合に発生します。最大3回までリトライします。
解決方法: リトライ機能
リトライ回数をカウントし、待機時間を段階的に増やしながら再試行します。
const maxRetries = 3; const retryDelay = 500; // ミリ秒 if (error.name === 'NotReadableError') { if (retryCount < maxRetries) { await new Promise(resolve => setTimeout(resolve, retryDelay * (retryCount + 1)) ); return await startCamera(deviceId, retryCount + 1); } }
エラー2: NotAllowedError(アクセス許可が必要)
ユーザーがカメラへのアクセスを許可していない場合に発生します。
解決方法: 適切なエラーメッセージ
ブラウザの設定を確認するよう、ユーザーに分かりやすいメッセージを表示します。
if (error.name === 'NotAllowedError') { errorMessage = 'カメラのアクセス許可が必要です。 ブラウザの設定を確認してください'; }
エラー3: NotFoundError(カメラが見つからない)
指定したカメラデバイスが見つからない場合に発生します。
解決方法: デバイスIDの検証
カメラリストから選択されたデバイスIDが有効かどうかを事前に確認します。
const cameras = await getCameras(); const cameraExists = cameras.some( cam => cam.deviceId === deviceId ); if (!cameraExists) { errorMessage = 'カメラが見つかりません'; }
エラー4: OverconstrainedError(設定が対応していない)
指定した解像度やフレームレートがカメラで対応していない場合に発生します。
解決方法: ideal制約の使用
`exact`ではなく`ideal`を使用することで、利用可能な設定に自動的に調整されます。
const constraints = { video: { width: { ideal: 640 }, // exactではなくideal height: { ideal: 480 }, deviceId: { exact: deviceId } // デバイスIDのみexact } };
エラーハンドリングの原則: エラータイプに応じた適切なメッセージを表示し、リトライ可能な場合は自動的に再試行します。ユーザーにとって分かりやすく、開発者にとってデバッグしやすいメッセージを心がけました。