[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/ja/docs/Web/API/Screen_Capture_API/Using_Screen_Capture [Back]  [Original]

API - Web API | MDN

MDN Web Docs

View in English Always switch to English

API

Want more browser support for this feature? Tell us why.

API getDisplayMedia() WebRTC

: WebRTC adapter.js shim getDisplayMedia() API ChromeEdgeFirefox

MediaStream navigator.mediaDevices.getDisplayMedia() displayMediaOptions

js
const displayMediaOptions = {
  video: {
    displaySurface: "browser",
  },
  audio: {
    suppressLocalAudioPlayback: false,
  },
  preferCurrentTab: false,
  selfBrowserSurface: "exclude",
  systemAudio: "include",
  surfaceSwitching: "include",
  monitorTypeSurfaces: "include",
};

: async/await

js
async function startCapture(displayMediaOptions) {
  let captureStream = null;

  try {
    captureStream =
      await navigator.mediaDevices.getDisplayMedia(displayMediaOptions);
  } catch (err) {
    console.error(`Error: ${err}`);
  }
  return captureStream;
}

await Promise

: Promise

js
function startCapture(displayMediaOptions) {
  return navigator.mediaDevices
    .getDisplayMedia(displayMediaOptions)
    .catch((err) => {
      console.error(err);
      return null;
    });
}

startCapture() MediaStream

Chrome [Chrome ]

captureStream

API API 1 1

2

API

getDisplayMedia()

options video audio MediaTrackConstraintsMediaTrackSupportedConstraintsMediaTrackSettings

width

: API 1

: enumerateDevices() getDisplayMedia() devicechange

getDisplayMedia()

getDisplayMedia()

js
const displayMediaOptions = {
  video: true,
  audio: true,
};

audio video

js
const displayMediaOptions = {
  video: {
    displaySurface: "window",
  },
  audio: {
    echoCancellation: true,
    noiseSuppression: true,
    sampleRate: 44100,
    suppressLocalAudioPlayback: true,
  },
  surfaceSwitching: "include",
  selfBrowserSurface: "exclude",
  systemAudio: "exclude",
};

44.1kHz

MediaStream 1

Promise getDisplayMedia() getDisplayMedia() MediaStream

<video>

JavaScript

getUserMedia() getDisplayMedia()

<video>//

displayMediaOptions getDisplayMedia() displaySurface always

js
const videoElem = document.getElementById("video");
const logElem = document.getElementById("log");
const startElem = document.getElementById("start");
const stopElem = document.getElementById("stop");

// Options for getDisplayMedia()

const displayMediaOptions = {
  video: {
    displaySurface: "window",
  },
  audio: false,
};

// Set event listeners for the start and stop buttons
startElem.addEventListener(
  "click",
  (evt) => {
    startCapture();
  },
  false,
);

stopElem.addEventListener(
  "click",
  (evt) => {
    stopCapture();
  },
  false,
);

console ID log <pre>

js
console.log = (msg) => (logElem.textContent = `${logElem.textContent}\n${msg}`);
console.error = (msg) =>
  (logElem.textContent = `${logElem.textContent}\nError: ${msg}`);

console.log() console.error()

startCapture() MediaStream startCapture() "Start Capture"

js
async function startCapture() {
  logElem.textContent = "";

  try {
    videoElem.srcObject =
      await navigator.mediaDevices.getDisplayMedia(displayMediaOptions);
    dumpOptionsInfo();
  } catch (err) {
    console.error(err);
  }
}

startCapture() getDisplayMedia() displayMediaOptions jsxref("Operators/await", "await")}} getDisplayMedia() Promise MediaStream

MediaStream srcObject <video>

dumpOptionsInfo()

catch()

stopCapture() "Stop Capture" MediaStream.getTracks() stop() srcObject null

js
function stopCapture(evt) {
  let tracks = videoElem.srcObject.getTracks();

  tracks.forEach((track) => track.stop());
  videoElem.srcObject = null;
}

startCapture() dumpOptions()

js
function dumpOptionsInfo() {
  const videoTrack = videoElem.srcObject.getVideoTracks()[0];

  console.log("Track settings:");
  console.log(JSON.stringify(videoTrack.getSettings(), null, 2));
  console.log("Track constraints:");
  console.log(JSON.stringify(videoTrack.getConstraints(), null, 2));
}

MediaStream getVideoTracks() getSettings() getConstraints()

HTML

HTML

html
<p>
  
  
</p>

<p>
  <button id="start"></button>&nbsp;<button id="stop">
    
  </button>
</p>

<video id="video" autoplay></video>
<br />

<strong>Log:</strong>
<br />
<pre id="log"></pre>

HTML

  1. "Start Capture" <button> startCapture()
  2. "Stop Capture" 2 stopCapture()
  3. <video>
  4. <pre> console

CSS

CSS (width: 98%) max-width 860px

css
#video {
  border: 1px solid #999;
  width: 98%;
  max-width: 860px;
}

#log {
  width: 25rem;
  height: 15rem;
  border: 1px solid black;
  padding: 0.5rem;
  overflow: scroll;
}

API "Start Capture"

display-capture Permissions-Policy API <iframe> <iframe> allow

HTTP <iframe> API

http
Permissions-Policy: display-capture=(self)

<iframe>

html
<iframe src="https://mycode.example.net/etc" allow="display-capture"> </iframe>


Web Proxy Viewer  |  New URL  |  Original Page