-
Notifications
You must be signed in to change notification settings - Fork 3.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Splitting the insertable-stream test file into multiple test files
Bug: 1068681 Change-Id: I496affdb20eda7209a66aed25859b04234ec9bbf Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2401098 Reviewed-by: Guido Urdaneta <guidou@chromium.org> Commit-Queue: Palak Agarwal <agpalak@chromium.org> Cr-Commit-Position: refs/heads/master@{#807792}
- Loading branch information
1 parent
7efc877
commit 15a842e
Showing
6 changed files
with
474 additions
and
417 deletions.
There are no files selected for viewing
83 changes: 83 additions & 0 deletions
83
webrtc-insertable-streams/RTCPeerConnection-insertable-streams-errors.https.html
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,83 @@ | ||
<!DOCTYPE html> | ||
<html> | ||
<head> | ||
<title>RTCPeerConnection Insertable Streams - Errors</title> | ||
<script src="/resources/testharness.js"></script> | ||
<script src="/resources/testharnessreport.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(); | ||
t.add_cleanup(() => caller.close()); | ||
const callee = new RTCPeerConnection(); | ||
t.add_cleanup(() => callee.close()); | ||
const stream = await navigator.mediaDevices.getUserMedia({video:true}); | ||
const videoTrack = stream.getVideoTracks()[0]; | ||
t.add_cleanup(() => videoTrack.stop()); | ||
|
||
exchangeIceCandidates(caller, callee); | ||
await exchangeOfferAnswer(caller, callee); | ||
|
||
const videoSender = caller.addTrack(videoTrack); | ||
assert_throws_dom("InvalidStateError", () => videoSender.createEncodedStreams()); | ||
}, 'RTCRtpSender.createEncodedStream() throws if not requested in PC configuration'); | ||
|
||
promise_test(async t => { | ||
const caller = new RTCPeerConnection(); | ||
t.add_cleanup(() => caller.close()); | ||
const callee = new RTCPeerConnection(); | ||
t.add_cleanup(() => callee.close()); | ||
const stream = await navigator.mediaDevices.getUserMedia({video:true}); | ||
const videoTrack = stream.getVideoTracks()[0]; | ||
t.add_cleanup(() => videoTrack.stop()); | ||
|
||
const videoSender = caller.addTrack(videoTrack); | ||
const ontrackPromise = new Promise(resolve => { | ||
callee.ontrack = t.step_func(() => { | ||
const videoReceiver = callee.getReceivers().find(r => r.track.kind === 'video'); | ||
assert_true(videoReceiver !== undefined); | ||
assert_throws_dom("InvalidStateError", () => videoReceiver.createEncodedStreams()); | ||
resolve(); | ||
}); | ||
}); | ||
|
||
exchangeIceCandidates(caller, callee); | ||
await exchangeOfferAnswer(caller, callee); | ||
return ontrackPromise; | ||
}, 'RTCRtpReceiver.createEncodedStream() throws if not requested in PC configuration'); | ||
|
||
promise_test(async t => { | ||
const caller = new RTCPeerConnection({encodedInsertableStreams:true}); | ||
t.add_cleanup(() => caller.close()); | ||
const callee = new RTCPeerConnection(); | ||
t.add_cleanup(() => callee.close()); | ||
|
||
const stream = await navigator.mediaDevices.getUserMedia({video:true}); | ||
const track = stream.getTracks()[0]; | ||
t.add_cleanup(() => track.stop()); | ||
|
||
const sender = caller.addTrack(track) | ||
const streams = sender.createEncodedStreams(); | ||
const transformer = new TransformStream({ | ||
transform(frame, controller) { | ||
// Inserting the same frame twice will result in failure since the frame | ||
// will be neutered after the first insertion is processed. | ||
controller.enqueue(frame); | ||
controller.enqueue(frame); | ||
} | ||
}); | ||
|
||
exchangeIceCandidates(caller, callee); | ||
await exchangeOfferAnswer(caller, callee); | ||
|
||
await promise_rejects_dom( | ||
t, 'OperationError', | ||
streams.readable.pipeThrough(transformer).pipeTo(streams.writable)); | ||
}, 'Enqueuing the same frame twice fails'); | ||
|
||
</script> | ||
</body> | ||
</html> |
115 changes: 115 additions & 0 deletions
115
webrtc-insertable-streams/RTCPeerConnection-insertable-streams-legacy.https.html
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,115 @@ | ||
<!DOCTYPE html> | ||
<html> | ||
<head> | ||
<title>RTCPeerConnection Insertable Streams - Legacy API</title> | ||
<script src="/resources/testharness.js"></script> | ||
<script src="/resources/testharnessreport.js"></script> | ||
<script src="../webrtc/RTCPeerConnection-helper.js"></script> | ||
<script src="./RTCPeerConnection-insertable-streams.js"></script> | ||
</head> | ||
<body> | ||
<script> | ||
async function testNormalDataFlowWithInsertableStreamsForOtherKind(t, normalKind) { | ||
const flowAudio = (normalKind == 'audio'); | ||
const pcConfig = flowAudio | ||
? {forceEncodedVideoInsertableStreams:true} | ||
: {forceEncodedAudioInsertableStreams:true}; | ||
const caller = new RTCPeerConnection(pcConfig); | ||
t.add_cleanup(() => caller.close()); | ||
const callee = new RTCPeerConnection(pcConfig); | ||
t.add_cleanup(() => callee.close()); | ||
|
||
const stream = await navigator.mediaDevices.getUserMedia( | ||
{audio: flowAudio, video: !flowAudio}); | ||
const track = stream.getTracks()[0]; | ||
t.add_cleanup(() => track.stop()); | ||
|
||
const sender = caller.addTrack(track, stream); | ||
const ontrackPromise = new Promise((resolve,reject) => { | ||
callee.ontrack = t.step_func(async e => { | ||
let numGetStats = 0; | ||
const intervalId = window.setInterval(async ()=> { | ||
let statsReport = await callee.getStats(); | ||
statsReport.forEach(report => { | ||
if (report.type == 'inbound-rtp' && | ||
report.kind == normalKind && | ||
report.bytesReceived > 0) { | ||
clearInterval(intervalId); | ||
resolve(); | ||
return; | ||
} | ||
}); | ||
if (++numGetStats >= 60) { | ||
clearInterval(intervalId); | ||
reject('No bytes received.'); | ||
return; | ||
} | ||
}, 50); | ||
}); | ||
}); | ||
|
||
exchangeIceCandidates(caller, callee); | ||
await exchangeOfferAnswer(caller, callee); | ||
|
||
return ontrackPromise; | ||
} | ||
|
||
promise_test(t => { | ||
return testNormalDataFlowWithInsertableStreamsForOtherKind(t, 'audio'); | ||
}, 'Legacy: Audio flows when insertable streams is enabled for video and disabled for audio.'); | ||
|
||
promise_test(t => { | ||
return testNormalDataFlowWithInsertableStreamsForOtherKind(t, 'video'); | ||
}, 'Legacy: Video flows when insertable streams is enabled for audio and disabled for audio.'); | ||
|
||
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()); | ||
|
||
const stream = await navigator.mediaDevices.getUserMedia({video:true}); | ||
const videoTrack = stream.getVideoTracks()[0]; | ||
t.add_cleanup(() => videoTrack.stop()); | ||
|
||
const videoSender = caller.addTrack(videoTrack) | ||
const senderStreams = videoSender.createEncodedStreams(); | ||
const senderReader = senderStreams.readable.getReader(); | ||
const senderWriter = senderStreams.writable.getWriter(); | ||
|
||
let sentFrameInfo = null; | ||
const ontrackPromise = new Promise(resolve => { | ||
callee.ontrack = t.step_func(async e => { | ||
const videoReceiver = e.receiver; | ||
|
||
const receiverStreams = videoReceiver.createEncodedStreams(); | ||
const receiverReader = receiverStreams.readable.getReader(); | ||
receiverReader.read().then(t.step_func(receivedResult => { | ||
assert_true(areFrameInfosEqual(receivedResult.value, sentFrameInfo)); | ||
verifyNonstandardAdditionalDataIfPresent(receivedResult.value); | ||
resolve(); | ||
})); | ||
}); | ||
}); | ||
|
||
exchangeIceCandidates(caller, callee); | ||
await exchangeOfferAnswer(caller, callee); | ||
|
||
// Pass frames as they come from the encoder. | ||
const result = await senderReader.read(); | ||
verifyNonstandardAdditionalDataIfPresent(result.value); | ||
sentFrameInfo = { | ||
timestamp: result.value.timestamp, | ||
type: result.value.type, | ||
data: result.value.data, | ||
metadata: result.value.getMetadata(), | ||
getMetadata() { return this.metadata; } | ||
} | ||
senderWriter.write(result.value); | ||
|
||
return ontrackPromise; | ||
}, 'Legacy API works'); | ||
|
||
</script> | ||
</body> | ||
</html> |
76 changes: 76 additions & 0 deletions
76
webrtc-insertable-streams/RTCPeerConnection-insertable-streams-video-frames.https.html
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
<!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="../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()); | ||
|
||
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> |
Oops, something went wrong.