зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1363667 - P7 - RTP Source mochitests r=mjf
MozReview-Commit-ID: D4kBN2hVYpo --HG-- extra : rebase_source : 02a668baf6c6880c2029c23fac7c433978c68d6c
This commit is contained in:
Родитель
a3f1b24f7a
Коммит
98751926ce
|
@ -102,6 +102,10 @@ skip-if = (android_version == '18') # android(Bug 1189784, timeouts on 4.3 emula
|
|||
skip-if = (android_version == '18') # android(Bug 1189784, timeouts on 4.3 emulator)
|
||||
[test_peerConnection_basicAudio.html]
|
||||
skip-if = (android_version == '18') # android(Bug 1189784, timeouts on 4.3 emulator)
|
||||
[test_peerConnection_audioSynchronizationSources.html]
|
||||
skip-if = (android_version == '18') # android(Bug 1189784, timeouts on 4.3 emulator)
|
||||
[test_peerConnection_audioContributingSources.html]
|
||||
skip-if = (android_version == '18') # android(Bug 1189784, timeouts on 4.3 emulator)
|
||||
[test_peerConnection_checkPacketDumpHook.html]
|
||||
skip-if = (android_version == '18') # android(Bug 1189784, timeouts on 4.3 emulator)
|
||||
[test_peerConnection_basicAudioNATSrflx.html]
|
||||
|
|
|
@ -0,0 +1,107 @@
|
|||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<script type="application/javascript" src="pc.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<pre id="test">
|
||||
<script type="application/javascript">
|
||||
createHTML({
|
||||
bug: "1363667",
|
||||
title: "Test audio receiver getContributingSources"
|
||||
});
|
||||
|
||||
var SpWrap = (pc) => SpecialPowers.wrap(pc._pc);
|
||||
|
||||
var SpRtpSourceNowTimestamp = (pc) => {
|
||||
return SpecialPowers.wrap(pc._pc).mozGetNowInRtpSourceReferenceTime();
|
||||
}
|
||||
var SpInsertLevelForContributingSource = (pc, ...args) => {
|
||||
return SpecialPowers.wrap(pc._pc).mozInsertLevelForContributingSource(
|
||||
...args);
|
||||
}
|
||||
// test_peerConnection_audioSynchronizationSources.html tests
|
||||
// much of the functionality of getContributingSources as the implementation
|
||||
// is shared.
|
||||
var testGetContributingSources = async (test) => {
|
||||
let remoteReceiver = test.pcRemote.getReceivers()[0];
|
||||
let localReceiver = test.pcLocal.getReceivers()[0];
|
||||
|
||||
// Check that getContributingSources is empty as there is no MCU
|
||||
is(remoteReceiver.getContributingSources().length, 0,
|
||||
"remote contributing sources is empty");
|
||||
is(localReceiver.getContributingSources().length, 0,
|
||||
"local contributing sources is empty");
|
||||
// Wait for the next JS event loop iteration, to clear the cache
|
||||
await Promise.resolve().then();
|
||||
// Insert new entries as if there were an MCU
|
||||
let csrc0 = 124756;
|
||||
let timestamp0 = SpWrap(test.pcRemote).mozGetNowInRtpSourceReferenceTime();
|
||||
let timestampOffset = new Date().getTime() - timestamp0;
|
||||
let hasAudioLevel0 = true;
|
||||
let audioLevel0 = 34;
|
||||
|
||||
SpWrap(test.pcRemote).mozInsertAudioLevelForContributingSource(
|
||||
remoteReceiver,
|
||||
csrc0,
|
||||
timestamp0,
|
||||
hasAudioLevel0,
|
||||
audioLevel0);
|
||||
|
||||
let csrc1 = 5786;
|
||||
let timestamp1 = timestamp0 - 200;
|
||||
let hasAudioLevel1 = false;
|
||||
let audioLevel1 = 0;
|
||||
|
||||
SpWrap(test.pcRemote).mozInsertAudioLevelForContributingSource(
|
||||
remoteReceiver,
|
||||
csrc1,
|
||||
timestamp1,
|
||||
hasAudioLevel1,
|
||||
audioLevel1);
|
||||
|
||||
let contributingSources = remoteReceiver.getContributingSources();
|
||||
is(contributingSources.length, 2,
|
||||
"Expected number of contributing sources");
|
||||
|
||||
// Check that both inserted were returned
|
||||
let source0 = contributingSources.find(c => c.source == csrc0);
|
||||
ok(source0, "first csrc was found");
|
||||
|
||||
let source1 = contributingSources.find(c => c.source == csrc1);
|
||||
ok(source1, "second csrsc was found");
|
||||
|
||||
// Add a small margin of error in the timestamps
|
||||
let compareTimestamps = (ts1, ts2) => Math.abs(ts1 - ts2) < 100;
|
||||
|
||||
// Check the CSRC with audioLevel
|
||||
is(source0.audioLevel, audioLevel0,
|
||||
`Contributing source has correct audio level. (${source0.audioLevel})`);
|
||||
ok(compareTimestamps(source0.timestamp, timestamp0 + timestampOffset),
|
||||
`Contributing source has correct timestamp (${source0.timestamp})`);
|
||||
|
||||
// Check the CSRC without audioLevel
|
||||
is(source1.audioLevel, undefined,
|
||||
`Contributing source has no audio level. (${source1.audioLevel})`);
|
||||
ok(compareTimestamps(source1.timestamp, timestamp1 + timestampOffset),
|
||||
`Contributing source has correct timestamp (${source1.timestamp})`);
|
||||
|
||||
// Check caching
|
||||
is(JSON.stringify(contributingSources),
|
||||
JSON.stringify(remoteReceiver.getContributingSources()),
|
||||
"getContributingSources is cached");
|
||||
}
|
||||
|
||||
var test;
|
||||
runNetworkTest(function(options) {
|
||||
test = new PeerConnectionTest(options);
|
||||
test.chain.insertAfter("PC_REMOTE_WAIT_FOR_MEDIA_FLOW",
|
||||
[testGetContributingSources]);
|
||||
test.setMediaConstraints([{audio: true}], [{audio: true}]);
|
||||
test.pcLocal.audioElementsOnly = true;
|
||||
test.run();
|
||||
});
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,61 @@
|
|||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<script type="application/javascript" src="pc.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<pre id="test">
|
||||
<script type="application/javascript">
|
||||
createHTML({
|
||||
bug: "1363667",
|
||||
title: "Test audio receiver getSynchronizationSources"
|
||||
});
|
||||
|
||||
var testGetSynchronizationSources = (test) => {
|
||||
let receivers = [...test.pcRemote.getReceivers(),
|
||||
...test.pcLocal.getReceivers()];
|
||||
is(receivers.length, 2, "Expected number of receivers");
|
||||
for (let recv of receivers) {
|
||||
let syncSources = recv.getSynchronizationSources();
|
||||
ok(syncSources,
|
||||
"Receiver has Synchronization sources " + JSON.stringify(syncSources));
|
||||
is(syncSources.length, 1, "Each receiver has only a single sync source");
|
||||
let source = recv.getSynchronizationSources()[0];
|
||||
ok(source.audioLevel,
|
||||
`Synchronization source has audio level. (${source.audioLevel})`);
|
||||
ok(source.audioLevel < 128,
|
||||
`Synchronization source audio level < 128. (${source.audioLevel})`);
|
||||
ok(Number.isInteger(source.audioLevel),
|
||||
`Synchronization source audio level is int. (${source.audioLevel})`);
|
||||
ok(source.timestamp,
|
||||
`Synchronization source has timestamp (${source.timestamp})`);
|
||||
ok(Number.isInteger(source.timestamp),
|
||||
`Synchronization source timestamp is int (${source.timestamp})`);
|
||||
}
|
||||
}
|
||||
|
||||
var testSynchronizationSourceCached = (test) => {
|
||||
let receivers = [...test.pcRemote.getReceivers(),
|
||||
...test.pcLocal.getReceivers()];
|
||||
is(receivers.length, 2, "Expected number of receivers");
|
||||
for (let recv of receivers) {
|
||||
is(JSON.stringify(recv.getSynchronizationSources()),
|
||||
JSON.stringify(recv.getSynchronizationSources()),
|
||||
"Subsequent getSynchronizationSources calls are cached.");
|
||||
}
|
||||
}
|
||||
|
||||
var test;
|
||||
runNetworkTest(function(options) {
|
||||
test = new PeerConnectionTest(options);
|
||||
test.chain.insertAfter("PC_REMOTE_WAIT_FOR_MEDIA_FLOW",
|
||||
[testGetSynchronizationSources,
|
||||
testSynchronizationSourceCached]);
|
||||
test.setMediaConstraints([{audio: true}], [{audio: true}]);
|
||||
test.pcLocal.audioElementsOnly = true;
|
||||
test.run();
|
||||
});
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
|
@ -466,7 +466,7 @@ public:
|
|||
GetParameters(dom::MediaStreamTrack& aTrack,
|
||||
std::vector<JsepTrack::JsConstraints>* aOutConstraints);
|
||||
|
||||
// test-onlg: called from contributing sources mochitests.
|
||||
// test-only: called from contributing sources mochitests.
|
||||
NS_IMETHODIMP_TO_ERRORRESULT(InsertAudioLevelForContributingSource,
|
||||
ErrorResult &rv,
|
||||
dom::MediaStreamTrack& aRecvTrack,
|
||||
|
|
Загрузка…
Ссылка в новой задаче