946 lines
39 KiB
C++
946 lines
39 KiB
C++
/*
|
|
* Copyright 2025 The WebRTC project authors. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license
|
|
* that can be found in the LICENSE file in the root of the source
|
|
* tree. An additional intellectual property rights grant can be found
|
|
* in the file PATENTS. All contributing project authors may
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
*/
|
|
|
|
// Integration tests that verify that certain properties remain the same
|
|
// over time.
|
|
// It is expected that these tests will have to be changed frequently.
|
|
// The error messages when the tests fail are intended to contain C++ code
|
|
// that can be pasted into the test when updating it.
|
|
|
|
#include <stdint.h>
|
|
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#include "absl/strings/str_cat.h"
|
|
#include "api/audio_codecs/builtin_audio_decoder_factory.h"
|
|
#include "api/audio_codecs/builtin_audio_encoder_factory.h"
|
|
#include "api/jsep.h"
|
|
#include "api/peer_connection_interface.h"
|
|
#include "api/test/rtc_error_matchers.h"
|
|
#include "api/video_codecs/builtin_video_decoder_factory.h"
|
|
#include "api/video_codecs/builtin_video_encoder_factory.h"
|
|
#include "pc/session_description.h"
|
|
#include "pc/test/integration_test_helpers.h"
|
|
#include "rtc_base/strings/string_builder.h"
|
|
#include "test/gmock.h"
|
|
#include "test/gtest.h"
|
|
#include "test/wait_until.h"
|
|
|
|
namespace webrtc {
|
|
|
|
namespace {
|
|
|
|
using ::testing::ElementsAreArray;
|
|
using ::testing::Eq;
|
|
using ::testing::Not;
|
|
|
|
class FactorySignature {
|
|
public:
|
|
// Constant naming: kWebRtc* is for configurations that occur
|
|
// on bots in the WebRTC repository. Other configurations are added
|
|
// based on downstream products that need listing.
|
|
enum class Id {
|
|
kNotRecognized,
|
|
kWebRtcTipOfTree,
|
|
kWebRtcMoreConfigs1,
|
|
kWebRtcAndroid,
|
|
kGoogleInternal,
|
|
};
|
|
Id id() { return id_; }
|
|
FactorySignature() {
|
|
ExtractSignatureStrings();
|
|
id_ = RecognizeSignature();
|
|
}
|
|
|
|
private:
|
|
// Extract a set of strings characterizing the factory in use.
|
|
void ExtractSignatureStrings() {
|
|
rtc::scoped_refptr<AudioDecoderFactory> audio_decoders =
|
|
CreateBuiltinAudioDecoderFactory();
|
|
for (const auto& codec : audio_decoders->GetSupportedDecoders()) {
|
|
rtc::StringBuilder sb;
|
|
sb << "Decode audio/";
|
|
sb << codec.format.name << "/" << codec.format.clockrate_hz << "/"
|
|
<< codec.format.num_channels;
|
|
for (const auto& param : codec.format.parameters) {
|
|
sb << ";" << param.first << ":" << param.second;
|
|
}
|
|
signature_.push_back(sb.Release());
|
|
}
|
|
rtc::scoped_refptr<AudioEncoderFactory> audio_encoders =
|
|
CreateBuiltinAudioEncoderFactory();
|
|
for (const auto& codec : audio_encoders->GetSupportedEncoders()) {
|
|
rtc::StringBuilder sb;
|
|
sb << "Encode audio/";
|
|
sb << codec.format.name << "/" << codec.format.clockrate_hz << "/"
|
|
<< codec.format.num_channels;
|
|
for (const auto& param : codec.format.parameters) {
|
|
sb << ";" << param.first << ":" << param.second;
|
|
}
|
|
signature_.push_back(sb.Release());
|
|
}
|
|
std::unique_ptr<VideoDecoderFactory> video_decoders =
|
|
CreateBuiltinVideoDecoderFactory();
|
|
for (const SdpVideoFormat& format : video_decoders->GetSupportedFormats()) {
|
|
rtc::StringBuilder sb;
|
|
sb << "Decode video/";
|
|
sb << format.name;
|
|
for (const auto& kv : format.parameters) {
|
|
sb << ";" << kv.first << ":" << kv.second;
|
|
}
|
|
signature_.push_back(sb.Release());
|
|
}
|
|
std::unique_ptr<VideoEncoderFactory> video_encoders =
|
|
CreateBuiltinVideoEncoderFactory();
|
|
for (const auto& format : video_encoders->GetSupportedFormats()) {
|
|
rtc::StringBuilder sb;
|
|
sb << "Encode video/";
|
|
// We don't use format.ToString because that includes scalability modes,
|
|
// which aren't supposed to influence SDP.
|
|
sb << format.name;
|
|
for (const auto& kv : format.parameters) {
|
|
sb << ";" << kv.first << ":" << kv.second;
|
|
}
|
|
signature_.push_back(sb.Release());
|
|
}
|
|
}
|
|
Id RecognizeSignature() {
|
|
std::vector<std::string> webrtc_tip_of_tree = {
|
|
"Decode audio/opus/48000/2;minptime:10;useinbandfec:1",
|
|
"Decode audio/G722/8000/1",
|
|
"Decode audio/PCMU/8000/1",
|
|
"Decode audio/PCMA/8000/1",
|
|
"Encode audio/opus/48000/2;minptime:10;useinbandfec:1",
|
|
"Encode audio/G722/8000/1",
|
|
"Encode audio/PCMU/8000/1",
|
|
"Encode audio/PCMA/8000/1",
|
|
"Decode video/VP8",
|
|
"Decode video/VP9;profile-id:0",
|
|
"Decode video/VP9;profile-id:2",
|
|
"Decode video/VP9;profile-id:1",
|
|
"Decode video/VP9;profile-id:3",
|
|
"Decode "
|
|
"video/"
|
|
"H264;level-asymmetry-allowed:1;packetization-mode:1;profile-level-id:"
|
|
"42001f",
|
|
"Decode "
|
|
"video/"
|
|
"H264;level-asymmetry-allowed:1;packetization-mode:0;profile-level-id:"
|
|
"42001f",
|
|
"Decode "
|
|
"video/"
|
|
"H264;level-asymmetry-allowed:1;packetization-mode:1;profile-level-id:"
|
|
"42e01f",
|
|
"Decode "
|
|
"video/"
|
|
"H264;level-asymmetry-allowed:1;packetization-mode:0;profile-level-id:"
|
|
"42e01f",
|
|
"Decode "
|
|
"video/"
|
|
"H264;level-asymmetry-allowed:1;packetization-mode:1;profile-level-id:"
|
|
"4d001f",
|
|
"Decode "
|
|
"video/"
|
|
"H264;level-asymmetry-allowed:1;packetization-mode:0;profile-level-id:"
|
|
"4d001f",
|
|
"Decode "
|
|
"video/"
|
|
"H264;level-asymmetry-allowed:1;packetization-mode:1;profile-level-id:"
|
|
"f4001f",
|
|
"Decode "
|
|
"video/"
|
|
"H264;level-asymmetry-allowed:1;packetization-mode:0;profile-level-id:"
|
|
"f4001f",
|
|
"Decode video/AV1;level-idx:5;profile:0;tier:0",
|
|
"Decode video/AV1;level-idx:5;profile:1;tier:0",
|
|
"Encode video/VP8",
|
|
"Encode "
|
|
"video/"
|
|
"H264;level-asymmetry-allowed:1;packetization-mode:1;profile-level-id:"
|
|
"42001f",
|
|
"Encode "
|
|
"video/"
|
|
"H264;level-asymmetry-allowed:1;packetization-mode:0;profile-level-id:"
|
|
"42001f",
|
|
"Encode "
|
|
"video/"
|
|
"H264;level-asymmetry-allowed:1;packetization-mode:1;profile-level-id:"
|
|
"42e01f",
|
|
"Encode "
|
|
"video/"
|
|
"H264;level-asymmetry-allowed:1;packetization-mode:0;profile-level-id:"
|
|
"42e01f",
|
|
"Encode "
|
|
"video/"
|
|
"H264;level-asymmetry-allowed:1;packetization-mode:1;profile-level-id:"
|
|
"4d001f",
|
|
"Encode "
|
|
"video/"
|
|
"H264;level-asymmetry-allowed:1;packetization-mode:0;profile-level-id:"
|
|
"4d001f",
|
|
"Encode video/AV1;level-idx:5;profile:0;tier:0",
|
|
"Encode video/VP9;profile-id:0",
|
|
"Encode video/VP9;profile-id:2",
|
|
};
|
|
if (signature_ == webrtc_tip_of_tree) {
|
|
return Id::kWebRtcTipOfTree;
|
|
}
|
|
std::vector<std::string> linux_more_configs_1 = {
|
|
"Decode audio/opus/48000/2;minptime:10;useinbandfec:1",
|
|
"Decode audio/G722/8000/1",
|
|
"Decode audio/PCMU/8000/1",
|
|
"Decode audio/PCMA/8000/1",
|
|
"Encode audio/opus/48000/2;minptime:10;useinbandfec:1",
|
|
"Encode audio/G722/8000/1",
|
|
"Encode audio/PCMU/8000/1",
|
|
"Encode audio/PCMA/8000/1",
|
|
"Decode video/VP8",
|
|
"Decode video/VP9;profile-id:0",
|
|
"Decode video/VP9;profile-id:2",
|
|
"Decode video/VP9;profile-id:1",
|
|
"Decode video/VP9;profile-id:3",
|
|
"Decode video/AV1;level-idx:5;profile:0;tier:0",
|
|
"Decode video/AV1;level-idx:5;profile:1;tier:0",
|
|
"Encode video/VP8",
|
|
"Encode video/AV1;level-idx:5;profile:0;tier:0",
|
|
"Encode video/VP9;profile-id:0",
|
|
"Encode video/VP9;profile-id:2",
|
|
};
|
|
if (signature_ == linux_more_configs_1) {
|
|
return Id::kWebRtcMoreConfigs1;
|
|
}
|
|
std::vector<std::string> android = {
|
|
"Decode audio/opus/48000/2;minptime:10;useinbandfec:1",
|
|
"Decode audio/G722/8000/1",
|
|
"Decode audio/PCMU/8000/1",
|
|
"Decode audio/PCMA/8000/1",
|
|
"Encode audio/opus/48000/2;minptime:10;useinbandfec:1",
|
|
"Encode audio/G722/8000/1",
|
|
"Encode audio/PCMU/8000/1",
|
|
"Encode audio/PCMA/8000/1",
|
|
"Decode video/VP8",
|
|
"Decode video/VP9;profile-id:0",
|
|
"Decode video/VP9;profile-id:1",
|
|
"Decode video/VP9;profile-id:3",
|
|
"Decode video/AV1;level-idx:5;profile:0;tier:0",
|
|
"Decode video/AV1;level-idx:5;profile:1;tier:0",
|
|
"Encode video/VP8",
|
|
"Encode video/AV1;level-idx:5;profile:0;tier:0",
|
|
"Encode video/VP9;profile-id:0",
|
|
};
|
|
if (signature_ == android) {
|
|
return Id::kWebRtcAndroid;
|
|
}
|
|
std::vector<std::string> google_internal = {
|
|
"Decode audio/opus/48000/2;minptime:10;useinbandfec:1",
|
|
"Decode audio/G722/8000/1",
|
|
"Decode audio/PCMU/8000/1",
|
|
"Decode audio/PCMA/8000/1",
|
|
"Encode audio/opus/48000/2;minptime:10;useinbandfec:1",
|
|
"Encode audio/G722/8000/1",
|
|
"Encode audio/PCMU/8000/1",
|
|
"Encode audio/PCMA/8000/1",
|
|
"Decode video/VP8",
|
|
"Decode video/VP9;profile-id:0",
|
|
"Decode video/VP9;profile-id:1",
|
|
"Decode video/VP9;profile-id:3",
|
|
"Decode "
|
|
"video/"
|
|
"H264;level-asymmetry-allowed:1;packetization-mode:1;profile-level-id:"
|
|
"42001f",
|
|
"Decode "
|
|
"video/"
|
|
"H264;level-asymmetry-allowed:1;packetization-mode:0;profile-level-id:"
|
|
"42001f",
|
|
"Decode "
|
|
"video/"
|
|
"H264;level-asymmetry-allowed:1;packetization-mode:1;profile-level-id:"
|
|
"42e01f",
|
|
"Decode "
|
|
"video/"
|
|
"H264;level-asymmetry-allowed:1;packetization-mode:0;profile-level-id:"
|
|
"42e01f",
|
|
"Decode "
|
|
"video/"
|
|
"H264;level-asymmetry-allowed:1;packetization-mode:1;profile-level-id:"
|
|
"4d001f",
|
|
"Decode "
|
|
"video/"
|
|
"H264;level-asymmetry-allowed:1;packetization-mode:0;profile-level-id:"
|
|
"4d001f",
|
|
"Decode "
|
|
"video/"
|
|
"H264;level-asymmetry-allowed:1;packetization-mode:1;profile-level-id:"
|
|
"f4001f",
|
|
"Decode "
|
|
"video/"
|
|
"H264;level-asymmetry-allowed:1;packetization-mode:0;profile-level-id:"
|
|
"f4001f",
|
|
"Encode video/VP8",
|
|
"Encode "
|
|
"video/"
|
|
"H264;level-asymmetry-allowed:1;packetization-mode:1;profile-level-id:"
|
|
"42001f",
|
|
"Encode "
|
|
"video/"
|
|
"H264;level-asymmetry-allowed:1;packetization-mode:0;profile-level-id:"
|
|
"42001f",
|
|
"Encode "
|
|
"video/"
|
|
"H264;level-asymmetry-allowed:1;packetization-mode:1;profile-level-id:"
|
|
"42e01f",
|
|
"Encode "
|
|
"video/"
|
|
"H264;level-asymmetry-allowed:1;packetization-mode:0;profile-level-id:"
|
|
"42e01f",
|
|
"Encode "
|
|
"video/"
|
|
"H264;level-asymmetry-allowed:1;packetization-mode:1;profile-level-id:"
|
|
"4d001f",
|
|
"Encode "
|
|
"video/"
|
|
"H264;level-asymmetry-allowed:1;packetization-mode:0;profile-level-id:"
|
|
"4d001f",
|
|
"Encode video/VP9;profile-id:0",
|
|
};
|
|
if (signature_ == google_internal) {
|
|
return Id::kGoogleInternal;
|
|
}
|
|
// If unrecognized, produce a debug printout.
|
|
rtc::StringBuilder sb;
|
|
sb << "{\n";
|
|
for (std::string str : signature_) {
|
|
sb << "\"" << str << "\",\n";
|
|
}
|
|
sb << "}\n";
|
|
RTC_LOG(LS_ERROR) << "New factory signature: " << sb.str();
|
|
return Id::kNotRecognized;
|
|
}
|
|
|
|
std::vector<std::string> signature_;
|
|
Id id_;
|
|
};
|
|
|
|
class ResultingCodecList {
|
|
public:
|
|
FactorySignature::Id factory_id;
|
|
std::vector<std::string> caller_local;
|
|
std::vector<std::string> caller_remote;
|
|
std::vector<std::string> callee_local;
|
|
std::vector<std::string> callee_remote;
|
|
};
|
|
|
|
class PeerConnectionIntegrationTest : public PeerConnectionIntegrationBaseTest {
|
|
protected:
|
|
PeerConnectionIntegrationTest()
|
|
: PeerConnectionIntegrationBaseTest(SdpSemantics::kUnifiedPlan) {}
|
|
|
|
std::vector<std::string> CodecList(
|
|
const SessionDescriptionInterface& desc_interface) {
|
|
std::vector<std::string> results;
|
|
int media_section_counter = 0;
|
|
const cricket::SessionDescription* desc = desc_interface.description();
|
|
for (auto& content : desc->contents()) {
|
|
++media_section_counter;
|
|
const auto* media_description = content.media_description();
|
|
const auto& codecs = media_description->codecs();
|
|
for (const auto& codec : codecs) {
|
|
rtc::StringBuilder str;
|
|
str << media_section_counter << " " << absl::StrCat(codec);
|
|
results.push_back(str.Release());
|
|
}
|
|
}
|
|
return results;
|
|
}
|
|
|
|
// This function returns a string with a C++ initializer for a
|
|
// ResultingCodecList object. The intended use is to paste the string from the
|
|
// log into the source code when updating the test.
|
|
std::string DumpAsResultingCodecList(FactorySignature::Id id,
|
|
std::vector<std::string> caller_local,
|
|
std::vector<std::string> caller_remote,
|
|
std::vector<std::string> callee_local,
|
|
std::vector<std::string> callee_remote) {
|
|
rtc::StringBuilder sb;
|
|
// TODO: issues.webrtc.org/397895867 - change kChangeThis to the name of
|
|
// the value. Requires adding an AbslStringifier to the enum.
|
|
sb << "\n{" << ".factory_id = FactorySignature::Id::kChangeThis"
|
|
<< static_cast<int>(id) << ",\n"
|
|
<< ".caller_local = {";
|
|
for (const std::string& str : caller_local) {
|
|
sb << "\"" << str << "\",\n";
|
|
}
|
|
sb << "},\n .caller_remote = {";
|
|
for (const std::string& str : caller_remote) {
|
|
sb << "\"" << str << "\",\n";
|
|
}
|
|
sb << "},\n .callee_local = {";
|
|
for (const std::string& str : callee_local) {
|
|
sb << "\"" << str << "\",\n";
|
|
}
|
|
sb << "},\n .callee_remote = {";
|
|
for (const std::string& str : callee_remote) {
|
|
sb << "\"" << str << "\",\n";
|
|
}
|
|
sb << "}}\n";
|
|
return sb.Release();
|
|
}
|
|
};
|
|
|
|
TEST_F(PeerConnectionIntegrationTest, BasicOfferAnswerPayloadTypesStable) {
|
|
FactorySignature factory_signature;
|
|
ASSERT_THAT(factory_signature.id(),
|
|
Not(Eq(FactorySignature::Id::kNotRecognized)));
|
|
ASSERT_TRUE(CreatePeerConnectionWrappers());
|
|
ConnectFakeSignalingForSdpOnly();
|
|
caller()->AddAudioVideoTracks();
|
|
callee()->AddAudioVideoTracks();
|
|
// Start offer/answer exchange and wait for it to complete.
|
|
caller()->CreateAndSetAndSignalOffer();
|
|
|
|
ASSERT_THAT(
|
|
WaitUntil([&] { return SignalingStateStable(); }, ::testing::IsTrue()),
|
|
IsRtcOk());
|
|
|
|
// Extract PT and codec from all media sections, and check that they
|
|
// are stable (what was expected).
|
|
// Maintenance: In order to get a new golden set of strings, make the list
|
|
// empty and run. Gmock will output a valid C++ array initializer for you.
|
|
|
|
std::vector<ResultingCodecList> golden_answers = {
|
|
{.factory_id = FactorySignature::Id::kWebRtcTipOfTree,
|
|
.caller_local =
|
|
{"1 [111:audio/opus/48000/2;minptime=10;useinbandfec=1]",
|
|
"1 [63:audio/red/48000/2;=111/111]",
|
|
"1 [9:audio/G722/8000/1]",
|
|
"1 [0:audio/PCMU/8000/1]",
|
|
"1 [8:audio/PCMA/8000/1]",
|
|
"1 [13:audio/CN/8000/1]",
|
|
"1 [110:audio/telephone-event/48000/1]",
|
|
"1 [126:audio/telephone-event/8000/1]",
|
|
"2 [96:video/VP8/90000/0]",
|
|
"2 [97:video/rtx/90000/0;apt=96]",
|
|
"2 "
|
|
"[103:video/H264/90000/"
|
|
"0;level-asymmetry-allowed=1;packetization-mode=1;profile-level-id="
|
|
"42001f]",
|
|
"2 [104:video/rtx/90000/0;apt=103]",
|
|
"2 "
|
|
"[107:video/H264/90000/"
|
|
"0;level-asymmetry-allowed=1;packetization-mode=0;profile-level-id="
|
|
"42001f]",
|
|
"2 [108:video/rtx/90000/0;apt=107]",
|
|
"2 "
|
|
"[109:video/H264/90000/"
|
|
"0;level-asymmetry-allowed=1;packetization-mode=1;profile-level-id="
|
|
"42e01f]",
|
|
"2 [114:video/rtx/90000/0;apt=109]",
|
|
"2 "
|
|
"[115:video/H264/90000/"
|
|
"0;level-asymmetry-allowed=1;packetization-mode=0;profile-level-id="
|
|
"42e01f]",
|
|
"2 [116:video/rtx/90000/0;apt=115]",
|
|
"2 "
|
|
"[117:video/H264/90000/"
|
|
"0;level-asymmetry-allowed=1;packetization-mode=1;profile-level-id="
|
|
"4d001f]",
|
|
"2 [118:video/rtx/90000/0;apt=117]",
|
|
"2 "
|
|
"[39:video/H264/90000/"
|
|
"0;level-asymmetry-allowed=1;packetization-mode=0;profile-level-id="
|
|
"4d001f]",
|
|
"2 [40:video/rtx/90000/0;apt=39]",
|
|
"2 [45:video/AV1/90000/0;level-idx=5;profile=0;tier=0]",
|
|
"2 [46:video/rtx/90000/0;apt=45]",
|
|
"2 [98:video/VP9/90000/0;profile-id=0]",
|
|
"2 [99:video/rtx/90000/0;apt=98]",
|
|
"2 [100:video/VP9/90000/0;profile-id=2]",
|
|
"2 [101:video/rtx/90000/0;apt=100]",
|
|
"2 [119:video/red/90000/0]",
|
|
"2 [120:video/rtx/90000/0;apt=119]",
|
|
"2 [121:video/ulpfec/90000/0]"},
|
|
.caller_remote =
|
|
{"1 [111:audio/opus/48000/2;minptime=10;useinbandfec=1]",
|
|
"1 [63:audio/red/48000/2;=111/111]",
|
|
"1 [9:audio/G722/8000/1]",
|
|
"1 [0:audio/PCMU/8000/1]",
|
|
"1 [8:audio/PCMA/8000/1]",
|
|
"1 [13:audio/CN/8000/1]",
|
|
"1 [110:audio/telephone-event/48000/1]",
|
|
"1 [126:audio/telephone-event/8000/1]",
|
|
"2 [96:video/VP8/90000/0]",
|
|
"2 [97:video/rtx/90000/0;apt=96]",
|
|
"2 "
|
|
"[103:video/H264/90000/"
|
|
"0;level-asymmetry-allowed=1;packetization-mode=1;profile-level-id="
|
|
"42001f]",
|
|
"2 [104:video/rtx/90000/0;apt=103]",
|
|
"2 "
|
|
"[107:video/H264/90000/"
|
|
"0;level-asymmetry-allowed=1;packetization-mode=0;profile-level-id="
|
|
"42001f]",
|
|
"2 [108:video/rtx/90000/0;apt=107]",
|
|
"2 "
|
|
"[109:video/H264/90000/"
|
|
"0;level-asymmetry-allowed=1;packetization-mode=1;profile-level-id="
|
|
"42e01f]",
|
|
"2 [114:video/rtx/90000/0;apt=109]",
|
|
"2 "
|
|
"[115:video/H264/90000/"
|
|
"0;level-asymmetry-allowed=1;packetization-mode=0;profile-level-id="
|
|
"42e01f]",
|
|
"2 [116:video/rtx/90000/0;apt=115]",
|
|
"2 "
|
|
"[117:video/H264/90000/"
|
|
"0;level-asymmetry-allowed=1;packetization-mode=1;profile-level-id="
|
|
"4d001f]",
|
|
"2 [118:video/rtx/90000/0;apt=117]",
|
|
"2 "
|
|
"[39:video/H264/90000/"
|
|
"0;level-asymmetry-allowed=1;packetization-mode=0;profile-level-id="
|
|
"4d001f]",
|
|
"2 [40:video/rtx/90000/0;apt=39]",
|
|
"2 [45:video/AV1/90000/0;level-idx=5;profile=0;tier=0]",
|
|
"2 [46:video/rtx/90000/0;apt=45]",
|
|
"2 [98:video/VP9/90000/0;profile-id=0]",
|
|
"2 [99:video/rtx/90000/0;apt=98]",
|
|
"2 [100:video/VP9/90000/0;profile-id=2]",
|
|
"2 [101:video/rtx/90000/0;apt=100]",
|
|
"2 [119:video/red/90000/0]",
|
|
"2 [120:video/rtx/90000/0;apt=119]",
|
|
"2 [121:video/ulpfec/90000/0]"},
|
|
.callee_local =
|
|
{"1 [111:audio/opus/48000/2;minptime=10;useinbandfec=1]",
|
|
"1 [63:audio/red/48000/2;=111/111]",
|
|
"1 [9:audio/G722/8000/1]",
|
|
"1 [0:audio/PCMU/8000/1]",
|
|
"1 [8:audio/PCMA/8000/1]",
|
|
"1 [13:audio/CN/8000/1]",
|
|
"1 [110:audio/telephone-event/48000/1]",
|
|
"1 [126:audio/telephone-event/8000/1]",
|
|
"2 [96:video/VP8/90000/0]",
|
|
"2 [97:video/rtx/90000/0;apt=96]",
|
|
"2 "
|
|
"[103:video/H264/90000/"
|
|
"0;level-asymmetry-allowed=1;packetization-mode=1;profile-level-id="
|
|
"42001f]",
|
|
"2 [104:video/rtx/90000/0;apt=103]",
|
|
"2 "
|
|
"[107:video/H264/90000/"
|
|
"0;level-asymmetry-allowed=1;packetization-mode=0;profile-level-id="
|
|
"42001f]",
|
|
"2 [108:video/rtx/90000/0;apt=107]",
|
|
"2 "
|
|
"[109:video/H264/90000/"
|
|
"0;level-asymmetry-allowed=1;packetization-mode=1;profile-level-id="
|
|
"42e01f]",
|
|
"2 [114:video/rtx/90000/0;apt=109]",
|
|
"2 "
|
|
"[115:video/H264/90000/"
|
|
"0;level-asymmetry-allowed=1;packetization-mode=0;profile-level-id="
|
|
"42e01f]",
|
|
"2 [116:video/rtx/90000/0;apt=115]",
|
|
"2 "
|
|
"[117:video/H264/90000/"
|
|
"0;level-asymmetry-allowed=1;packetization-mode=1;profile-level-id="
|
|
"4d001f]",
|
|
"2 [118:video/rtx/90000/0;apt=117]",
|
|
"2 "
|
|
"[39:video/H264/90000/"
|
|
"0;level-asymmetry-allowed=1;packetization-mode=0;profile-level-id="
|
|
"4d001f]",
|
|
"2 [40:video/rtx/90000/0;apt=39]",
|
|
"2 [45:video/AV1/90000/0;level-idx=5;profile=0;tier=0]",
|
|
"2 [46:video/rtx/90000/0;apt=45]",
|
|
"2 [98:video/VP9/90000/0;profile-id=0]",
|
|
"2 [99:video/rtx/90000/0;apt=98]",
|
|
"2 [100:video/VP9/90000/0;profile-id=2]",
|
|
"2 [101:video/rtx/90000/0;apt=100]",
|
|
"2 [119:video/red/90000/0]",
|
|
"2 [120:video/rtx/90000/0;apt=119]",
|
|
"2 [121:video/ulpfec/90000/0]"},
|
|
.callee_remote =
|
|
{"1 [111:audio/opus/48000/2;minptime=10;useinbandfec=1]",
|
|
"1 [63:audio/red/48000/2;=111/111]",
|
|
"1 [9:audio/G722/8000/1]",
|
|
"1 [0:audio/PCMU/8000/1]",
|
|
"1 [8:audio/PCMA/8000/1]",
|
|
"1 [13:audio/CN/8000/1]",
|
|
"1 [110:audio/telephone-event/48000/1]",
|
|
"1 [126:audio/telephone-event/8000/1]",
|
|
"2 [96:video/VP8/90000/0]",
|
|
"2 [97:video/rtx/90000/0;apt=96]",
|
|
"2 "
|
|
"[103:video/H264/90000/"
|
|
"0;level-asymmetry-allowed=1;packetization-mode=1;profile-level-id="
|
|
"42001f]",
|
|
"2 [104:video/rtx/90000/0;apt=103]",
|
|
"2 "
|
|
"[107:video/H264/90000/"
|
|
"0;level-asymmetry-allowed=1;packetization-mode=0;profile-level-id="
|
|
"42001f]",
|
|
"2 [108:video/rtx/90000/0;apt=107]",
|
|
"2 "
|
|
"[109:video/H264/90000/"
|
|
"0;level-asymmetry-allowed=1;packetization-mode=1;profile-level-id="
|
|
"42e01f]",
|
|
"2 [114:video/rtx/90000/0;apt=109]",
|
|
"2 "
|
|
"[115:video/H264/90000/"
|
|
"0;level-asymmetry-allowed=1;packetization-mode=0;profile-level-id="
|
|
"42e01f]",
|
|
"2 [116:video/rtx/90000/0;apt=115]",
|
|
"2 "
|
|
"[117:video/H264/90000/"
|
|
"0;level-asymmetry-allowed=1;packetization-mode=1;profile-level-id="
|
|
"4d001f]",
|
|
"2 [118:video/rtx/90000/0;apt=117]",
|
|
"2 "
|
|
"[39:video/H264/90000/"
|
|
"0;level-asymmetry-allowed=1;packetization-mode=0;profile-level-id="
|
|
"4d001f]",
|
|
"2 [40:video/rtx/90000/0;apt=39]",
|
|
"2 [45:video/AV1/90000/0;level-idx=5;profile=0;tier=0]",
|
|
"2 [46:video/rtx/90000/0;apt=45]",
|
|
"2 [98:video/VP9/90000/0;profile-id=0]",
|
|
"2 [99:video/rtx/90000/0;apt=98]",
|
|
"2 [100:video/VP9/90000/0;profile-id=2]",
|
|
"2 [101:video/rtx/90000/0;apt=100]",
|
|
"2 [119:video/red/90000/0]",
|
|
"2 [120:video/rtx/90000/0;apt=119]",
|
|
"2 [121:video/ulpfec/90000/0]"}},
|
|
|
|
{.factory_id = FactorySignature::Id::kWebRtcMoreConfigs1,
|
|
.caller_local =
|
|
{"1 [111:audio/opus/48000/2;minptime=10;useinbandfec=1]",
|
|
"1 [63:audio/red/48000/2;=111/111]", "1 [9:audio/G722/8000/1]",
|
|
"1 [0:audio/PCMU/8000/1]", "1 [8:audio/PCMA/8000/1]",
|
|
"1 [13:audio/CN/8000/1]", "1 [110:audio/telephone-event/48000/1]",
|
|
"1 [126:audio/telephone-event/8000/1]", "2 [96:video/VP8/90000/0]",
|
|
"2 [97:video/rtx/90000/0;apt=96]",
|
|
"2 [39:video/AV1/90000/0;level-idx=5;profile=0;tier=0]",
|
|
"2 [40:video/rtx/90000/0;apt=39]",
|
|
"2 [98:video/VP9/90000/0;profile-id=0]",
|
|
"2 [99:video/rtx/90000/0;apt=98]",
|
|
"2 [100:video/VP9/90000/0;profile-id=2]",
|
|
"2 [101:video/rtx/90000/0;apt=100]", "2 [103:video/red/90000/0]",
|
|
"2 [104:video/rtx/90000/0;apt=103]",
|
|
"2 [107:video/ulpfec/90000/0]"},
|
|
.caller_remote =
|
|
{"1 [111:audio/opus/48000/2;minptime=10;useinbandfec=1]",
|
|
"1 [63:audio/red/48000/2;=111/111]", "1 [9:audio/G722/8000/1]",
|
|
"1 [0:audio/PCMU/8000/1]", "1 [8:audio/PCMA/8000/1]",
|
|
"1 [13:audio/CN/8000/1]", "1 [110:audio/telephone-event/48000/1]",
|
|
"1 [126:audio/telephone-event/8000/1]", "2 [96:video/VP8/90000/0]",
|
|
"2 [97:video/rtx/90000/0;apt=96]",
|
|
"2 [39:video/AV1/90000/0;level-idx=5;profile=0;tier=0]",
|
|
"2 [40:video/rtx/90000/0;apt=39]",
|
|
"2 [98:video/VP9/90000/0;profile-id=0]",
|
|
"2 [99:video/rtx/90000/0;apt=98]",
|
|
"2 [100:video/VP9/90000/0;profile-id=2]",
|
|
"2 [101:video/rtx/90000/0;apt=100]", "2 [103:video/red/90000/0]",
|
|
"2 [104:video/rtx/90000/0;apt=103]",
|
|
"2 [107:video/ulpfec/90000/0]"},
|
|
.callee_local =
|
|
{"1 [111:audio/opus/48000/2;minptime=10;useinbandfec=1]",
|
|
"1 [63:audio/red/48000/2;=111/111]", "1 [9:audio/G722/8000/1]",
|
|
"1 [0:audio/PCMU/8000/1]", "1 [8:audio/PCMA/8000/1]",
|
|
"1 [13:audio/CN/8000/1]", "1 [110:audio/telephone-event/48000/1]",
|
|
"1 [126:audio/telephone-event/8000/1]", "2 [96:video/VP8/90000/0]",
|
|
"2 [97:video/rtx/90000/0;apt=96]",
|
|
"2 [39:video/AV1/90000/0;level-idx=5;profile=0;tier=0]",
|
|
"2 [40:video/rtx/90000/0;apt=39]",
|
|
"2 [98:video/VP9/90000/0;profile-id=0]",
|
|
"2 [99:video/rtx/90000/0;apt=98]",
|
|
"2 [100:video/VP9/90000/0;profile-id=2]",
|
|
"2 [101:video/rtx/90000/0;apt=100]", "2 [103:video/red/90000/0]",
|
|
"2 [104:video/rtx/90000/0;apt=103]",
|
|
"2 [107:video/ulpfec/90000/0]"},
|
|
.callee_remote =
|
|
{"1 [111:audio/opus/48000/2;minptime=10;useinbandfec=1]",
|
|
"1 [63:audio/red/48000/2;=111/111]", "1 [9:audio/G722/8000/1]",
|
|
"1 [0:audio/PCMU/8000/1]", "1 [8:audio/PCMA/8000/1]",
|
|
"1 [13:audio/CN/8000/1]", "1 [110:audio/telephone-event/48000/1]",
|
|
"1 [126:audio/telephone-event/8000/1]", "2 [96:video/VP8/90000/0]",
|
|
"2 [97:video/rtx/90000/0;apt=96]",
|
|
"2 [39:video/AV1/90000/0;level-idx=5;profile=0;tier=0]",
|
|
"2 [40:video/rtx/90000/0;apt=39]",
|
|
"2 [98:video/VP9/90000/0;profile-id=0]",
|
|
"2 [99:video/rtx/90000/0;apt=98]",
|
|
"2 [100:video/VP9/90000/0;profile-id=2]",
|
|
"2 [101:video/rtx/90000/0;apt=100]", "2 [103:video/red/90000/0]",
|
|
"2 [104:video/rtx/90000/0;apt=103]",
|
|
"2 [107:video/ulpfec/90000/0]"}},
|
|
{.factory_id = FactorySignature::Id::kWebRtcAndroid,
|
|
.caller_local =
|
|
{"1 [111:audio/opus/48000/2;minptime=10;useinbandfec=1]",
|
|
"1 [63:audio/red/48000/2;=111/111]", "1 [9:audio/G722/8000/1]",
|
|
"1 [0:audio/PCMU/8000/1]", "1 [8:audio/PCMA/8000/1]",
|
|
"1 [13:audio/CN/8000/1]", "1 [110:audio/telephone-event/48000/1]",
|
|
"1 [126:audio/telephone-event/8000/1]", "2 [96:video/VP8/90000/0]",
|
|
"2 [97:video/rtx/90000/0;apt=96]",
|
|
"2 [39:video/AV1/90000/0;level-idx=5;profile=0;tier=0]",
|
|
"2 [40:video/rtx/90000/0;apt=39]",
|
|
"2 [98:video/VP9/90000/0;profile-id=0]",
|
|
"2 [99:video/rtx/90000/0;apt=98]", "2 [100:video/red/90000/0]",
|
|
"2 [101:video/rtx/90000/0;apt=100]",
|
|
"2 [103:video/ulpfec/90000/0]"},
|
|
.caller_remote =
|
|
{"1 [111:audio/opus/48000/2;minptime=10;useinbandfec=1]",
|
|
"1 [63:audio/red/48000/2;=111/111]", "1 [9:audio/G722/8000/1]",
|
|
"1 [0:audio/PCMU/8000/1]", "1 [8:audio/PCMA/8000/1]",
|
|
"1 [13:audio/CN/8000/1]", "1 [110:audio/telephone-event/48000/1]",
|
|
"1 [126:audio/telephone-event/8000/1]", "2 [96:video/VP8/90000/0]",
|
|
"2 [97:video/rtx/90000/0;apt=96]",
|
|
"2 [39:video/AV1/90000/0;level-idx=5;profile=0;tier=0]",
|
|
"2 [40:video/rtx/90000/0;apt=39]",
|
|
"2 [98:video/VP9/90000/0;profile-id=0]",
|
|
"2 [99:video/rtx/90000/0;apt=98]", "2 [100:video/red/90000/0]",
|
|
"2 [101:video/rtx/90000/0;apt=100]",
|
|
"2 [103:video/ulpfec/90000/0]"},
|
|
.callee_local =
|
|
{"1 [111:audio/opus/48000/2;minptime=10;useinbandfec=1]",
|
|
"1 [63:audio/red/48000/2;=111/111]", "1 [9:audio/G722/8000/1]",
|
|
"1 [0:audio/PCMU/8000/1]", "1 [8:audio/PCMA/8000/1]",
|
|
"1 [13:audio/CN/8000/1]", "1 [110:audio/telephone-event/48000/1]",
|
|
"1 [126:audio/telephone-event/8000/1]", "2 [96:video/VP8/90000/0]",
|
|
"2 [97:video/rtx/90000/0;apt=96]",
|
|
"2 [39:video/AV1/90000/0;level-idx=5;profile=0;tier=0]",
|
|
"2 [40:video/rtx/90000/0;apt=39]",
|
|
"2 [98:video/VP9/90000/0;profile-id=0]",
|
|
"2 [99:video/rtx/90000/0;apt=98]", "2 [100:video/red/90000/0]",
|
|
"2 [101:video/rtx/90000/0;apt=100]",
|
|
"2 [103:video/ulpfec/90000/0]"},
|
|
.callee_remote =
|
|
{"1 [111:audio/opus/48000/2;minptime=10;useinbandfec=1]",
|
|
"1 [63:audio/red/48000/2;=111/111]", "1 [9:audio/G722/8000/1]",
|
|
"1 [0:audio/PCMU/8000/1]", "1 [8:audio/PCMA/8000/1]",
|
|
"1 [13:audio/CN/8000/1]", "1 [110:audio/telephone-event/48000/1]",
|
|
"1 [126:audio/telephone-event/8000/1]", "2 [96:video/VP8/90000/0]",
|
|
"2 [97:video/rtx/90000/0;apt=96]",
|
|
"2 [39:video/AV1/90000/0;level-idx=5;profile=0;tier=0]",
|
|
"2 [40:video/rtx/90000/0;apt=39]",
|
|
"2 [98:video/VP9/90000/0;profile-id=0]",
|
|
"2 [99:video/rtx/90000/0;apt=98]", "2 [100:video/red/90000/0]",
|
|
"2 [101:video/rtx/90000/0;apt=100]",
|
|
"2 [103:video/ulpfec/90000/0]"}},
|
|
{.factory_id = FactorySignature::Id::kGoogleInternal,
|
|
.caller_local =
|
|
{"1 [111:audio/opus/48000/2;minptime=10;useinbandfec=1]",
|
|
"1 [63:audio/red/48000/2;=111/111]",
|
|
"1 [9:audio/G722/8000/1]",
|
|
"1 [0:audio/PCMU/8000/1]",
|
|
"1 [8:audio/PCMA/8000/1]",
|
|
"1 [13:audio/CN/8000/1]",
|
|
"1 [110:audio/telephone-event/48000/1]",
|
|
"1 [126:audio/telephone-event/8000/1]",
|
|
"2 [96:video/VP8/90000/0]",
|
|
"2 [97:video/rtx/90000/0;apt=96]",
|
|
"2 "
|
|
"[100:video/H264/90000/"
|
|
"0;level-asymmetry-allowed=1;packetization-mode=1;profile-level-"
|
|
"id=42001f]",
|
|
"2 [101:video/rtx/90000/0;apt=100]",
|
|
"2 "
|
|
"[103:video/H264/90000/"
|
|
"0;level-asymmetry-allowed=1;packetization-mode=0;profile-level-"
|
|
"id=42001f]",
|
|
"2 [104:video/rtx/90000/0;apt=103]",
|
|
"2 "
|
|
"[107:video/H264/90000/"
|
|
"0;level-asymmetry-allowed=1;packetization-mode=1;profile-level-"
|
|
"id=42e01f]",
|
|
"2 [108:video/rtx/90000/0;apt=107]",
|
|
"2 "
|
|
"[109:video/H264/90000/"
|
|
"0;level-asymmetry-allowed=1;packetization-mode=0;profile-level-"
|
|
"id=42e01f]",
|
|
"2 [114:video/rtx/90000/0;apt=109]",
|
|
"2 "
|
|
"[115:video/H264/90000/"
|
|
"0;level-asymmetry-allowed=1;packetization-mode=1;profile-level-"
|
|
"id=4d001f]",
|
|
"2 [116:video/rtx/90000/0;apt=115]",
|
|
"2 "
|
|
"[39:video/H264/90000/"
|
|
"0;level-asymmetry-allowed=1;packetization-mode=0;profile-level-"
|
|
"id=4d001f]",
|
|
"2 [40:video/rtx/90000/0;apt=39]",
|
|
"2 [98:video/VP9/90000/0;profile-id=0]",
|
|
"2 [99:video/rtx/90000/0;apt=98]",
|
|
"2 [117:video/red/90000/0]",
|
|
"2 [118:video/rtx/90000/0;apt=117]",
|
|
"2 [119:video/ulpfec/90000/0]"},
|
|
.caller_remote =
|
|
{"1 [111:audio/opus/48000/2;minptime=10;useinbandfec=1]",
|
|
"1 [63:audio/red/48000/2;=111/111]",
|
|
"1 [9:audio/G722/8000/1]",
|
|
"1 [0:audio/PCMU/8000/1]",
|
|
"1 [8:audio/PCMA/8000/1]",
|
|
"1 [13:audio/CN/8000/1]",
|
|
"1 [110:audio/telephone-event/48000/1]",
|
|
"1 [126:audio/telephone-event/8000/1]",
|
|
"2 [96:video/VP8/90000/0]",
|
|
"2 [97:video/rtx/90000/0;apt=96]",
|
|
"2 "
|
|
"[100:video/H264/90000/"
|
|
"0;level-asymmetry-allowed=1;packetization-mode=1;profile-level-"
|
|
"id=42001f]",
|
|
"2 [101:video/rtx/90000/0;apt=100]",
|
|
"2 "
|
|
"[103:video/H264/90000/"
|
|
"0;level-asymmetry-allowed=1;packetization-mode=0;profile-level-"
|
|
"id=42001f]",
|
|
"2 [104:video/rtx/90000/0;apt=103]",
|
|
"2 "
|
|
"[107:video/H264/90000/"
|
|
"0;level-asymmetry-allowed=1;packetization-mode=1;profile-level-"
|
|
"id=42e01f]",
|
|
"2 [108:video/rtx/90000/0;apt=107]",
|
|
"2 "
|
|
"[109:video/H264/90000/"
|
|
"0;level-asymmetry-allowed=1;packetization-mode=0;profile-level-"
|
|
"id=42e01f]",
|
|
"2 [114:video/rtx/90000/0;apt=109]",
|
|
"2 "
|
|
"[115:video/H264/90000/"
|
|
"0;level-asymmetry-allowed=1;packetization-mode=1;profile-level-"
|
|
"id=4d001f]",
|
|
"2 [116:video/rtx/90000/0;apt=115]",
|
|
"2 "
|
|
"[39:video/H264/90000/"
|
|
"0;level-asymmetry-allowed=1;packetization-mode=0;profile-level-"
|
|
"id=4d001f]",
|
|
"2 [40:video/rtx/90000/0;apt=39]",
|
|
"2 [98:video/VP9/90000/0;profile-id=0]",
|
|
"2 [99:video/rtx/90000/0;apt=98]",
|
|
"2 [117:video/red/90000/0]",
|
|
"2 [118:video/rtx/90000/0;apt=117]",
|
|
"2 [119:video/ulpfec/90000/0]"},
|
|
.callee_local =
|
|
{"1 [111:audio/opus/48000/2;minptime=10;useinbandfec=1]",
|
|
"1 [63:audio/red/48000/2;=111/111]",
|
|
"1 [9:audio/G722/8000/1]",
|
|
"1 [0:audio/PCMU/8000/1]",
|
|
"1 [8:audio/PCMA/8000/1]",
|
|
"1 [13:audio/CN/8000/1]",
|
|
"1 [110:audio/telephone-event/48000/1]",
|
|
"1 [126:audio/telephone-event/8000/1]",
|
|
"2 [96:video/VP8/90000/0]",
|
|
"2 [97:video/rtx/90000/0;apt=96]",
|
|
"2 "
|
|
"[100:video/H264/90000/"
|
|
"0;level-asymmetry-allowed=1;packetization-mode=1;profile-level-"
|
|
"id=42001f]",
|
|
"2 [101:video/rtx/90000/0;apt=100]",
|
|
"2 "
|
|
"[103:video/H264/90000/"
|
|
"0;level-asymmetry-allowed=1;packetization-mode=0;profile-level-"
|
|
"id=42001f]",
|
|
"2 [104:video/rtx/90000/0;apt=103]",
|
|
"2 "
|
|
"[107:video/H264/90000/"
|
|
"0;level-asymmetry-allowed=1;packetization-mode=1;profile-level-"
|
|
"id=42e01f]",
|
|
"2 [108:video/rtx/90000/0;apt=107]",
|
|
"2 "
|
|
"[109:video/H264/90000/"
|
|
"0;level-asymmetry-allowed=1;packetization-mode=0;profile-level-"
|
|
"id=42e01f]",
|
|
"2 [114:video/rtx/90000/0;apt=109]",
|
|
"2 "
|
|
"[115:video/H264/90000/"
|
|
"0;level-asymmetry-allowed=1;packetization-mode=1;profile-level-"
|
|
"id=4d001f]",
|
|
"2 [116:video/rtx/90000/0;apt=115]",
|
|
"2 "
|
|
"[39:video/H264/90000/"
|
|
"0;level-asymmetry-allowed=1;packetization-mode=0;profile-level-"
|
|
"id=4d001f]",
|
|
"2 [40:video/rtx/90000/0;apt=39]",
|
|
"2 [98:video/VP9/90000/0;profile-id=0]",
|
|
"2 [99:video/rtx/90000/0;apt=98]",
|
|
"2 [117:video/red/90000/0]",
|
|
"2 [118:video/rtx/90000/0;apt=117]",
|
|
"2 [119:video/ulpfec/90000/0]"},
|
|
.callee_remote = {
|
|
"1 [111:audio/opus/48000/2;minptime=10;useinbandfec=1]",
|
|
"1 [63:audio/red/48000/2;=111/111]",
|
|
"1 [9:audio/G722/8000/1]",
|
|
"1 [0:audio/PCMU/8000/1]",
|
|
"1 [8:audio/PCMA/8000/1]",
|
|
"1 [13:audio/CN/8000/1]",
|
|
"1 [110:audio/telephone-event/48000/1]",
|
|
"1 [126:audio/telephone-event/8000/1]",
|
|
"2 [96:video/VP8/90000/0]",
|
|
"2 [97:video/rtx/90000/0;apt=96]",
|
|
"2 "
|
|
"[100:video/H264/90000/"
|
|
"0;level-asymmetry-allowed=1;packetization-mode=1;profile-level-id="
|
|
"42001f]",
|
|
"2 [101:video/rtx/90000/0;apt=100]",
|
|
"2 "
|
|
"[103:video/H264/90000/"
|
|
"0;level-asymmetry-allowed=1;packetization-mode=0;profile-level-id="
|
|
"42001f]",
|
|
"2 [104:video/rtx/90000/0;apt=103]",
|
|
"2 "
|
|
"[107:video/H264/90000/"
|
|
"0;level-asymmetry-allowed=1;packetization-mode=1;profile-level-id="
|
|
"42e01f]",
|
|
"2 [108:video/rtx/90000/0;apt=107]",
|
|
"2 "
|
|
"[109:video/H264/90000/"
|
|
"0;level-asymmetry-allowed=1;packetization-mode=0;profile-level-id="
|
|
"42e01f]",
|
|
"2 [114:video/rtx/90000/0;apt=109]",
|
|
"2 "
|
|
"[115:video/H264/90000/"
|
|
"0;level-asymmetry-allowed=1;packetization-mode=1;profile-level-id="
|
|
"4d001f]",
|
|
"2 [116:video/rtx/90000/0;apt=115]",
|
|
"2 "
|
|
"[39:video/H264/90000/"
|
|
"0;level-asymmetry-allowed=1;packetization-mode=0;profile-level-id="
|
|
"4d001f]",
|
|
"2 [40:video/rtx/90000/0;apt=39]",
|
|
"2 [98:video/VP9/90000/0;profile-id=0]",
|
|
"2 [99:video/rtx/90000/0;apt=98]",
|
|
"2 [117:video/red/90000/0]",
|
|
"2 [118:video/rtx/90000/0;apt=117]",
|
|
"2 [119:video/ulpfec/90000/0]"}}};
|
|
auto this_golden_it =
|
|
std::find_if(golden_answers.begin(), golden_answers.end(),
|
|
[&](const ResultingCodecList& candidate) {
|
|
return candidate.factory_id == factory_signature.id();
|
|
});
|
|
ASSERT_THAT(this_golden_it, Not(Eq(golden_answers.end())))
|
|
<< "Add this result set to golden_answers:\n"
|
|
<< DumpAsResultingCodecList(
|
|
factory_signature.id(),
|
|
CodecList(*caller()->pc()->local_description()),
|
|
CodecList(*caller()->pc()->remote_description()),
|
|
CodecList(*callee()->pc()->local_description()),
|
|
CodecList(*callee()->pc()->remote_description()));
|
|
|
|
const ResultingCodecList& this_golden = *this_golden_it;
|
|
EXPECT_THAT(CodecList(*caller()->pc()->local_description()),
|
|
ElementsAreArray(this_golden.caller_local));
|
|
EXPECT_THAT(CodecList(*caller()->pc()->remote_description()),
|
|
ElementsAreArray(this_golden.caller_remote));
|
|
EXPECT_THAT(CodecList(*callee()->pc()->local_description()),
|
|
ElementsAreArray(this_golden.callee_local));
|
|
EXPECT_THAT(CodecList(*callee()->pc()->remote_description()),
|
|
ElementsAreArray(this_golden.callee_remote));
|
|
}
|
|
|
|
} // namespace
|
|
} // namespace webrtc
|