JavaScript 使用可能なカメラを列挙して撮影するカメラを指定する
JavaScript デバイスのカメラから動画を撮影するで、カメラから動画を撮影する方法を紹介しました。
スマホでも同じようにカメラで撮影ができますが、スマホの場合は内側と外側の2箇所にカメラがあることが多いです。
どちらのカメラを使用するか、ユーザに選択させ、撮影するカメラを指定する方法を紹介します。
使用可能なカメラを取得
まずは使用可能なカメラの一覧を取得します。
enumerateDevices
で、使用可能な入出力メディアデバイス(カメラやマイク)の一覧を取得できます。
結果はPromise
で返却されます。
const devices = (await navigator.mediaDevices.enumerateDevices());
// または
navigator.mediaDevices.enumerateDevices().then((devices) => {
})
取得した情報のうち、以下を使用します。
- kind
videoinput
またはaudioinput
が設定されます。- deviceId
- デバイスを識別するIDです。使用するカメラを指定する際に使用します。
- label
- デバイスの名前です。ユーザにデバイスを選択させる際の選択肢として表示します。
今回はカメラのみ取得したいため、kind
がvideoinput
のデータのみを取得するします。
const devices = (await navigator.mediaDevices.enumerateDevices())
.filter((device) => device.kind === 'videoinput');
例えばコンボボックスに一覧表示してユーザに使用するカメラを選択させる場合は以下のようにします。
const devices = (await navigator.mediaDevices.enumerateDevices())
.filter((device) => device.kind === 'videoinput')
.map((device) => {
return {
text: device.label,
value: device.deviceId,
};
});
カメラを指定して撮影
deviceId
を指定してカメラを起動します。
カメラの起動方法はJavaScript デバイスのカメラから動画を撮影するで詳しく紹介しています。
const media = await navigator.mediaDevices.getUserMedia({
video: true,
video: {
deviceId: 選択したdeviceId,
},
audio: false,
});