test_api_rtcp.cc revision 0365a27f56aa2d2376d2f356bf70d161c3450244
18281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org/* 207c68b9c9de03b4110f25cb59d9d7ba8bad624bdleozwang@webrtc.org * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 38281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org * 48281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org * Use of this source code is governed by a BSD-style license 58281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org * that can be found in the LICENSE file in the root of the source 68281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org * tree. An additional intellectual property rights grant can be found 78281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org * in the file PATENTS. All contributing project authors may 88281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org * be found in the AUTHORS file in the root of the source tree. 98281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org */ 108281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org 118281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org#include <algorithm> 128281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org#include <vector> 138281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org 14a048d7cb0a5bad5ca49bbcc5273cb4cca28c1710pbos@webrtc.org#include "testing/gmock/include/gmock/gmock.h" 15a048d7cb0a5bad5ca49bbcc5273cb4cca28c1710pbos@webrtc.org#include "testing/gtest/include/gtest/gtest.h" 16a048d7cb0a5bad5ca49bbcc5273cb4cca28c1710pbos@webrtc.org#include "webrtc/common_types.h" 17822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org#include "webrtc/modules/rtp_rtcp/interface/receive_statistics.h" 18a048d7cb0a5bad5ca49bbcc5273cb4cca28c1710pbos@webrtc.org#include "webrtc/modules/rtp_rtcp/interface/rtp_rtcp.h" 19a048d7cb0a5bad5ca49bbcc5273cb4cca28c1710pbos@webrtc.org#include "webrtc/modules/rtp_rtcp/interface/rtp_rtcp_defines.h" 20822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org#include "webrtc/modules/rtp_rtcp/source/rtp_receiver_audio.h" 21a048d7cb0a5bad5ca49bbcc5273cb4cca28c1710pbos@webrtc.org#include "webrtc/modules/rtp_rtcp/test/testAPI/test_api.h" 228281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org 238281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.orgusing namespace webrtc; 249663686546d9d19b7b8d3d6d75d550d14fe3d3d0andrew@webrtc.org 2549888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.orgconst uint64_t kTestPictureId = 12345678; 260365a27f56aa2d2376d2f356bf70d161c3450244sprangconst uint8_t kSliPictureId = 156; 278281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org 28ece3890d3a40fe911ae895e28c329491e795b14dpbos@webrtc.orgclass RtcpCallback : public RtcpIntraFrameObserver { 298281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org public: 302853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org void SetModule(RtpRtcp* module) { 318281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org _rtpRtcpModule = module; 328281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org }; 332f44673d665899ca788ae44247a9a7f4764f5e2bpbos@webrtc.org virtual void OnRTCPPacketTimeout(const int32_t id) { 348281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org } 352f44673d665899ca788ae44247a9a7f4764f5e2bpbos@webrtc.org virtual void OnLipSyncUpdate(const int32_t id, 362f44673d665899ca788ae44247a9a7f4764f5e2bpbos@webrtc.org const int32_t audioVideoOffset) { 378281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org }; 389663686546d9d19b7b8d3d6d75d550d14fe3d3d0andrew@webrtc.org virtual void OnReceivedIntraFrameRequest(uint32_t ssrc) { 3949888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.org }; 409663686546d9d19b7b8d3d6d75d550d14fe3d3d0andrew@webrtc.org virtual void OnReceivedSLI(uint32_t ssrc, 419663686546d9d19b7b8d3d6d75d550d14fe3d3d0andrew@webrtc.org uint8_t pictureId) { 420365a27f56aa2d2376d2f356bf70d161c3450244sprang EXPECT_EQ(kSliPictureId & 0x3f, pictureId); 4349888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.org }; 449663686546d9d19b7b8d3d6d75d550d14fe3d3d0andrew@webrtc.org virtual void OnReceivedRPSI(uint32_t ssrc, 459663686546d9d19b7b8d3d6d75d550d14fe3d3d0andrew@webrtc.org uint64_t pictureId) { 4649888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.org EXPECT_EQ(kTestPictureId, pictureId); 4749888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.org }; 48aca26292aeb35c91e70dd22d5923bf74ce68fa30mflodman@webrtc.org virtual void OnLocalSsrcChanged(uint32_t old_ssrc, uint32_t new_ssrc) {}; 498281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org private: 508281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org RtpRtcp* _rtpRtcpModule; 518281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org}; 528281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org 53822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.orgclass TestRtpFeedback : public NullRtpFeedback { 54822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org public: 55822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org TestRtpFeedback(RtpRtcp* rtp_rtcp) : rtp_rtcp_(rtp_rtcp) {} 56822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org virtual ~TestRtpFeedback() {} 57822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 58822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org virtual void OnIncomingSSRCChanged(const int32_t id, 59286fe0b04d97205ac84688bbe613d5749192b2d1stefan@webrtc.org const uint32_t ssrc) { 60286fe0b04d97205ac84688bbe613d5749192b2d1stefan@webrtc.org rtp_rtcp_->SetRemoteSSRC(ssrc); 61822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org } 62822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 63822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org private: 64822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org RtpRtcp* rtp_rtcp_; 65822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org}; 66822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 678281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.orgclass RtpRtcpRtcpTest : public ::testing::Test { 688281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org protected: 69a678a3baee2e680bd521f3a6caf97707fffd6093stefan@webrtc.org RtpRtcpRtcpTest() : fake_clock(123456) { 709334ac2d78f760b37f512ef6c12bff220d1654c1pbos@webrtc.org test_csrcs.push_back(1234); 719334ac2d78f760b37f512ef6c12bff220d1654c1pbos@webrtc.org test_csrcs.push_back(2345); 728281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org test_id = 123; 738281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org test_ssrc = 3456; 748281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org test_timestamp = 4567; 758281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org test_sequence_number = 2345; 768281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org } 778281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org ~RtpRtcpRtcpTest() {} 788281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org 798281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org virtual void SetUp() { 80822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org receiver = new TestRtpReceiver(); 812853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org transport1 = new LoopBackTransport(); 822853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org transport2 = new LoopBackTransport(); 832853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org myRTCPFeedback1 = new RtcpCallback(); 842853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org myRTCPFeedback2 = new RtcpCallback(); 852853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org 86822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org receive_statistics1_.reset(ReceiveStatistics::Create(&fake_clock)); 87822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org receive_statistics2_.reset(ReceiveStatistics::Create(&fake_clock)); 88822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 892853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org RtpRtcp::Configuration configuration; 902853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org configuration.id = test_id; 918d0cd07d0c5e30eacaac4c118f9fd624b11e67abstefan@webrtc.org configuration.audio = true; 922853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org configuration.clock = &fake_clock; 93822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org configuration.receive_statistics = receive_statistics1_.get(); 942853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org configuration.outgoing_transport = transport1; 952853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org configuration.intra_frame_callback = myRTCPFeedback1; 96822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 97822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org rtp_payload_registry1_.reset(new RTPPayloadRegistry( 98dc80bae2a62a1bdbe0d342b3260a7e5b2cb958dfandresp@webrtc.org RTPPayloadStrategy::CreateStrategy(true))); 99822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org rtp_payload_registry2_.reset(new RTPPayloadRegistry( 100dc80bae2a62a1bdbe0d342b3260a7e5b2cb958dfandresp@webrtc.org RTPPayloadStrategy::CreateStrategy(true))); 1012853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org 1022853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org module1 = RtpRtcp::CreateRtpRtcp(configuration); 1032853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org 104822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org rtp_feedback1_.reset(new TestRtpFeedback(module1)); 105822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 106822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org rtp_receiver1_.reset(RtpReceiver::CreateAudioReceiver( 107822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org test_id, &fake_clock, NULL, receiver, rtp_feedback1_.get(), 108822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org rtp_payload_registry1_.get())); 109822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 110822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org configuration.receive_statistics = receive_statistics2_.get(); 1112853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org configuration.id = test_id + 1; 1122853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org configuration.outgoing_transport = transport2; 1132853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org configuration.intra_frame_callback = myRTCPFeedback2; 114822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 1152853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org module2 = RtpRtcp::CreateRtpRtcp(configuration); 1162853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org 117822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org rtp_feedback2_.reset(new TestRtpFeedback(module2)); 118822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 119822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org rtp_receiver2_.reset(RtpReceiver::CreateAudioReceiver( 120822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org test_id + 1, &fake_clock, NULL, receiver, rtp_feedback2_.get(), 121822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org rtp_payload_registry2_.get())); 122822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 123822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org transport1->SetSendModule(module2, rtp_payload_registry2_.get(), 124822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org rtp_receiver2_.get(), receive_statistics2_.get()); 125822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org transport2->SetSendModule(module1, rtp_payload_registry1_.get(), 126822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org rtp_receiver1_.get(), receive_statistics1_.get()); 1272853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org myRTCPFeedback1->SetModule(module1); 1282853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org myRTCPFeedback2->SetModule(module2); 129ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org 130d16e839c6d29831e79312180085b6a19149df43fpbos@webrtc.org module1->SetRTCPStatus(kRtcpCompound); 131d16e839c6d29831e79312180085b6a19149df43fpbos@webrtc.org module2->SetRTCPStatus(kRtcpCompound); 132ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org 133ef92755780253c6a7940c89598a206e58e05b810stefan@webrtc.org module2->SetSSRC(test_ssrc + 1); 134ef92755780253c6a7940c89598a206e58e05b810stefan@webrtc.org module1->SetSSRC(test_ssrc); 135d16e839c6d29831e79312180085b6a19149df43fpbos@webrtc.org module1->SetSequenceNumber(test_sequence_number); 136d16e839c6d29831e79312180085b6a19149df43fpbos@webrtc.org module1->SetStartTimestamp(test_timestamp); 1379334ac2d78f760b37f512ef6c12bff220d1654c1pbos@webrtc.org 1389334ac2d78f760b37f512ef6c12bff220d1654c1pbos@webrtc.org module1->SetCsrcs(test_csrcs); 139ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org EXPECT_EQ(0, module1->SetCNAME("john.doe@test.test")); 140ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org 141ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org EXPECT_EQ(0, module1->SetSendingStatus(true)); 142ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org 143822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org CodecInst voice_codec; 144822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org voice_codec.pltype = 96; 145822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org voice_codec.plfreq = 8000; 146822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org voice_codec.rate = 64000; 147822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org memcpy(voice_codec.plname, "PCMU", 5); 148822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 149822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org EXPECT_EQ(0, module1->RegisterSendPayload(voice_codec)); 150822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org EXPECT_EQ(0, rtp_receiver1_->RegisterReceivePayload( 151822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org voice_codec.plname, 152822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org voice_codec.pltype, 153822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org voice_codec.plfreq, 154822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org voice_codec.channels, 155822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org (voice_codec.rate < 0) ? 0 : voice_codec.rate)); 156822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org EXPECT_EQ(0, module2->RegisterSendPayload(voice_codec)); 157822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org EXPECT_EQ(0, rtp_receiver2_->RegisterReceivePayload( 158822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org voice_codec.plname, 159822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org voice_codec.pltype, 160822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org voice_codec.plfreq, 161822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org voice_codec.channels, 162822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org (voice_codec.rate < 0) ? 0 : voice_codec.rate)); 163ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org 164ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org // We need to send one RTP packet to get the RTCP packet to be accepted by 165ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org // the receiving module. 166ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org // send RTP packet with the data "testtest" 1672f44673d665899ca788ae44247a9a7f4764f5e2bpbos@webrtc.org const uint8_t test[9] = "testtest"; 168ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org EXPECT_EQ(0, module1->SendOutgoingData(webrtc::kAudioFrameSpeech, 96, 169ddfdfed3b55de3da5fda9a55d34e46d6e422baafstefan@webrtc.org 0, -1, test, 8)); 170ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org } 171ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org 1722853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org virtual void TearDown() { 1732853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org delete module1; 1742853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org delete module2; 1758d0cd07d0c5e30eacaac4c118f9fd624b11e67abstefan@webrtc.org delete myRTCPFeedback1; 1768d0cd07d0c5e30eacaac4c118f9fd624b11e67abstefan@webrtc.org delete myRTCPFeedback2; 1772853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org delete transport1; 1782853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org delete transport2; 1792853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org delete receiver; 1802853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org } 1812853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org 1828281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org int test_id; 18300b8f6b3643332cce1ee711715f7fbb824d793cakwiberg@webrtc.org rtc::scoped_ptr<TestRtpFeedback> rtp_feedback1_; 18400b8f6b3643332cce1ee711715f7fbb824d793cakwiberg@webrtc.org rtc::scoped_ptr<TestRtpFeedback> rtp_feedback2_; 18500b8f6b3643332cce1ee711715f7fbb824d793cakwiberg@webrtc.org rtc::scoped_ptr<ReceiveStatistics> receive_statistics1_; 18600b8f6b3643332cce1ee711715f7fbb824d793cakwiberg@webrtc.org rtc::scoped_ptr<ReceiveStatistics> receive_statistics2_; 18700b8f6b3643332cce1ee711715f7fbb824d793cakwiberg@webrtc.org rtc::scoped_ptr<RTPPayloadRegistry> rtp_payload_registry1_; 18800b8f6b3643332cce1ee711715f7fbb824d793cakwiberg@webrtc.org rtc::scoped_ptr<RTPPayloadRegistry> rtp_payload_registry2_; 18900b8f6b3643332cce1ee711715f7fbb824d793cakwiberg@webrtc.org rtc::scoped_ptr<RtpReceiver> rtp_receiver1_; 19000b8f6b3643332cce1ee711715f7fbb824d793cakwiberg@webrtc.org rtc::scoped_ptr<RtpReceiver> rtp_receiver2_; 1918281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org RtpRtcp* module1; 1928281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org RtpRtcp* module2; 193822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org TestRtpReceiver* receiver; 1948281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org LoopBackTransport* transport1; 1958281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org LoopBackTransport* transport2; 1962853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org RtcpCallback* myRTCPFeedback1; 1972853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org RtcpCallback* myRTCPFeedback2; 1982853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org 1992f44673d665899ca788ae44247a9a7f4764f5e2bpbos@webrtc.org uint32_t test_ssrc; 2002f44673d665899ca788ae44247a9a7f4764f5e2bpbos@webrtc.org uint32_t test_timestamp; 2012f44673d665899ca788ae44247a9a7f4764f5e2bpbos@webrtc.org uint16_t test_sequence_number; 2029334ac2d78f760b37f512ef6c12bff220d1654c1pbos@webrtc.org std::vector<uint32_t> test_csrcs; 203a678a3baee2e680bd521f3a6caf97707fffd6093stefan@webrtc.org SimulatedClock fake_clock; 2048281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org}; 2058281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org 20649888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.orgTEST_F(RtpRtcpRtcpTest, RTCP_PLI_RPSI) { 2078281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org EXPECT_EQ(0, module1->SendRTCPReferencePictureSelection(kTestPictureId)); 2080365a27f56aa2d2376d2f356bf70d161c3450244sprang EXPECT_EQ(0, module1->SendRTCPSliceLossIndication(kSliPictureId)); 20949888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.org} 2108281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org 21149888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.orgTEST_F(RtpRtcpRtcpTest, RTCP_CNAME) { 2122f44673d665899ca788ae44247a9a7f4764f5e2bpbos@webrtc.org uint32_t testOfCSRC[webrtc::kRtpCsrcSize]; 213822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org EXPECT_EQ(2, rtp_receiver2_->CSRCs(testOfCSRC)); 2149334ac2d78f760b37f512ef6c12bff220d1654c1pbos@webrtc.org EXPECT_EQ(test_csrcs[0], testOfCSRC[0]); 2159334ac2d78f760b37f512ef6c12bff220d1654c1pbos@webrtc.org EXPECT_EQ(test_csrcs[1], testOfCSRC[1]); 2168281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org 2178281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org // Set cname of mixed. 2189334ac2d78f760b37f512ef6c12bff220d1654c1pbos@webrtc.org EXPECT_EQ(0, module1->AddMixedCNAME(test_csrcs[0], "john@192.168.0.1")); 2199334ac2d78f760b37f512ef6c12bff220d1654c1pbos@webrtc.org EXPECT_EQ(0, module1->AddMixedCNAME(test_csrcs[1], "jane@192.168.0.2")); 2208281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org 2219334ac2d78f760b37f512ef6c12bff220d1654c1pbos@webrtc.org EXPECT_EQ(-1, module1->RemoveMixedCNAME(test_csrcs[0] + 1)); 2229334ac2d78f760b37f512ef6c12bff220d1654c1pbos@webrtc.org EXPECT_EQ(0, module1->RemoveMixedCNAME(test_csrcs[1])); 2239334ac2d78f760b37f512ef6c12bff220d1654c1pbos@webrtc.org EXPECT_EQ(0, module1->AddMixedCNAME(test_csrcs[1], "jane@192.168.0.2")); 2248281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org 22549888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.org // send RTCP packet, triggered by timer 226a678a3baee2e680bd521f3a6caf97707fffd6093stefan@webrtc.org fake_clock.AdvanceTimeMilliseconds(7500); 22749888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.org module1->Process(); 228a678a3baee2e680bd521f3a6caf97707fffd6093stefan@webrtc.org fake_clock.AdvanceTimeMilliseconds(100); 22949888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.org module2->Process(); 23049888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.org 23149888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.org char cName[RTCP_CNAME_SIZE]; 232822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org EXPECT_EQ(-1, module2->RemoteCNAME(rtp_receiver2_->SSRC() + 1, cName)); 23349888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.org 23449888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.org // Check multiple CNAME. 235822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org EXPECT_EQ(0, module2->RemoteCNAME(rtp_receiver2_->SSRC(), cName)); 23649888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.org EXPECT_EQ(0, strncmp(cName, "john.doe@test.test", RTCP_CNAME_SIZE)); 23749888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.org 2389334ac2d78f760b37f512ef6c12bff220d1654c1pbos@webrtc.org EXPECT_EQ(0, module2->RemoteCNAME(test_csrcs[0], cName)); 23949888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.org EXPECT_EQ(0, strncmp(cName, "john@192.168.0.1", RTCP_CNAME_SIZE)); 24049888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.org 2419334ac2d78f760b37f512ef6c12bff220d1654c1pbos@webrtc.org EXPECT_EQ(0, module2->RemoteCNAME(test_csrcs[1], cName)); 24249888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.org EXPECT_EQ(0, strncmp(cName, "jane@192.168.0.2", RTCP_CNAME_SIZE)); 24349888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.org 24449888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.org EXPECT_EQ(0, module1->SetSendingStatus(false)); 24549888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.org 24649888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.org // Test that BYE clears the CNAME 247822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org EXPECT_EQ(-1, module2->RemoteCNAME(rtp_receiver2_->SSRC(), cName)); 24849888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.org} 24949888ce42858e308c7b0575697f06e2483a34daepwestin@webrtc.org 250ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.orgTEST_F(RtpRtcpRtcpTest, RemoteRTCPStatRemote) { 251ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org std::vector<RTCPReportBlock> report_blocks; 252ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org 253ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org EXPECT_EQ(0, module1->RemoteRTCPStat(&report_blocks)); 254ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org EXPECT_EQ(0u, report_blocks.size()); 255ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org 256ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org // send RTCP packet, triggered by timer 257a678a3baee2e680bd521f3a6caf97707fffd6093stefan@webrtc.org fake_clock.AdvanceTimeMilliseconds(7500); 258ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org module1->Process(); 259a678a3baee2e680bd521f3a6caf97707fffd6093stefan@webrtc.org fake_clock.AdvanceTimeMilliseconds(100); 260ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org module2->Process(); 261ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org 262ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org EXPECT_EQ(0, module1->RemoteRTCPStat(&report_blocks)); 263ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org ASSERT_EQ(1u, report_blocks.size()); 264ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org 265ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org // |test_ssrc+1| is the SSRC of module2 that send the report. 266ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org EXPECT_EQ(test_ssrc+1, report_blocks[0].remoteSSRC); 267ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org EXPECT_EQ(test_ssrc, report_blocks[0].sourceSSRC); 268ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org 269ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org EXPECT_EQ(0u, report_blocks[0].cumulativeLost); 270ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org EXPECT_LT(0u, report_blocks[0].delaySinceLastSR); 271ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org EXPECT_EQ(test_sequence_number, report_blocks[0].extendedHighSeqNum); 272ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org EXPECT_EQ(0u, report_blocks[0].fractionLost); 273ce5990cb0bbfbf5ee5306cf990e975a2faa090b7perkj@webrtc.org} 274