OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2004 The WebRTC project authors. All Rights Reserved. | 2 * Copyright 2004 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
60 using cricket::GetFirstVideoContentDescription; | 60 using cricket::GetFirstVideoContentDescription; |
61 using cricket::GetFirstDataContentDescription; | 61 using cricket::GetFirstDataContentDescription; |
62 using cricket::kAutoBandwidth; | 62 using cricket::kAutoBandwidth; |
63 using cricket::AudioCodec; | 63 using cricket::AudioCodec; |
64 using cricket::VideoCodec; | 64 using cricket::VideoCodec; |
65 using cricket::DataCodec; | 65 using cricket::DataCodec; |
66 using cricket::NS_JINGLE_RTP; | 66 using cricket::NS_JINGLE_RTP; |
67 using cricket::MEDIA_TYPE_AUDIO; | 67 using cricket::MEDIA_TYPE_AUDIO; |
68 using cricket::MEDIA_TYPE_VIDEO; | 68 using cricket::MEDIA_TYPE_VIDEO; |
69 using cricket::MEDIA_TYPE_DATA; | 69 using cricket::MEDIA_TYPE_DATA; |
70 using cricket::RtpHeaderExtension; | |
71 using cricket::SEC_DISABLED; | 70 using cricket::SEC_DISABLED; |
72 using cricket::SEC_ENABLED; | 71 using cricket::SEC_ENABLED; |
73 using cricket::SEC_REQUIRED; | 72 using cricket::SEC_REQUIRED; |
74 using rtc::CS_AES_CM_128_HMAC_SHA1_32; | 73 using rtc::CS_AES_CM_128_HMAC_SHA1_32; |
75 using rtc::CS_AES_CM_128_HMAC_SHA1_80; | 74 using rtc::CS_AES_CM_128_HMAC_SHA1_80; |
| 75 using webrtc::RtpExtension; |
76 | 76 |
77 static const AudioCodec kAudioCodecs1[] = { | 77 static const AudioCodec kAudioCodecs1[] = { |
78 AudioCodec(103, "ISAC", 16000, -1, 1), | 78 AudioCodec(103, "ISAC", 16000, -1, 1), |
79 AudioCodec(102, "iLBC", 8000, 13300, 1), | 79 AudioCodec(102, "iLBC", 8000, 13300, 1), |
80 AudioCodec(0, "PCMU", 8000, 64000, 1), | 80 AudioCodec(0, "PCMU", 8000, 64000, 1), |
81 AudioCodec(8, "PCMA", 8000, 64000, 1), | 81 AudioCodec(8, "PCMA", 8000, 64000, 1), |
82 AudioCodec(117, "red", 8000, 0, 1), | 82 AudioCodec(117, "red", 8000, 0, 1), |
83 AudioCodec(107, "CN", 48000, 0, 1)}; | 83 AudioCodec(107, "CN", 48000, 0, 1)}; |
84 | 84 |
85 static const AudioCodec kAudioCodecs2[] = { | 85 static const AudioCodec kAudioCodecs2[] = { |
(...skipping 20 matching lines...) Expand all Loading... |
106 | 106 |
107 static const DataCodec kDataCodecs1[] = {DataCodec(98, "binary-data"), | 107 static const DataCodec kDataCodecs1[] = {DataCodec(98, "binary-data"), |
108 DataCodec(99, "utf8-text")}; | 108 DataCodec(99, "utf8-text")}; |
109 | 109 |
110 static const DataCodec kDataCodecs2[] = {DataCodec(126, "binary-data"), | 110 static const DataCodec kDataCodecs2[] = {DataCodec(126, "binary-data"), |
111 DataCodec(127, "utf8-text")}; | 111 DataCodec(127, "utf8-text")}; |
112 | 112 |
113 static const DataCodec kDataCodecsAnswer[] = {DataCodec(98, "binary-data"), | 113 static const DataCodec kDataCodecsAnswer[] = {DataCodec(98, "binary-data"), |
114 DataCodec(99, "utf8-text")}; | 114 DataCodec(99, "utf8-text")}; |
115 | 115 |
116 static const RtpHeaderExtension kAudioRtpExtension1[] = { | 116 static const RtpExtension kAudioRtpExtension1[] = { |
117 RtpHeaderExtension("urn:ietf:params:rtp-hdrext:ssrc-audio-level", 8), | 117 RtpExtension("urn:ietf:params:rtp-hdrext:ssrc-audio-level", 8), |
118 RtpHeaderExtension("http://google.com/testing/audio_something", 10), | 118 RtpExtension("http://google.com/testing/audio_something", 10), |
119 }; | 119 }; |
120 | 120 |
121 static const RtpHeaderExtension kAudioRtpExtension2[] = { | 121 static const RtpExtension kAudioRtpExtension2[] = { |
122 RtpHeaderExtension("urn:ietf:params:rtp-hdrext:ssrc-audio-level", 2), | 122 RtpExtension("urn:ietf:params:rtp-hdrext:ssrc-audio-level", 2), |
123 RtpHeaderExtension("http://google.com/testing/audio_something_else", 8), | 123 RtpExtension("http://google.com/testing/audio_something_else", 8), |
124 RtpHeaderExtension("http://google.com/testing/both_audio_and_video", 7), | 124 RtpExtension("http://google.com/testing/both_audio_and_video", 7), |
125 }; | 125 }; |
126 | 126 |
127 static const RtpHeaderExtension kAudioRtpExtension3[] = { | 127 static const RtpExtension kAudioRtpExtension3[] = { |
128 RtpHeaderExtension("http://google.com/testing/audio_something", 2), | 128 RtpExtension("http://google.com/testing/audio_something", 2), |
129 RtpHeaderExtension("http://google.com/testing/both_audio_and_video", 3), | 129 RtpExtension("http://google.com/testing/both_audio_and_video", 3), |
130 }; | 130 }; |
131 | 131 |
132 static const RtpHeaderExtension kAudioRtpExtensionAnswer[] = { | 132 static const RtpExtension kAudioRtpExtensionAnswer[] = { |
133 RtpHeaderExtension("urn:ietf:params:rtp-hdrext:ssrc-audio-level", 8), | 133 RtpExtension("urn:ietf:params:rtp-hdrext:ssrc-audio-level", 8), |
134 }; | 134 }; |
135 | 135 |
136 static const RtpHeaderExtension kVideoRtpExtension1[] = { | 136 static const RtpExtension kVideoRtpExtension1[] = { |
137 RtpHeaderExtension("urn:ietf:params:rtp-hdrext:toffset", 14), | 137 RtpExtension("urn:ietf:params:rtp-hdrext:toffset", 14), |
138 RtpHeaderExtension("http://google.com/testing/video_something", 13), | 138 RtpExtension("http://google.com/testing/video_something", 13), |
139 }; | 139 }; |
140 | 140 |
141 static const RtpHeaderExtension kVideoRtpExtension2[] = { | 141 static const RtpExtension kVideoRtpExtension2[] = { |
142 RtpHeaderExtension("urn:ietf:params:rtp-hdrext:toffset", 2), | 142 RtpExtension("urn:ietf:params:rtp-hdrext:toffset", 2), |
143 RtpHeaderExtension("http://google.com/testing/video_something_else", 14), | 143 RtpExtension("http://google.com/testing/video_something_else", 14), |
144 RtpHeaderExtension("http://google.com/testing/both_audio_and_video", 7), | 144 RtpExtension("http://google.com/testing/both_audio_and_video", 7), |
145 }; | 145 }; |
146 | 146 |
147 static const RtpHeaderExtension kVideoRtpExtension3[] = { | 147 static const RtpExtension kVideoRtpExtension3[] = { |
148 RtpHeaderExtension("http://google.com/testing/video_something", 4), | 148 RtpExtension("http://google.com/testing/video_something", 4), |
149 RtpHeaderExtension("http://google.com/testing/both_audio_and_video", 5), | 149 RtpExtension("http://google.com/testing/both_audio_and_video", 5), |
150 }; | 150 }; |
151 | 151 |
152 static const RtpHeaderExtension kVideoRtpExtensionAnswer[] = { | 152 static const RtpExtension kVideoRtpExtensionAnswer[] = { |
153 RtpHeaderExtension("urn:ietf:params:rtp-hdrext:toffset", 14), | 153 RtpExtension("urn:ietf:params:rtp-hdrext:toffset", 14), |
154 }; | 154 }; |
155 | 155 |
156 static const uint32_t kSimulcastParamsSsrc[] = {10, 11, 20, 21, 30, 31}; | 156 static const uint32_t kSimulcastParamsSsrc[] = {10, 11, 20, 21, 30, 31}; |
157 static const uint32_t kSimSsrc[] = {10, 20, 30}; | 157 static const uint32_t kSimSsrc[] = {10, 20, 30}; |
158 static const uint32_t kFec1Ssrc[] = {10, 11}; | 158 static const uint32_t kFec1Ssrc[] = {10, 11}; |
159 static const uint32_t kFec2Ssrc[] = {20, 21}; | 159 static const uint32_t kFec2Ssrc[] = {20, 21}; |
160 static const uint32_t kFec3Ssrc[] = {30, 31}; | 160 static const uint32_t kFec3Ssrc[] = {30, 31}; |
161 | 161 |
162 static const char kMediaStream1[] = "stream_1"; | 162 static const char kMediaStream1[] = "stream_1"; |
163 static const char kMediaStream2[] = "stream_2"; | 163 static const char kMediaStream2[] = "stream_2"; |
(...skipping 1733 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1897 answer.get())->rtp_header_extensions()); | 1897 answer.get())->rtp_header_extensions()); |
1898 | 1898 |
1899 std::unique_ptr<SessionDescription> updated_offer( | 1899 std::unique_ptr<SessionDescription> updated_offer( |
1900 f2_.CreateOffer(opts, answer.get())); | 1900 f2_.CreateOffer(opts, answer.get())); |
1901 | 1901 |
1902 // The expected RTP header extensions in the new offer are the resulting | 1902 // The expected RTP header extensions in the new offer are the resulting |
1903 // extensions from the first offer/answer exchange plus the extensions only | 1903 // extensions from the first offer/answer exchange plus the extensions only |
1904 // |f2_| offer. | 1904 // |f2_| offer. |
1905 // Since the default local extension id |f2_| uses has already been used by | 1905 // Since the default local extension id |f2_| uses has already been used by |
1906 // |f1_| for another extensions, it is changed to 13. | 1906 // |f1_| for another extensions, it is changed to 13. |
1907 const RtpHeaderExtension kUpdatedAudioRtpExtensions[] = { | 1907 const RtpExtension kUpdatedAudioRtpExtensions[] = { |
1908 kAudioRtpExtensionAnswer[0], | 1908 kAudioRtpExtensionAnswer[0], RtpExtension(kAudioRtpExtension2[1].uri, 13), |
1909 RtpHeaderExtension(kAudioRtpExtension2[1].uri, 13), | 1909 kAudioRtpExtension2[2], |
1910 kAudioRtpExtension2[2], | |
1911 }; | 1910 }; |
1912 | 1911 |
1913 // Since the default local extension id |f2_| uses has already been used by | 1912 // Since the default local extension id |f2_| uses has already been used by |
1914 // |f1_| for another extensions, is is changed to 12. | 1913 // |f1_| for another extensions, is is changed to 12. |
1915 const RtpHeaderExtension kUpdatedVideoRtpExtensions[] = { | 1914 const RtpExtension kUpdatedVideoRtpExtensions[] = { |
1916 kVideoRtpExtensionAnswer[0], | 1915 kVideoRtpExtensionAnswer[0], RtpExtension(kVideoRtpExtension2[1].uri, 12), |
1917 RtpHeaderExtension(kVideoRtpExtension2[1].uri, 12), | 1916 kVideoRtpExtension2[2], |
1918 kVideoRtpExtension2[2], | |
1919 }; | 1917 }; |
1920 | 1918 |
1921 const AudioContentDescription* updated_acd = | 1919 const AudioContentDescription* updated_acd = |
1922 GetFirstAudioContentDescription(updated_offer.get()); | 1920 GetFirstAudioContentDescription(updated_offer.get()); |
1923 EXPECT_EQ(MAKE_VECTOR(kUpdatedAudioRtpExtensions), | 1921 EXPECT_EQ(MAKE_VECTOR(kUpdatedAudioRtpExtensions), |
1924 updated_acd->rtp_header_extensions()); | 1922 updated_acd->rtp_header_extensions()); |
1925 | 1923 |
1926 const VideoContentDescription* updated_vcd = | 1924 const VideoContentDescription* updated_vcd = |
1927 GetFirstVideoContentDescription(updated_offer.get()); | 1925 GetFirstVideoContentDescription(updated_offer.get()); |
1928 EXPECT_EQ(MAKE_VECTOR(kUpdatedVideoRtpExtensions), | 1926 EXPECT_EQ(MAKE_VECTOR(kUpdatedVideoRtpExtensions), |
1929 updated_vcd->rtp_header_extensions()); | 1927 updated_vcd->rtp_header_extensions()); |
1930 } | 1928 } |
1931 | 1929 |
1932 // Verify that if the same RTP extension URI is used for audio and video, the | 1930 // Verify that if the same RTP extension URI is used for audio and video, the |
1933 // same ID is used. Also verify that the ID isn't changed when creating an | 1931 // same ID is used. Also verify that the ID isn't changed when creating an |
1934 // updated offer (this was previously a bug). | 1932 // updated offer (this was previously a bug). |
1935 TEST_F(MediaSessionDescriptionFactoryTest, | 1933 TEST_F(MediaSessionDescriptionFactoryTest, RtpExtensionIdReused) { |
1936 RtpHeaderExtensionIdReused) { | |
1937 MediaSessionOptions opts; | 1934 MediaSessionOptions opts; |
1938 opts.recv_audio = true; | 1935 opts.recv_audio = true; |
1939 opts.recv_video = true; | 1936 opts.recv_video = true; |
1940 | 1937 |
1941 f1_.set_audio_rtp_header_extensions(MAKE_VECTOR(kAudioRtpExtension3)); | 1938 f1_.set_audio_rtp_header_extensions(MAKE_VECTOR(kAudioRtpExtension3)); |
1942 f1_.set_video_rtp_header_extensions(MAKE_VECTOR(kVideoRtpExtension3)); | 1939 f1_.set_video_rtp_header_extensions(MAKE_VECTOR(kVideoRtpExtension3)); |
1943 | 1940 |
1944 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, NULL)); | 1941 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, NULL)); |
1945 | 1942 |
1946 // Since the audio extensions used ID 3 for "both_audio_and_video", so should | 1943 // Since the audio extensions used ID 3 for "both_audio_and_video", so should |
1947 // the video extensions. | 1944 // the video extensions. |
1948 const RtpHeaderExtension kExpectedVideoRtpExtension[] = { | 1945 const RtpExtension kExpectedVideoRtpExtension[] = { |
1949 kVideoRtpExtension3[0], | 1946 kVideoRtpExtension3[0], kAudioRtpExtension3[1], |
1950 kAudioRtpExtension3[1], | |
1951 }; | 1947 }; |
1952 | 1948 |
1953 EXPECT_EQ(MAKE_VECTOR(kAudioRtpExtension3), | 1949 EXPECT_EQ(MAKE_VECTOR(kAudioRtpExtension3), |
1954 GetFirstAudioContentDescription( | 1950 GetFirstAudioContentDescription( |
1955 offer.get())->rtp_header_extensions()); | 1951 offer.get())->rtp_header_extensions()); |
1956 EXPECT_EQ(MAKE_VECTOR(kExpectedVideoRtpExtension), | 1952 EXPECT_EQ(MAKE_VECTOR(kExpectedVideoRtpExtension), |
1957 GetFirstVideoContentDescription( | 1953 GetFirstVideoContentDescription( |
1958 offer.get())->rtp_header_extensions()); | 1954 offer.get())->rtp_header_extensions()); |
1959 | 1955 |
1960 // Nothing should change when creating a new offer | 1956 // Nothing should change when creating a new offer |
(...skipping 482 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2443 EXPECT_EQ(GetParam(), acd->protocol()); | 2439 EXPECT_EQ(GetParam(), acd->protocol()); |
2444 EXPECT_EQ(GetParam(), vcd->protocol()); | 2440 EXPECT_EQ(GetParam(), vcd->protocol()); |
2445 } | 2441 } |
2446 | 2442 |
2447 INSTANTIATE_TEST_CASE_P(MediaProtocolPatternTest, | 2443 INSTANTIATE_TEST_CASE_P(MediaProtocolPatternTest, |
2448 MediaProtocolTest, | 2444 MediaProtocolTest, |
2449 ::testing::ValuesIn(kMediaProtocols)); | 2445 ::testing::ValuesIn(kMediaProtocols)); |
2450 INSTANTIATE_TEST_CASE_P(MediaProtocolDtlsPatternTest, | 2446 INSTANTIATE_TEST_CASE_P(MediaProtocolDtlsPatternTest, |
2451 MediaProtocolTest, | 2447 MediaProtocolTest, |
2452 ::testing::ValuesIn(kMediaProtocolsDtls)); | 2448 ::testing::ValuesIn(kMediaProtocolsDtls)); |
OLD | NEW |