Index: webrtc/ortc/testrtpparameters.cc |
diff --git a/webrtc/ortc/testrtpparameters.cc b/webrtc/ortc/testrtpparameters.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..5e7978044ff666434ff36f51d4d2521309b83dc4 |
--- /dev/null |
+++ b/webrtc/ortc/testrtpparameters.cc |
@@ -0,0 +1,283 @@ |
+/* |
+ * Copyright 2017 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. |
+ */ |
+ |
+#include "webrtc/ortc/testrtpparameters.h" |
+ |
+#include <algorithm> |
+#include <utility> |
+ |
+namespace webrtc { |
+ |
+RtpParameters MakeMinimalOpusParameters() { |
+ RtpParameters parameters; |
+ RtpCodecParameters opus_codec; |
+ opus_codec.name = "opus"; |
+ opus_codec.kind = cricket::MEDIA_TYPE_AUDIO; |
+ opus_codec.payload_type = 111; |
+ opus_codec.clock_rate.emplace(48000); |
+ opus_codec.num_channels.emplace(2); |
+ parameters.codecs.push_back(std::move(opus_codec)); |
+ RtpEncodingParameters encoding; |
+ encoding.codec_payload_type.emplace(111); |
+ parameters.encodings.push_back(std::move(encoding)); |
+ return parameters; |
+} |
+ |
+RtpParameters MakeMinimalIsacParameters() { |
+ RtpParameters parameters; |
+ RtpCodecParameters isac_codec; |
+ isac_codec.name = "ISAC"; |
+ isac_codec.kind = cricket::MEDIA_TYPE_AUDIO; |
+ isac_codec.payload_type = 103; |
+ isac_codec.clock_rate.emplace(16000); |
+ parameters.codecs.push_back(std::move(isac_codec)); |
+ RtpEncodingParameters encoding; |
+ encoding.codec_payload_type.emplace(111); |
+ parameters.encodings.push_back(std::move(encoding)); |
+ return parameters; |
+} |
+ |
+RtpParameters MakeMinimalOpusParametersWithSsrc(uint32_t ssrc) { |
+ RtpParameters parameters = MakeMinimalOpusParameters(); |
+ parameters.encodings[0].ssrc.emplace(ssrc); |
+ return parameters; |
+} |
+ |
+RtpParameters MakeMinimalIsacParametersWithSsrc(uint32_t ssrc) { |
+ RtpParameters parameters = MakeMinimalIsacParameters(); |
+ parameters.encodings[0].ssrc.emplace(ssrc); |
+ return parameters; |
+} |
+ |
+RtpParameters MakeMinimalVideoParameters(const char* codec_name) { |
+ RtpParameters parameters; |
+ RtpCodecParameters vp8_codec; |
+ vp8_codec.name = codec_name; |
+ vp8_codec.kind = cricket::MEDIA_TYPE_VIDEO; |
+ vp8_codec.payload_type = 96; |
+ parameters.codecs.push_back(std::move(vp8_codec)); |
+ RtpEncodingParameters encoding; |
+ encoding.codec_payload_type.emplace(96); |
+ parameters.encodings.push_back(std::move(encoding)); |
+ return parameters; |
+} |
+ |
+RtpParameters MakeMinimalVp8Parameters() { |
+ return MakeMinimalVideoParameters("VP8"); |
+} |
+ |
+RtpParameters MakeMinimalVp9Parameters() { |
+ return MakeMinimalVideoParameters("VP9"); |
+} |
+ |
+RtpParameters MakeMinimalVp8ParametersWithSsrc(uint32_t ssrc) { |
+ RtpParameters parameters = MakeMinimalVp8Parameters(); |
+ parameters.encodings[0].ssrc.emplace(ssrc); |
+ return parameters; |
+} |
+ |
+RtpParameters MakeMinimalVp9ParametersWithSsrc(uint32_t ssrc) { |
+ RtpParameters parameters = MakeMinimalVp9Parameters(); |
+ parameters.encodings[0].ssrc.emplace(ssrc); |
+ return parameters; |
+} |
+ |
+// Make audio parameters with all the available properties configured and |
+// features used, and with multiple codecs offered. Obtained by taking a |
+// snapshot of a default PeerConnection offer (and adding other things, like |
+// bitrate limit). |
+// |
+// See "MakeFullOpusParameters"/"MakeFullIsacParameters" below. |
+RtpParameters MakeFullAudioParameters(int preferred_payload_type) { |
+ RtpParameters parameters; |
+ |
+ RtpCodecParameters opus_codec; |
+ opus_codec.name = "opus"; |
+ opus_codec.kind = cricket::MEDIA_TYPE_AUDIO; |
+ opus_codec.payload_type = 111; |
+ opus_codec.clock_rate.emplace(48000); |
+ opus_codec.num_channels.emplace(2); |
+ opus_codec.parameters["minptime"] = "10"; |
+ opus_codec.parameters["useinbandfec"] = "1"; |
+ opus_codec.parameters["usedtx"] = "1"; |
+ opus_codec.parameters["stereo"] = "1"; |
+ opus_codec.rtcp_feedback.emplace_back(RtcpFeedbackType::TRANSPORT_CC); |
+ parameters.codecs.push_back(std::move(opus_codec)); |
+ |
+ RtpCodecParameters isac_codec; |
+ isac_codec.name = "ISAC"; |
+ isac_codec.kind = cricket::MEDIA_TYPE_AUDIO; |
+ isac_codec.payload_type = 103; |
+ isac_codec.clock_rate.emplace(16000); |
+ parameters.codecs.push_back(std::move(isac_codec)); |
+ |
+ RtpCodecParameters cn_codec; |
+ cn_codec.name = "CN"; |
+ cn_codec.kind = cricket::MEDIA_TYPE_AUDIO; |
+ cn_codec.payload_type = 106; |
+ cn_codec.clock_rate.emplace(32000); |
+ parameters.codecs.push_back(std::move(cn_codec)); |
+ |
+ RtpCodecParameters dtmf_codec; |
+ dtmf_codec.name = "telephone-event"; |
+ dtmf_codec.kind = cricket::MEDIA_TYPE_AUDIO; |
+ dtmf_codec.payload_type = 126; |
+ dtmf_codec.clock_rate.emplace(8000); |
+ parameters.codecs.push_back(std::move(dtmf_codec)); |
+ |
+ // "codec_payload_type" isn't implemented, so we need to reorder codecs to |
+ // cause one to be used. |
+ // TODO(deadbeef): Remove this when it becomes unnecessary. |
+ std::sort(parameters.codecs.begin(), parameters.codecs.end(), |
+ [preferred_payload_type](const RtpCodecParameters& a, |
+ const RtpCodecParameters& b) { |
+ return a.payload_type == preferred_payload_type; |
+ }); |
+ |
+ // Intentionally leave out SSRC so one's chosen automatically. |
+ RtpEncodingParameters encoding; |
+ encoding.codec_payload_type.emplace(preferred_payload_type); |
+ encoding.dtx.emplace(DtxStatus::ENABLED); |
+ // 20 kbps. |
+ encoding.max_bitrate_bps.emplace(20000); |
+ parameters.encodings.push_back(std::move(encoding)); |
+ |
+ parameters.header_extensions.emplace_back( |
+ "urn:ietf:params:rtp-hdrext:ssrc-audio-level", 1); |
+ return parameters; |
+} |
+ |
+RtpParameters MakeFullOpusParameters() { |
+ return MakeFullAudioParameters(111); |
+} |
+ |
+RtpParameters MakeFullIsacParameters() { |
+ return MakeFullAudioParameters(103); |
+} |
+ |
+// Make video parameters with all the available properties configured and |
+// features used, and with multiple codecs offered. Obtained by taking a |
+// snapshot of a default PeerConnection offer (and adding other things, like |
+// bitrate limit). |
+// |
+// See "MakeFullVp8Parameters"/"MakeFullVp9Parameters" below. |
+RtpParameters MakeFullVideoParameters(int preferred_payload_type) { |
+ RtpParameters parameters; |
+ |
+ RtpCodecParameters vp8_codec; |
+ vp8_codec.name = "VP8"; |
+ vp8_codec.kind = cricket::MEDIA_TYPE_VIDEO; |
+ vp8_codec.payload_type = 100; |
+ vp8_codec.clock_rate.emplace(90000); |
+ vp8_codec.rtcp_feedback.emplace_back(RtcpFeedbackType::CCM, |
+ RtcpFeedbackMessageType::FIR); |
+ vp8_codec.rtcp_feedback.emplace_back(RtcpFeedbackType::NACK, |
+ RtcpFeedbackMessageType::GENERIC_NACK); |
+ vp8_codec.rtcp_feedback.emplace_back(RtcpFeedbackType::NACK, |
+ RtcpFeedbackMessageType::PLI); |
+ vp8_codec.rtcp_feedback.emplace_back(RtcpFeedbackType::REMB); |
+ vp8_codec.rtcp_feedback.emplace_back(RtcpFeedbackType::TRANSPORT_CC); |
+ parameters.codecs.push_back(std::move(vp8_codec)); |
+ |
+ RtpCodecParameters vp8_rtx_codec; |
+ vp8_rtx_codec.name = "rtx"; |
+ vp8_rtx_codec.kind = cricket::MEDIA_TYPE_VIDEO; |
+ vp8_rtx_codec.payload_type = 96; |
+ vp8_rtx_codec.clock_rate.emplace(90000); |
+ vp8_rtx_codec.parameters["apt"] = "100"; |
+ parameters.codecs.push_back(std::move(vp8_rtx_codec)); |
+ |
+ RtpCodecParameters vp9_codec; |
+ vp9_codec.name = "VP9"; |
+ vp9_codec.kind = cricket::MEDIA_TYPE_VIDEO; |
+ vp9_codec.payload_type = 101; |
+ vp9_codec.clock_rate.emplace(90000); |
+ vp9_codec.rtcp_feedback.emplace_back(RtcpFeedbackType::CCM, |
+ RtcpFeedbackMessageType::FIR); |
+ vp9_codec.rtcp_feedback.emplace_back(RtcpFeedbackType::NACK, |
+ RtcpFeedbackMessageType::GENERIC_NACK); |
+ vp9_codec.rtcp_feedback.emplace_back(RtcpFeedbackType::NACK, |
+ RtcpFeedbackMessageType::PLI); |
+ vp9_codec.rtcp_feedback.emplace_back(RtcpFeedbackType::REMB); |
+ vp9_codec.rtcp_feedback.emplace_back(RtcpFeedbackType::TRANSPORT_CC); |
+ parameters.codecs.push_back(std::move(vp9_codec)); |
+ |
+ RtpCodecParameters vp9_rtx_codec; |
+ vp9_rtx_codec.name = "rtx"; |
+ vp9_rtx_codec.kind = cricket::MEDIA_TYPE_VIDEO; |
+ vp9_rtx_codec.payload_type = 97; |
+ vp9_rtx_codec.clock_rate.emplace(90000); |
+ vp9_rtx_codec.parameters["apt"] = "101"; |
+ parameters.codecs.push_back(std::move(vp9_rtx_codec)); |
+ |
+ RtpCodecParameters red_codec; |
+ red_codec.name = "red"; |
+ red_codec.kind = cricket::MEDIA_TYPE_VIDEO; |
+ red_codec.payload_type = 116; |
+ red_codec.clock_rate.emplace(90000); |
+ parameters.codecs.push_back(std::move(red_codec)); |
+ |
+ RtpCodecParameters red_rtx_codec; |
+ red_rtx_codec.name = "rtx"; |
+ red_rtx_codec.kind = cricket::MEDIA_TYPE_VIDEO; |
+ red_rtx_codec.payload_type = 98; |
+ red_rtx_codec.clock_rate.emplace(90000); |
+ red_rtx_codec.parameters["apt"] = "116"; |
+ parameters.codecs.push_back(std::move(red_rtx_codec)); |
+ |
+ RtpCodecParameters ulpfec_codec; |
+ ulpfec_codec.name = "ulpfec"; |
+ ulpfec_codec.kind = cricket::MEDIA_TYPE_VIDEO; |
+ ulpfec_codec.payload_type = 117; |
+ ulpfec_codec.clock_rate.emplace(90000); |
+ parameters.codecs.push_back(std::move(ulpfec_codec)); |
+ |
+ // "codec_payload_type" isn't implemented, so we need to reorder codecs to |
+ // cause one to be used. |
+ // TODO(deadbeef): Remove this when it becomes unnecessary. |
+ std::sort(parameters.codecs.begin(), parameters.codecs.end(), |
+ [preferred_payload_type](const RtpCodecParameters& a, |
+ const RtpCodecParameters& b) { |
+ return a.payload_type == preferred_payload_type; |
+ }); |
+ |
+ // Intentionally leave out SSRC so one's chosen automatically. |
+ RtpEncodingParameters encoding; |
+ encoding.codec_payload_type.emplace(preferred_payload_type); |
+ encoding.fec.emplace(FecMechanism::RED_AND_ULPFEC); |
+ // Will create default RtxParameters, with unset SSRC. |
+ encoding.rtx.emplace(); |
+ // 100 kbps. |
+ encoding.max_bitrate_bps.emplace(100000); |
+ parameters.encodings.push_back(std::move(encoding)); |
+ |
+ parameters.header_extensions.emplace_back( |
+ "urn:ietf:params:rtp-hdrext:toffset", 2); |
+ parameters.header_extensions.emplace_back( |
+ "http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time", 3); |
+ parameters.header_extensions.emplace_back("urn:3gpp:video-orientation", 4); |
+ parameters.header_extensions.emplace_back( |
+ "http://www.ietf.org/id/" |
+ "draft-holmer-rmcat-transport-wide-cc-extensions-01", |
+ 5); |
+ parameters.header_extensions.emplace_back( |
+ "http://www.webrtc.org/experiments/rtp-hdrext/playout-delay", 6); |
+ return parameters; |
+} |
+ |
+RtpParameters MakeFullVp8Parameters() { |
+ return MakeFullVideoParameters(100); |
+} |
+ |
+RtpParameters MakeFullVp9Parameters() { |
+ return MakeFullVideoParameters(101); |
+} |
+ |
+} // namespace webrtc |