Namespace: SpawnDev.SpawnJS.JSObjects
Inherits: MediaStreamConstraints
Source: JSObjects/DisplayMediaStreamOptions.cs
MDN Reference: DisplayMediaStreamOptions on MDN
The DisplayMediaStreamOptions dictionary is used to instruct the user agent what sort of MediaStreamTracks may be included in the MediaStream returned by getDisplayMedia. https://www.w3.org/TR/screen-capture/#displaymediastreamoptions https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getDisplayMedia#options
| Property | Type | Access | Description |
|---|---|---|---|
Controller |
CaptureController? |
get | |
MonitorTypeSurfaces |
EnumString<MonitorTypeSurfacesEnum>? |
get | |
SelfBrowserSurface |
EnumString<SelfCapturePreferenceEnum>? |
get | |
SurfaceSwitching |
EnumString<SurfaceSwitchingPreferenceEnum>? |
get | |
SystemAudio |
EnumString<SystemAudioPreferenceEnum>? |
get | |
PreferCurrentTab |
bool? |
get |
SpawnDev.SpawnJS Mapping Note: The JavaScript examples below show the standard Web API usage. In SpawnDev.SpawnJS, the same API is available with C# conventions:
- Properties and methods use PascalCase (e.g.,
readyStatebecomesReadyState)- Events use ActionEvent with
+=/-=(e.g.,addEventListener("click", fn)becomesOnClick += handler)- Async methods return
Task<T>instead ofPromise<T>- Objects should be disposed with
usingstatements- Access via
JS.Get<DisplayMediaStreamOptions>(...)or constructornew DisplayMediaStreamOptions(...)
const displayMediaOptions = {
video: {
displaySurface: "browser",
},
audio: {
suppressLocalAudioPlayback: false,
},
preferCurrentTab: false,
selfBrowserSurface: "exclude",
systemAudio: "include",
surfaceSwitching: "include",
monitorTypeSurfaces: "include",
};
async function startCapture(displayMediaOptions) {
let captureStream;
try {
captureStream =
await navigator.mediaDevices.getDisplayMedia(displayMediaOptions);
} catch (err) {
console.error(`Error: ${err}`);
}
return captureStream;
}JavaScript (MDN):
const displayMediaOptions = {
video: {
displaySurface: "browser",
},
audio: {
suppressLocalAudioPlayback: false,
},
preferCurrentTab: false,
selfBrowserSurface: "exclude",
systemAudio: "include",
surfaceSwitching: "include",
monitorTypeSurfaces: "include",
};
async function startCapture(displayMediaOptions) {
let captureStream;
try {
captureStream =
await navigator.mediaDevices.getDisplayMedia(displayMediaOptions);
} catch (err) {
console.error(`Error: ${err}`);
}
return captureStream;
}C# (SpawnDev.SpawnJS):
// Requires: builder.Services.AddSpawnJSRuntime();
// Inject SpawnJSRuntime in your component or service:
// [Inject] SpawnJSRuntime JS { get; set; }
var displayMediaOptions = {
video: {
displaySurface: "browser",
},
audio: {
suppressLocalAudioPlayback: false,
},
preferCurrentTab: false,
selfBrowserSurface: "exclude",
systemAudio: "include",
surfaceSwitching: "include",
monitorTypeSurfaces: "include",
};
async Task startCapture(displayMediaOptions)
{
var captureStream;
try {
captureStream =
await JS.Get<Navigator>("navigator").MediaDevices.getDisplayMedia(displayMediaOptions);
} catch (err) {
Console.Error.WriteLine($"Error: {err}");
}
return captureStream;
}