この記事では、JavaScriptとHTMLを使って、パソコンやスマホのカメラ映像をWebブラウザに表示する方法を解説します。
以下の内容を図やサンプルコードを用いて解説します。ご参考になれば幸いです。
- カメラの映像をブラウザに表示する方法
navigator.mediaDevices.getUserMedia()
の動作とブラウザの挙動navigator.mediaDevices.getUserMedia()
のエラーnavigator.mediaDevices.getUserMedia()
はHTTPSでないと動作しないので注意
カメラの映像をブラウザに表示する方法
Webページ上でユーザーのカメラ(Webカメラやスマホのカメラ)の映像を表示するには、navigator.mediaDevices.getUserMedia()
メソッドを使用します。
このメソッドを使うと、ブラウザからカメラにアクセスして、カメラ映像を取得することができます。取得したカメラ映像を<video>
要素に渡すことで、カメラの映像を表示することができます。
以下にサンプルコードを以下に示します。このコードをindex.html
として作成し、ブラウザで開くだけでカメラの映像を確認できます。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>カメラ映像を表示</title>
</head>
<body>
<h2>カメラ映像</h2>
<video id="camera" autoplay></video>
<script>
const camera = document.getElementById('camera');
navigator.mediaDevices
.getUserMedia({
video: true,
audio: false,
})
.then((stream) => {
camera.srcObject = stream;
})
.catch((error) => {
console.error('カメラにアクセスできません:', error);
});
</script>
</body>
</html>
navigator.mediaDevices.getUserMedia({ video: true })
でカメラの許可ポップアップが表示されます。

許可ポップアップにて、許可した場合、ユーザーのカメラ(Webカメラやスマホのカメラ)にアクセスし、カメラ映像を取得することができます。許可しなかった場合、navigator.mediaDevices.getUserMedia()
メソッドがエラーを返すためcatch
のエラー処理が実行されます。上記のサンプルコードでは、console.error
でエラー出力しています。
また、video
要素のsrcObject
にストリームを設定することで、映像をブラウザに表示しています。
補足
<video id="camera" autoplay>
でautoplay
が設定されていると、ストリームをvideo
要素のsrcObject
にストリームを設定した時点で自動的に再生が開始されます。そのため、camera.play()
を明示的に呼び出さなくてもカメラ映像が表示されます。autoplay
がない場合は、camera.play()
を明示的に呼び出す必要があります。
camera.srcObject = stream;
camera.play(); // 明示的に再生開始
navigator.mediaDevices.getUserMedia()の動作とブラウザの挙動
navigator.mediaDevices.getUserMedia()
メソッドは、カメラやマイクにアクセスするためのWeb APIです。このメソッドの引数には、オーディオ(audio
)とビデオ(video
)の設定を含むオブジェクトを渡すことができます。
navigator.mediaDevices.getUserMedia({
video: true, // カメラ映像を取得
audio: false // マイクは使用しない
});
設定内容によって、ブラウザの挙動が変わります。
video: true の場合(音声なしのカメラ映像のみ)
カメラのアクセスを要求すると、「カメラを使用する」という許可ポップアップが表示されます。
「許可する」をクリックすると、カメラの映像を取得することができます。「ブロック」をクリックすると、カメラへのアクセスが拒否されます。
video: true, audio: true の場合(カメラ+マイク)
カメラとマイクの両方を要求すると、「カメラを使用する」「マイクを使用する」という許可ポップアップが表示されます。
「許可する」をクリックすると、カメラの映像とマイク音声を取得することができます。「ブロック」をクリックすると、どちらか一方、または両方へのアクセスが拒否されます。
navigator.mediaDevices.getUserMedia()のエラー
許可ポップアップにて、カメラの使用をブロックすると、以下のエラーが発生します。
NotAllowedError: Permission denied
カメラが物理的に接続されていない、またはPCにカメラが搭載されていない場合、以下のエラーが発生します。
NotFoundError: Requested device not found
navigator.mediaDevices.getUserMedia()はHTTPSでないと動作しないので注意
navigator.mediaDevices.getUserMedia()
を利用するにはHTTPS環境での実行が必須です。これは、ユーザーのプライバシー保護とセキュリティ強化のために、ブラウザ側でHTTP環境では動作しないよう制限されているからです。そのため、本番環境でgetUserMedia()
を利用するには、必ずHTTPSでサイトを公開する必要があります。
ただし、開発中のローカル環境では、http://localhost
に限り例外的に動作が許可されています。そのため、開発時には http://localhost:3000
などで動作確認を行うことができます。