カメラ・マイクへのアクセス

getUserMedia MediaStream enumerateDevices

WebRTCの基盤となるMedia Streams APIを使い、カメラ・マイクにアクセスします。HTTPS環境が必要です。

デモ:カメラ・マイクアクセス

コード例

js
// カメラとマイクへのアクセス(許可ダイアログが表示)
const stream = await navigator.mediaDevices.getUserMedia({
  video: {
    width: { ideal: 1280 },
    height: { ideal: 720 },
    facingMode: 'user',   // 'user'=前カメラ, 'environment'=後カメラ
  },
  audio: {
    echoCancellation: true,  // エコーキャンセル
    noiseSuppression: true,  // ノイズ除去
    sampleRate: 44100,
  },
});

// videoタグに表示
videoEl.srcObject = stream;
await videoEl.play();

// トラックの操作
stream.getVideoTracks();  // ビデオトラック配列
stream.getAudioTracks();  // オーディオトラック配列
stream.getTracks().forEach(track => track.stop()); // 停止(カメラランプ消灯)

// デバイス一覧の取得(許可後のみラベル取得可)
const devices = await navigator.mediaDevices.enumerateDevices();
devices.filter(d => d.kind === 'videoinput'); // カメラ一覧

// デバイス変更の監視
navigator.mediaDevices.addEventListener('devicechange', async () => {
  const updated = await navigator.mediaDevices.enumerateDevices();
  updateDeviceList(updated);
});

// スクリーン共有
const screenStream = await navigator.mediaDevices.getDisplayMedia({
  video: true,
  audio: true, // システム音声(対応ブラウザのみ)
});

NEWgetDisplayMedia の新オプション & preferCurrentTab

js
// スクリーン共有の改善(Chrome 94+)
const stream = await navigator.mediaDevices.getDisplayMedia({
  video: {
    displaySurface: 'browser', // 'browser' | 'window' | 'monitor'
    frameRate: 60,
  },
  audio: {
    suppressLocalAudioPlayback: false, // 自分の音声も含む
  },
  // Chrome 122+: 現在のタブを優先表示
  preferCurrentTab: true,
  // Chrome 107+: セルフブラウジングのサーフェスを除外
  selfBrowserSurface: 'exclude',
  // タブのシステム音声もキャプチャ
  systemAudio: 'include',
});

// MediaRecorder でストリームを録画
const recorder = new MediaRecorder(stream);
const chunks = [];
recorder.ondataavailable = e => chunks.push(e.data);
recorder.onstop = () => {
  const blob = new Blob(chunks, { type: 'video/webm' });
  downloadFile(blob, 'recording.webm');
};
recorder.start();
setTimeout(() => recorder.stop(), 10000); // 10秒録画

🤖 AIプロンプトテンプレート

以下の要件を満たすTypeScript + Reactコンポーネントを作成してください。

- getUserMediaを使ったカメラ・マイクへのアクセスのサンプルを示す
- カメラ映像をvideo要素にリアルタイム表示する例を含める
- マイク音声の録音(MediaRecorder API)のサンプルを含める
- デバイスの権限リクエストとエラーハンドリングの例を示す
- 複数カメラ・マイクデバイスの一覧取得と切り替えのサンプルを含める
- コメントは日本語で記述する

⚠️ このプロンプトはあくまでたたき台です。AIの回答はモデルやバージョン、会話の文脈によって毎回異なります。意図通りに動かない場合は、条件を追記・修正してお使いください。