mirror of
https://github.com/servo/servo.git
synced 2025-06-25 09:34:32 +01:00
80 lines
2.6 KiB
HTML
80 lines
2.6 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<title>RTCPeerConnection Insertable Streams - Video Frames</title>
|
|
<script src="/resources/testharness.js"></script>
|
|
<script src="/resources/testharnessreport.js"></script>
|
|
<script src=/resources/testdriver.js></script>
|
|
<script src=/resources/testdriver-vendor.js></script>
|
|
<script src='../mediacapture-streams/permission-helper.js'></script>
|
|
<script src="../webrtc/RTCPeerConnection-helper.js"></script>
|
|
<script src="./RTCPeerConnection-insertable-streams.js"></script>
|
|
</head>
|
|
<body>
|
|
<script>
|
|
promise_test(async t => {
|
|
const caller = new RTCPeerConnection({encodedInsertableStreams:true});
|
|
t.add_cleanup(() => caller.close());
|
|
const callee = new RTCPeerConnection({encodedInsertableStreams:true});
|
|
t.add_cleanup(() => callee.close());
|
|
|
|
await setMediaPermission("granted", ["camera"]);
|
|
const stream = await navigator.mediaDevices.getUserMedia({video:true});
|
|
const track = stream.getTracks()[0];
|
|
t.add_cleanup(() => track.stop());
|
|
|
|
const sender = caller.addTrack(track)
|
|
const senderStreams = sender.createEncodedStreams();
|
|
const senderReader = senderStreams.readable.getReader();
|
|
const senderWriter = senderStreams.writable.getWriter();
|
|
const numFramesToSend = 20;
|
|
|
|
const ontrackPromise = new Promise((resolve, reject) => {
|
|
callee.ontrack = async e => {
|
|
const receiverStreams = e.receiver.createEncodedStreams();
|
|
const receiverReader = receiverStreams.readable.getReader();
|
|
|
|
let numReceivedKeyFrames = 0;
|
|
let numReceivedDeltaFrames = 0;
|
|
for (let i = 0; i < numFramesToSend; i++) {
|
|
const result = await receiverReader.read();
|
|
if (result.value.type == 'key')
|
|
numReceivedKeyFrames++;
|
|
else if (result.value.type == 'delta')
|
|
numReceivedDeltaFrames++;
|
|
|
|
if (numReceivedKeyFrames > 0 && numReceivedDeltaFrames > 0)
|
|
resolve();
|
|
else if (numReceivedKeyFrames + numReceivedDeltaFrames >= numFramesToSend)
|
|
reject();
|
|
}
|
|
}
|
|
});
|
|
|
|
exchangeIceCandidates(caller, callee);
|
|
await exchangeOfferAnswer(caller, callee);
|
|
|
|
let numSentKeyFrames = 0;
|
|
let numSentDeltaFrames = 0;
|
|
// Pass frames as they come from the encoder.
|
|
for (let i = 0; i < numFramesToSend; i++) {
|
|
const result = await senderReader.read();
|
|
verifyNonstandardAdditionalDataIfPresent(result.value);
|
|
if (result.value.type == 'key') {
|
|
numSentKeyFrames++;
|
|
} else {
|
|
numSentDeltaFrames++;
|
|
}
|
|
|
|
senderWriter.write(result.value);
|
|
}
|
|
|
|
assert_greater_than(numSentKeyFrames, 0);
|
|
assert_greater_than(numSentDeltaFrames, 0);
|
|
|
|
return ontrackPromise;
|
|
}, 'Key and Delta frames are sent and received');
|
|
|
|
</script>
|
|
</body>
|
|
</html>
|