mochitest stress screensharing
by jib1
HTML
<video id="video1" width="160" height="120" autoplay muted></video><br>
<div id="div"></div>
JavaScript
var console = { log: msg => div.innerHTML += msg + "<br>",
error: e => console.log(e) };
var getUserMedia = c => navigator.mediaDevices.getUserMedia(c);
var runTest = f => f().catch(e => console.log(e));
var info = msg => console.log(msg);
var ok = (ok, msg) => info((ok ? "OK " : "UNEXPECTED ") + msg);
var is = (a, b, msg) => info(((a == b)? "OK " : ("UNEXPECTED (got "+a+") ")) + msg);
var haveGumOn = () => navigator.mediaDevices.enumerateDevices()
.then(([device]) => device && !!device.label.length);
// Put mochitest below:
/**
* Run a test to verify that we can complete a start and stop media playback
* cycle for a screenshare LocalMediaStream on a video HTMLMediaElement.
*/
runTest(async () => {
const isWinXP = navigator.userAgent.indexOf("Windows NT 5.1") != -1;
var testVideo = video1
var constraints = { video: { mediaSource: "screen" }, fake: false };
var videoConstraints = [
{
mediaSource: 'screen',
width: {
min: '10',
max: '100'
},
height: {
min: '10',
max: '100'
},
frameRate: {
min: '10',
max: '15'
}
},
{
mediaSource: 'screen',
width: 200,
height: 200,
frameRate: {
min: '5',
max: '10'
}
}
];
for (let i=0; i<1000; i++) {
testVideo.srcObject = await getUserMedia(constraints);
await new Promise(r => testVideo.onloadedmetadata = r);
testVideo.srcObject.getTracks().forEach(t => t.stop());
testVideo.srcObject = await getUserMedia({video: videoConstraints[0], fake: false});
await new Promise(r => testVideo.onloadedmetadata = r);
let resized = new Promise(r => testVideo.onresize = r);
await testVideo.srcObject.getVideoTracks()[0].applyConstraints(videoConstraints[1]);
await resized;
testVideo.srcObject.getVideoTracks().forEach(t => t.stop());
}
});