mirror of
https://github.com/eliasstepanik/vdo.ninja.git
synced 2026-01-11 13:48:38 +00:00
327 lines
9.4 KiB
JavaScript
327 lines
9.4 KiB
JavaScript
/**
|
|
* SANDBOX EXAMPLE CONFIG
|
|
*
|
|
* options: (number | boolean | string | null)[]
|
|
* - OPTIONAL if using a user input; see "input" below
|
|
* - List of values to test (passed into "result" function)
|
|
* - An option button will be generated for each value in the list
|
|
*
|
|
* input: object
|
|
* - OPTIONAL
|
|
* - User input for testing (eg a range slider).
|
|
* - Output of element onchange will be passed into RESULT function.
|
|
*
|
|
* labels: string[]
|
|
* - OPTIONAL
|
|
* - List of labels for option buttons (should be same length as options list).
|
|
* - If no labels are provided, option buttons are labeled with their value
|
|
*
|
|
* result: (value: any) => object
|
|
* - Function that returns a postMessage object
|
|
* - Based on the value produced by an option button, or a user input
|
|
*/
|
|
|
|
const IFRAME_API = {
|
|
add: {
|
|
options: [true],
|
|
labels: ["Video with styles"],
|
|
result: value => ({
|
|
"target": "*",
|
|
"add": value,
|
|
"settings": { "style": "width:640px;height:360px;float:left;border:10px solid red;display:block;"}
|
|
})
|
|
},
|
|
automixer: {
|
|
options: [true, false],
|
|
result: value => ({ "automixer": value })
|
|
},
|
|
bitrate: {
|
|
options: [-1],
|
|
labels: ["default (-1)"],
|
|
input: {
|
|
title: "bitrate",
|
|
type: "range",
|
|
min: 0,
|
|
max: 6000,
|
|
value: 3000
|
|
},
|
|
result: value => ({ "bitrate": value, "target": "*" })
|
|
},
|
|
camera: {
|
|
options: [false, true, "toggle"],
|
|
result: value => ({ "camera": value })
|
|
},
|
|
changeAudioDevice: { // change text of add camera button
|
|
options: [1,2,3,4],
|
|
result: value => ({ "changeAudioDevice": value })
|
|
},
|
|
changeVideoDevice: { // change text of add camera button
|
|
options: [1,2,3,4],
|
|
result: value => ({ "changeVideoDevice": value })
|
|
},
|
|
close: {
|
|
options: [true],
|
|
result: value => ({ "close": value })
|
|
},
|
|
getDetailedState: {
|
|
options: [true],
|
|
result: value => ({ "getDetailedState": value }),
|
|
},
|
|
getDeviceList: {
|
|
options: [true],
|
|
result: value => ({ "getDeviceList": value }),
|
|
},
|
|
getLoudness: {
|
|
options: [false, true],
|
|
result: value => ({ "getLoudness": value }),
|
|
},
|
|
getStreamIDs: {
|
|
options: [true],
|
|
result: value => ({ "getStreamIDs": value }),
|
|
},
|
|
keyframe: {
|
|
options: [true],
|
|
result: value => ({ "keyframe": value }),
|
|
},
|
|
mute: {
|
|
options: [
|
|
true,
|
|
false,
|
|
"toggle" // open to a better suggestion here.
|
|
],
|
|
result: value => ({ "mute": value }),
|
|
},
|
|
mic: {
|
|
options: [true, false, "toggle"],
|
|
result: value => ({ "mic": value }),
|
|
},
|
|
panning: {
|
|
options: [0, 180, 90],
|
|
input: {
|
|
title: "panning",
|
|
type: "range",
|
|
min: 0,
|
|
max: 180,
|
|
value: 90
|
|
},
|
|
labels: ["Left (0)", "Right (180)", "Center (90)"],
|
|
result: value => ({ "panning": value }),
|
|
},
|
|
previewWebcam: {
|
|
options: ["previewWebcam"], // publishScreen
|
|
result: value => ({ "function": value }),
|
|
},
|
|
record: {
|
|
options: [true, false],
|
|
result: value => ({ "record": value }),
|
|
},
|
|
reload: {
|
|
options: [true],
|
|
result: value => ({ "reload": value }),
|
|
},
|
|
remove: { // target can be a stream ID or * for all.
|
|
options: [true],
|
|
labels: ["Target video"],
|
|
result: value => ({ "target": "*", "remove": value })
|
|
},
|
|
sendChat: {
|
|
input: {
|
|
type: "text",
|
|
value: "Hello"
|
|
},
|
|
result: value => ({ "sendChat": value }),
|
|
},
|
|
sceneState: {
|
|
options: [true, false],
|
|
labels: ["ENABLE TALLY LIGHT (true)", "STOP TALLY LIGHT (false)"],
|
|
result: value => ({ "sceneState": value })
|
|
},
|
|
style: {
|
|
options: ["#main { zoom: 0.5;} video {float: left; margin: 0; padding: 0; } #info {display:none;}"],
|
|
labels: ["Insert Style Sheet"],
|
|
result: value => ({ "style": value }),
|
|
},
|
|
volume: {
|
|
input: {
|
|
title: "volume",
|
|
type: "range",
|
|
min: 0,
|
|
max: 200,
|
|
value: 100
|
|
},
|
|
result: value => ({ "volume": value }),
|
|
},
|
|
["function: Eval"]: {
|
|
options: ["eval"], // publishScreen
|
|
result: value => ({ "function": value, "value": 'alert(\"DANGERUS\")' })
|
|
},
|
|
["function: Change html"]: {
|
|
options: ["changeHTML"], // change text of add camera button
|
|
result: value => ({ "function": value, "target": "add_camera", "value": "NEW CAMERA TEXT" })
|
|
}
|
|
}
|
|
|
|
const COMPANION_API = { // list available commands to console
|
|
bitrate: {
|
|
input: {
|
|
title: "bitrate",
|
|
type: "range",
|
|
min: 0,
|
|
max: 6000,
|
|
value: 3000
|
|
},
|
|
result: value => ({ target: null, action: "bitrate", value })
|
|
},
|
|
camera: {
|
|
options: [false, true, "toggle"],
|
|
result: value => ({ target: null, action: "camera", value })
|
|
},
|
|
forceKeyframe: {
|
|
options: [null],
|
|
labels: ["Rainbow puke fix"],
|
|
result: value => ({ target: null, action: "forceKeyframe", value }),
|
|
},
|
|
getDetails: {
|
|
options: [null],
|
|
result: value => ({ target: null, action: "getDetails", value })
|
|
},
|
|
group: {
|
|
options: [1,2,3,4,5,6,7,8],
|
|
result: value => ({ target: null, action: "group", value })
|
|
},
|
|
hangup: {
|
|
options: [null],
|
|
result: value => ({ target: null, action: "hangup", value })
|
|
},
|
|
mic: {
|
|
options: [false, true, "toggle"],
|
|
result: value => ({ target: null, action: "mic", value })
|
|
},
|
|
panning: {
|
|
options: [0, 180, 90],
|
|
input: {
|
|
title: "panning",
|
|
type: "range",
|
|
min: 0,
|
|
max: 180,
|
|
value: 90
|
|
},
|
|
labels: ["Left (0)", "Right (180)", "Center (90)"],
|
|
result: value => ({ target: null, action: "panning", value })
|
|
},
|
|
record: {
|
|
options: [false, true, "toggle"],
|
|
result: value => ({ target: null, action: "record", value })
|
|
},
|
|
reload: {
|
|
options: [null],
|
|
result: value => ({ target: null, action: "reload", value })
|
|
},
|
|
sendChat: {
|
|
input: {
|
|
type: "text",
|
|
value: "Hello"
|
|
},
|
|
result: value => ({ target: null, action: "sendChat", value }),
|
|
},
|
|
speaker: { // "speaker" also works in the same way
|
|
options: [false, true, "toggle"],
|
|
result: value => ({ target: null, action: "speaker", value }),
|
|
},
|
|
togglehand: {
|
|
options: [null],
|
|
result: value => ({ target: null, action: "togglehand", value }),
|
|
},
|
|
togglescreenshare: {
|
|
options: [null],
|
|
result: value => ({ target: null, action: "togglescreenshare", value }),
|
|
},
|
|
volume: {
|
|
input: {
|
|
title: "volume",
|
|
type: "range",
|
|
min: 0,
|
|
max: 200,
|
|
value: 100
|
|
},
|
|
result: value => ({ target: null, "action": "volume", value }),
|
|
},
|
|
}
|
|
|
|
function guestTargetedAPI(target) {
|
|
return {
|
|
addScene: {
|
|
options: [null,1,2,3,4,5,6,7,8],
|
|
input: {
|
|
type: "text",
|
|
value: "scene321"
|
|
},
|
|
result: value => ({ "action": "addScene", target, value })
|
|
},
|
|
display: {
|
|
options: [null],
|
|
result: value => ({ "action": "display", target, value })
|
|
},
|
|
forward: {
|
|
options: [null],
|
|
input: {
|
|
type: "text",
|
|
value: "room321"
|
|
},
|
|
result: value => ({ "action": "forward", target, value })
|
|
},
|
|
forceKeyframe: {
|
|
options: [null],
|
|
labels: ["Rainbow puke fix"],
|
|
result: value => ({ "action": "forceKeyframe", target, value })
|
|
},
|
|
hangup: {
|
|
options: [null],
|
|
result: value => ({ "action": "hangup", target, value })
|
|
},
|
|
group: {
|
|
options: [0,1,2,3,4,5,6,7,8],
|
|
input: {
|
|
type: "text",
|
|
value: "group321"
|
|
},
|
|
result: value => ({ "action": "group", target, value })
|
|
},
|
|
soloChat: {
|
|
options: [null],
|
|
result: value => ({ "action": "soloChat", target, value })
|
|
},
|
|
soloVideo: {
|
|
options: [null],
|
|
result: value => ({ "action": "soloVideo", target, value })
|
|
},
|
|
speaker: {
|
|
options: [null],
|
|
labels: ["Remote speaker"],
|
|
result: value =>({ "action": "speaker", target, value })
|
|
},
|
|
mic: {
|
|
options: [null],
|
|
result: value =>({ "action": "mic", target, value })
|
|
},
|
|
muteScene: {
|
|
options: [null,1,2,3,4,5,6,7,8],
|
|
input: {
|
|
type: "text",
|
|
value: "scene321"
|
|
},
|
|
result: value => ({ "action": "muteScene", target, value })
|
|
},
|
|
volume: {
|
|
input: {
|
|
title: "volume",
|
|
type: "range",
|
|
min: 0,
|
|
max: 200,
|
|
value: 100
|
|
},
|
|
result: value => ({ "action": "volume", target, value }),
|
|
},
|
|
}
|
|
}
|