| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/ja/docs/Web/API/Screen_Capture_API/Using_Screen_Capture | [Back] [Original] |
Get to know MDN better
Want more browser support for this feature? Tell us why.
:
WebRTC adapter.js shim getDisplayMedia() API ChromeEdgeFirefox
MediaStream navigator.mediaDevices.getDisplayMedia() displayMediaOptions
const displayMediaOptions = {
video: {
displaySurface: "browser",
},
audio: {
suppressLocalAudioPlayback: false,
},
preferCurrentTab: false,
selfBrowserSurface: "exclude",
systemAudio: "include",
surfaceSwitching: "include",
monitorTypeSurfaces: "include",
};
async/await async function startCapture(displayMediaOptions) {
let captureStream = null;
try {
captureStream =
await navigator.mediaDevices.getDisplayMedia(displayMediaOptions);
} catch (err) {
console.error(`Error: ${err}`);
}
return captureStream;
}
Promise function startCapture(displayMediaOptions) {
return navigator.mediaDevices
.getDisplayMedia(displayMediaOptions)
.catch((err) => {
console.error(err);
return null;
});
}
startCapture() MediaStream
API API 1 1
2
API
options video audio MediaTrackConstraintsMediaTrackSupportedConstraintsMediaTrackSettings
: API 1
:
enumerateDevices() getDisplayMedia() devicechange
getDisplayMedia()
const displayMediaOptions = {
video: true,
audio: true,
};
audio video
const displayMediaOptions = {
video: {
displaySurface: "window",
},
audio: {
echoCancellation: true,
noiseSuppression: true,
sampleRate: 44100,
suppressLocalAudioPlayback: true,
},
surfaceSwitching: "include",
selfBrowserSurface: "exclude",
systemAudio: "exclude",
};
44.1kHz
Promise getDisplayMedia() getDisplayMedia() MediaStream
getUserMedia() getDisplayMedia()
<video>//
displayMediaOptions getDisplayMedia() displaySurface always
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.log = (msg) => (logElem.textContent = `${logElem.textContent}\n${msg}`);
console.error = (msg) =>
(logElem.textContent = `${logElem.textContent}\nError: ${msg}`);
startCapture() MediaStream startCapture() "Start Capture"
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
dumpOptionsInfo()
stopCapture() "Stop Capture" MediaStream.getTracks() stop() srcObject null
function stopCapture(evt) {
let tracks = videoElem.srcObject.getTracks();
tracks.forEach((track) => track.stop());
videoElem.srcObject = null;
}
startCapture() dumpOptions()
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
<p>
</p>
<p>
<button id="start"></button> <button id="stop">
</button>
</p>
<video id="video" autoplay></video>
<br />
<strong>Log:</strong>
<br />
<pre id="log"></pre>
HTML
CSS (width: 98%) max-width 860px
#video {
border: 1px solid #999;
width: 98%;
max-width: 860px;
}
#log {
width: 25rem;
height: 15rem;
border: 1px solid black;
padding: 0.5rem;
overflow: scroll;
}
display-capture Permissions-Policy API <iframe> <iframe> allow
HTTP <iframe> API
Permissions-Policy: display-capture=(self)
<iframe>
<iframe src="https://mycode.example.net/etc" allow="display-capture"> </iframe>
MediaTrackConstraints.displaySurfaceMediaTrackConstraints.logicalSurfaceMediaTrackConstraints.suppressLocalAudioPlaybackMediaTrackSettings.cursorMediaTrackSettings.displaySurfaceMediaTrackSettings.logicalSurfaceMediaTrackSettings.suppressLocalAudioPlaybackMediaTrackSupportedConstraints.displaySurfaceMediaTrackSupportedConstraints.logicalSurfaceMediaTrackSupportedConstraints.suppressLocalAudioPlayback| Web Proxy Viewer | New URL | Original Page |