【JavaScript】navigator.mediaDevices.getUserMedia【WebCamera】

  • このエントリーをはてなブックマークに追加

navigator.mediaDevices.getUserMediaについて分かったことを書いていく。



navigator.mediaDevices.getUserMedia()メソッドは非同期なので、awaitを使用して待機する必要がある。
awaitキーワードを使用することで、getUserMedia()メソッドが完了し、streamオブジェクトが解決されるまで待機します。これにより、メディアストリームが取得される前に次のコードが実行されるのを防ぐことが可能である。
navigator.mediaDevices.getUserMedia()メソッドを使用時に出るエラーをcatchブロックで受け取る。
エラーは何種類かあるのでerror.nameによって分類する。
次のようなコードにした。
WebCameraのエラーのハンドリングがCommon getUserMedia() Errors (addpipe.com) ExternalLinkに載っていたので、これを使用することにする。このエラーのハンドリングで不都合があったら修正していくことにする。


const cw = 640;
const ch = 360;

const constraints = window.constraints = {
  // audioがfalseでないとリモートデスクトップ越しにうまく動かない。
  audio: false,
  video: {
    width: cw,
    height: ch
  }
};

try {

  // getUserMedia()メソッドの呼び出しを非同期的に待機し、取得したメディアストリームをstream変数に代入する。
  // streamオブジェクトは、ビデオやオーディオなどのメディアストリームを表す。
  const stream = await navigator.mediaDevices.getUserMedia(constraints);

} catch (error) {

  // log to console first 
  console.error(error);

  // handle the error
  if (error.name == "NotFoundError" || error.name == "DevicesNotFoundError") {
    // 「required track is missing」=「必要なトラックない。」
    // つまり、「カメラが見つからない。」= 「カメラが見つからない。」
    console.error("No Camera.");
  } else if (error.name == "NotReadableError" || error.name == "TrackStartError") {
    // webcam or mic are already in use 
    // webカメラ またはマイクがすでに使用されている。
    console.error("Webcam or mic are already in use.");
  } else if (error.name == "OverconstrainedError" || error.name == "ConstraintNotSatisfiedError") {
    // constraints can not be satisfied by avb. devices 
    // 「制約条件がAVB(Audio Video Bridging)デバイスによって満たされない。」
    const v = constraints.video;
    // 「解像度 ${v.width}x${v.height} px はお使いのデバイスではサポートされていません。」
    console.error(`The resolution ${v.width}x${v.height} px is not supported by your device.`);
  } else if (error.name == "NotAllowedError" || error.name == "PermissionDeniedError") {
    // permission denied in browser 
    // ブラウザでパーミッションが拒否された。
    // カメラとマイクの使用が許可されていない。デモを動作させるには、あなたのページにデバイスへのアクセスを許可する必要がある。
    console.error('Permissions have not been granted to use your camera and microphone, you need to allow the page access to your devices in order for the demo to work.');
  } else if (error.name == "TypeError") {
    // 「empty constraints object」=「制約オブジェクトが空である。」
    // 「制約オブジェクトが空である。」というエラーメッセージは、カメラの設定のパラメータが不正または欠落していることを示している。
    // カメラの設定のパラメータが不正または欠落している
    console.error('The camera settings parameters are invalid or missing.');
  } else {
    // other errors 
    console.error(`getUserMedia error:${error.name}`);
  }

}
  • このエントリーをはてなブックマークに追加

SNSでもご購読できます。

コメントを残す

*