123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259 |
- // Copyright 2016 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include "remoting/protocol/sdp_message.h"
- #include "testing/gtest/include/gtest/gtest.h"
- namespace remoting {
- namespace protocol {
- // Verify that SDP is normalized by removing empty lines and normalizing
- // line-endings to \r\n.
- TEST(SdpMessages, Normalize) {
- SdpMessage sdp_message("a=foo\n\r\nb=bar");
- EXPECT_EQ("a=foo\r\nb=bar\r\n", sdp_message.ToString());
- }
- // Verify that the normalized form of SDP for signature calculation has
- // line-endings of \n, for compatibility with existing clients.
- TEST(SdpMessages, NormalizedForSignature) {
- SdpMessage sdp_message("a=foo\nb=bar\r\n");
- EXPECT_EQ("a=foo\nb=bar\n", sdp_message.NormalizedForSignature());
- }
- TEST(SdpMessages, AddCodecParameter) {
- std::string kSourceSdp =
- "a=group:BUNDLE video\n"
- "m=video 9 UDP/TLS/RTP/SAVPF 96\n"
- "a=rtpmap:96 VP8/90000\n"
- "a=rtcp-fb:96 transport-cc\n";
- SdpMessage sdp_message(kSourceSdp);
- EXPECT_TRUE(sdp_message.AddCodecParameter("VP8", "test_param=1"));
- EXPECT_EQ(
- "a=group:BUNDLE video\r\n"
- "m=video 9 UDP/TLS/RTP/SAVPF 96\r\n"
- "a=rtpmap:96 VP8/90000\r\n"
- "a=fmtp:96 test_param=1\r\n"
- "a=rtcp-fb:96 transport-cc\r\n",
- sdp_message.ToString());
- }
- TEST(SdpMessages, AddCodecParameterMissingCodec) {
- std::string kSourceSdp =
- "a=group:BUNDLE audio video\r\n"
- "m=audio 9 UDP/TLS/RTP/SAVPF 111\r\n"
- "a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\r\n"
- "a=rtpmap:111 opus/48000/2\r\n"
- "a=rtcp-fb:111 transport-cc\r\n"
- "m=video 9 UDP/TLS/RTP/SAVPF 96\r\n"
- "a=rtpmap:96 VP9/90000\r\n"
- "a=rtcp-fb:96 transport-cc\r\n"
- "m=application 9 DTLS/SCTP 5000\r\n";
- SdpMessage sdp_message(kSourceSdp);
- EXPECT_FALSE(sdp_message.AddCodecParameter("VP8", "test_param=1"));
- EXPECT_EQ(kSourceSdp, sdp_message.ToString());
- }
- TEST(SdpMessages, AddCodecParameter_MultipleTypes) {
- const std::string kSourceSdp =
- "a=group:BUNDLE video\n"
- "m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99\n"
- "a=rtpmap:96 VP8/90000\n"
- "a=rtcp-fb:96 transport-cc\n"
- "a=rtpmap:97 VP9/90000\n"
- "a=rtcp-fb:97 transport-cc\n"
- "a=rtpmap:98 VP8/90000\n"
- "a=rtcp-fb:98 transport-cc\n"
- "a=rtpmap:99 VP8/90000\n"
- "a=rtcp-fb:99 transport-cc\n";
- SdpMessage sdp_message(kSourceSdp);
- EXPECT_TRUE(sdp_message.AddCodecParameter("VP8", "test_param=1"));
- EXPECT_EQ(
- "a=group:BUNDLE video\r\n"
- "m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99\r\n"
- "a=rtpmap:96 VP8/90000\r\n"
- "a=fmtp:96 test_param=1\r\n"
- "a=rtcp-fb:96 transport-cc\r\n"
- "a=rtpmap:97 VP9/90000\r\n"
- "a=rtcp-fb:97 transport-cc\r\n"
- "a=rtpmap:98 VP8/90000\r\n"
- "a=fmtp:98 test_param=1\r\n"
- "a=rtcp-fb:98 transport-cc\r\n"
- "a=rtpmap:99 VP8/90000\r\n"
- "a=fmtp:99 test_param=1\r\n"
- "a=rtcp-fb:99 transport-cc\r\n",
- sdp_message.ToString());
- }
- TEST(SdpMessages, PreferVideoCodec_SdpIsUnchanged) {
- static const std::string kSourceSdp =
- "m=video 98 UDP/TLS/RTP/SAVPF 96 97 98 99 100\r\n"
- "a=rtpmap:96 VP8/90000\r\n"
- "a=fmtp:96\r\n"
- "a=rtpmap:97 VP8.1/90000\r\n"
- "a=fmtp:97\r\n"
- "a=rtpmap:98 VP9/90000\r\n"
- "a=fmtp:98\r\n"
- "a=rtpmap:99 VP9.1/90000\r\n"
- "a=fmtp:99\r\n"
- "a=rtpmap:100 H264/90000\r\n"
- "a=fmtp:100\r\n";
- SdpMessage sdp_message(kSourceSdp);
- EXPECT_TRUE(sdp_message.PreferVideoCodec("VP8"));
- EXPECT_EQ(kSourceSdp, sdp_message.ToString());
- }
- TEST(SdpMessages, PreferVideoCodec_MoveToTheStartOfTheList) {
- static const std::string kSourceSdp =
- "m=video 98 UDP/TLS/RTP/SAVPF 96 97 98 99 100\n"
- "a=rtpmap:96 VP8/90000\n"
- "a=fmtp:96\n"
- "a=rtpmap:97 VP8.1/90000\n"
- "a=fmtp:97\n"
- "a=rtpmap:98 VP9/90000\n"
- "a=fmtp:98\n"
- "a=rtpmap:99 VP9.1/90000\n"
- "a=fmtp:99\n"
- "a=rtpmap:100 H264/90000\n"
- "a=fmtp:100\n";
- SdpMessage sdp_message(kSourceSdp);
- EXPECT_TRUE(sdp_message.PreferVideoCodec("VP8.1"));
- EXPECT_EQ(
- "m=video 98 UDP/TLS/RTP/SAVPF 97 96 98 99 100\r\n"
- "a=rtpmap:96 VP8/90000\r\n"
- "a=fmtp:96\r\n"
- "a=rtpmap:97 VP8.1/90000\r\n"
- "a=fmtp:97\r\n"
- "a=rtpmap:98 VP9/90000\r\n"
- "a=fmtp:98\r\n"
- "a=rtpmap:99 VP9.1/90000\r\n"
- "a=fmtp:99\r\n"
- "a=rtpmap:100 H264/90000\r\n"
- "a=fmtp:100\r\n",
- sdp_message.ToString());
- sdp_message = SdpMessage(kSourceSdp);
- EXPECT_TRUE(sdp_message.PreferVideoCodec("VP9"));
- EXPECT_EQ(
- "m=video 98 UDP/TLS/RTP/SAVPF 98 96 97 99 100\r\n"
- "a=rtpmap:96 VP8/90000\r\n"
- "a=fmtp:96\r\n"
- "a=rtpmap:97 VP8.1/90000\r\n"
- "a=fmtp:97\r\n"
- "a=rtpmap:98 VP9/90000\r\n"
- "a=fmtp:98\r\n"
- "a=rtpmap:99 VP9.1/90000\r\n"
- "a=fmtp:99\r\n"
- "a=rtpmap:100 H264/90000\r\n"
- "a=fmtp:100\r\n",
- sdp_message.ToString());
- sdp_message = SdpMessage(kSourceSdp);
- EXPECT_TRUE(sdp_message.PreferVideoCodec("VP9.1"));
- EXPECT_EQ(
- "m=video 98 UDP/TLS/RTP/SAVPF 99 96 97 98 100\r\n"
- "a=rtpmap:96 VP8/90000\r\n"
- "a=fmtp:96\r\n"
- "a=rtpmap:97 VP8.1/90000\r\n"
- "a=fmtp:97\r\n"
- "a=rtpmap:98 VP9/90000\r\n"
- "a=fmtp:98\r\n"
- "a=rtpmap:99 VP9.1/90000\r\n"
- "a=fmtp:99\r\n"
- "a=rtpmap:100 H264/90000\r\n"
- "a=fmtp:100\r\n",
- sdp_message.ToString());
- sdp_message = SdpMessage(kSourceSdp);
- EXPECT_TRUE(sdp_message.PreferVideoCodec("H264"));
- EXPECT_EQ(
- "m=video 98 UDP/TLS/RTP/SAVPF 100 96 97 98 99\r\n"
- "a=rtpmap:96 VP8/90000\r\n"
- "a=fmtp:96\r\n"
- "a=rtpmap:97 VP8.1/90000\r\n"
- "a=fmtp:97\r\n"
- "a=rtpmap:98 VP9/90000\r\n"
- "a=fmtp:98\r\n"
- "a=rtpmap:99 VP9.1/90000\r\n"
- "a=fmtp:99\r\n"
- "a=rtpmap:100 H264/90000\r\n"
- "a=fmtp:100\r\n",
- sdp_message.ToString());
- }
- TEST(SdpMessages, PreferVideoCodec_UnknownCodec) {
- static const std::string kSourceSdp =
- "m=video 98 UDP/TLS/RTP/SAVPF 96 97 98 99 100\n"
- "a=rtpmap:96 VP8/90000\n"
- "a=fmtp:96\n"
- "a=rtpmap:97 VP8.1/90000\n"
- "a=fmtp:97\n"
- "a=rtpmap:98 VP9/90000\n"
- "a=fmtp:98\n"
- "a=rtpmap:99 VP9.1/90000\n"
- "a=fmtp:99\n"
- "a=rtpmap:100 H264/90000\n"
- "a=fmtp:100\n";
- SdpMessage sdp_message(kSourceSdp);
- EXPECT_FALSE(sdp_message.PreferVideoCodec("VP7"));
- EXPECT_EQ(
- "m=video 98 UDP/TLS/RTP/SAVPF 96 97 98 99 100\r\n"
- "a=rtpmap:96 VP8/90000\r\n"
- "a=fmtp:96\r\n"
- "a=rtpmap:97 VP8.1/90000\r\n"
- "a=fmtp:97\r\n"
- "a=rtpmap:98 VP9/90000\r\n"
- "a=fmtp:98\r\n"
- "a=rtpmap:99 VP9.1/90000\r\n"
- "a=fmtp:99\r\n"
- "a=rtpmap:100 H264/90000\r\n"
- "a=fmtp:100\r\n",
- sdp_message.ToString());
- }
- TEST(SdpMessages, PreferVideoCodec_MultiplePlayloads) {
- static const std::string kSourceSdp =
- "m=video 98 UDP/TLS/RTP/SAVPF 96 97 100 101 102 98 99\n"
- "a=rtpmap:96 VP8/90000\n"
- "a=fmtp:96\n"
- "a=rtpmap:97 VP8.1/90000\n"
- "a=fmtp:97\n"
- "a=rtpmap:101 VP9/90000\n"
- "a=fmtp:101\n"
- "a=rtpmap:98 VP9/90000\n"
- "a=fmtp:98\n"
- "a=rtpmap:99 VP9.1/90000\n"
- "a=fmtp:99\n"
- "a=rtpmap:102 VP9/90000\n"
- "a=fmtp:102\n"
- "a=rtpmap:103 VP9/90000\n"
- "a=fmtp:103\n"
- "a=rtpmap:100 H264/90000\n"
- "a=fmtp:100\n";
- SdpMessage sdp_message(kSourceSdp);
- EXPECT_TRUE(sdp_message.PreferVideoCodec("VP9"));
- EXPECT_EQ(
- "m=video 98 UDP/TLS/RTP/SAVPF 102 98 101 96 97 100 99\r\n"
- "a=rtpmap:96 VP8/90000\r\n"
- "a=fmtp:96\r\n"
- "a=rtpmap:97 VP8.1/90000\r\n"
- "a=fmtp:97\r\n"
- "a=rtpmap:101 VP9/90000\r\n"
- "a=fmtp:101\r\n"
- "a=rtpmap:98 VP9/90000\r\n"
- "a=fmtp:98\r\n"
- "a=rtpmap:99 VP9.1/90000\r\n"
- "a=fmtp:99\r\n"
- "a=rtpmap:102 VP9/90000\r\n"
- "a=fmtp:102\r\n"
- "a=rtpmap:103 VP9/90000\r\n"
- "a=fmtp:103\r\n"
- "a=rtpmap:100 H264/90000\r\n"
- "a=fmtp:100\r\n",
- sdp_message.ToString());
- }
- } // namespace protocol
- } // namespace remoting
|