[rtp_rtcp] rtcp::Remb moved into own file
Cleaning/Parsing will be done in the https://codereview.webrtc.org/1552773002/ BUG=webrtc:5260 R=asapersson@webrtc.org, åsapersson Review URL: https://codereview.webrtc.org/1590883002 . Cr-Commit-Position: refs/heads/master@{#11268}
This commit is contained in:
parent
d66b44d565
commit
a5eba6c98b
@ -313,6 +313,7 @@
|
||||
'rtp_rtcp/source/rtcp_packet/nack_unittest.cc',
|
||||
'rtp_rtcp/source/rtcp_packet/pli_unittest.cc',
|
||||
'rtp_rtcp/source/rtcp_packet/receiver_report_unittest.cc',
|
||||
'rtp_rtcp/source/rtcp_packet/remb_unittest.cc',
|
||||
'rtp_rtcp/source/rtcp_packet/report_block_unittest.cc',
|
||||
'rtp_rtcp/source/rtcp_packet/rrtr_unittest.cc',
|
||||
'rtp_rtcp/source/rtcp_packet/sli_unittest.cc',
|
||||
|
||||
@ -64,6 +64,8 @@ source_set("rtp_rtcp") {
|
||||
"source/rtcp_packet/psfb.h",
|
||||
"source/rtcp_packet/receiver_report.cc",
|
||||
"source/rtcp_packet/receiver_report.h",
|
||||
"source/rtcp_packet/remb.cc",
|
||||
"source/rtcp_packet/remb.h",
|
||||
"source/rtcp_packet/report_block.cc",
|
||||
"source/rtcp_packet/report_block.h",
|
||||
"source/rtcp_packet/rrtr.cc",
|
||||
|
||||
@ -59,6 +59,8 @@
|
||||
'source/rtcp_packet/psfb.h',
|
||||
'source/rtcp_packet/receiver_report.cc',
|
||||
'source/rtcp_packet/receiver_report.h',
|
||||
'source/rtcp_packet/remb.cc',
|
||||
'source/rtcp_packet/remb.h',
|
||||
'source/rtcp_packet/report_block.cc',
|
||||
'source/rtcp_packet/report_block.h',
|
||||
'source/rtcp_packet/rrtr.cc',
|
||||
|
||||
@ -29,10 +29,8 @@ using webrtc::RTCPUtility::PT_SR;
|
||||
using webrtc::RTCPUtility::PT_XR;
|
||||
|
||||
using webrtc::RTCPUtility::RTCPPacketAPP;
|
||||
using webrtc::RTCPUtility::RTCPPacketPSFBAPP;
|
||||
using webrtc::RTCPUtility::RTCPPacketPSFBFIR;
|
||||
using webrtc::RTCPUtility::RTCPPacketPSFBFIRItem;
|
||||
using webrtc::RTCPUtility::RTCPPacketPSFBREMBItem;
|
||||
using webrtc::RTCPUtility::RTCPPacketPSFBRPSI;
|
||||
using webrtc::RTCPUtility::RTCPPacketReportBlockItem;
|
||||
using webrtc::RTCPUtility::RTCPPacketRTPFBNACK;
|
||||
@ -63,24 +61,6 @@ void AssignUWord32(uint8_t* buffer, size_t* offset, uint32_t value) {
|
||||
*offset += 4;
|
||||
}
|
||||
|
||||
void ComputeMantissaAnd6bitBase2Exponent(uint32_t input_base10,
|
||||
uint8_t bits_mantissa,
|
||||
uint32_t* mantissa,
|
||||
uint8_t* exp) {
|
||||
// input_base10 = mantissa * 2^exp
|
||||
assert(bits_mantissa <= 32);
|
||||
uint32_t mantissa_max = (1 << bits_mantissa) - 1;
|
||||
uint8_t exponent = 0;
|
||||
for (uint32_t i = 0; i < 64; ++i) {
|
||||
if (input_base10 <= (mantissa_max << i)) {
|
||||
exponent = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
*exp = exponent;
|
||||
*mantissa = (input_base10 >> exponent);
|
||||
}
|
||||
|
||||
// Sender report (SR) (RFC 3550).
|
||||
// 0 1 2 3
|
||||
// 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
||||
@ -230,48 +210,6 @@ void CreateFir(const RTCPPacketPSFBFIR& fir,
|
||||
AssignUWord24(buffer, pos, 0);
|
||||
}
|
||||
|
||||
// Receiver Estimated Max Bitrate (REMB) (draft-alvestrand-rmcat-remb).
|
||||
//
|
||||
// 0 1 2 3
|
||||
// 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
||||
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
// |V=2|P| FMT=15 | PT=206 | length |
|
||||
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
// | SSRC of packet sender |
|
||||
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
// | SSRC of media source |
|
||||
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
// | Unique identifier 'R' 'E' 'M' 'B' |
|
||||
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
// | Num SSRC | BR Exp | BR Mantissa |
|
||||
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
// | SSRC feedback |
|
||||
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
// | ... |
|
||||
|
||||
void CreateRemb(const RTCPPacketPSFBAPP& remb,
|
||||
const RTCPPacketPSFBREMBItem& remb_item,
|
||||
uint8_t* buffer,
|
||||
size_t* pos) {
|
||||
uint32_t mantissa = 0;
|
||||
uint8_t exp = 0;
|
||||
ComputeMantissaAnd6bitBase2Exponent(remb_item.BitRate, 18, &mantissa, &exp);
|
||||
|
||||
AssignUWord32(buffer, pos, remb.SenderSSRC);
|
||||
AssignUWord32(buffer, pos, kUnusedMediaSourceSsrc0);
|
||||
AssignUWord8(buffer, pos, 'R');
|
||||
AssignUWord8(buffer, pos, 'E');
|
||||
AssignUWord8(buffer, pos, 'M');
|
||||
AssignUWord8(buffer, pos, 'B');
|
||||
AssignUWord8(buffer, pos, remb_item.NumberOfSSRCs);
|
||||
AssignUWord8(buffer, pos, (exp << 2) + ((mantissa >> 16) & 0x03));
|
||||
AssignUWord8(buffer, pos, mantissa >> 8);
|
||||
AssignUWord8(buffer, pos, mantissa);
|
||||
for (uint8_t i = 0; i < remb_item.NumberOfSSRCs; ++i) {
|
||||
AssignUWord32(buffer, pos, remb_item.SSRCs[i]);
|
||||
}
|
||||
}
|
||||
|
||||
// From RFC 3611: RTP Control Protocol Extended Reports (RTCP XR).
|
||||
//
|
||||
// Format for XR packets:
|
||||
@ -513,28 +451,6 @@ bool Fir::Create(uint8_t* packet,
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Remb::Create(uint8_t* packet,
|
||||
size_t* index,
|
||||
size_t max_length,
|
||||
RtcpPacket::PacketReadyCallback* callback) const {
|
||||
while (*index + BlockLength() > max_length) {
|
||||
if (!OnBufferFull(packet, index, callback))
|
||||
return false;
|
||||
}
|
||||
const uint8_t kFmt = 15;
|
||||
CreateHeader(kFmt, PT_PSFB, HeaderLength(), packet, index);
|
||||
CreateRemb(remb_, remb_item_, packet, index);
|
||||
return true;
|
||||
}
|
||||
|
||||
void Remb::AppliesTo(uint32_t ssrc) {
|
||||
if (remb_item_.NumberOfSSRCs >= kMaxNumberOfSsrcs) {
|
||||
LOG(LS_WARNING) << "Max number of REMB feedback SSRCs reached.";
|
||||
return;
|
||||
}
|
||||
remb_item_.SSRCs[remb_item_.NumberOfSSRCs++] = ssrc;
|
||||
}
|
||||
|
||||
bool Xr::Create(uint8_t* packet,
|
||||
size_t* index,
|
||||
size_t max_length,
|
||||
|
||||
@ -353,62 +353,6 @@ class Fir : public RtcpPacket {
|
||||
RTCPUtility::RTCPPacketPSFBFIRItem fir_item_;
|
||||
};
|
||||
|
||||
// Receiver Estimated Max Bitrate (REMB) (draft-alvestrand-rmcat-remb).
|
||||
//
|
||||
// 0 1 2 3
|
||||
// 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
||||
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
// |V=2|P| FMT=15 | PT=206 | length |
|
||||
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
// | SSRC of packet sender |
|
||||
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
// | SSRC of media source |
|
||||
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
// | Unique identifier 'R' 'E' 'M' 'B' |
|
||||
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
// | Num SSRC | BR Exp | BR Mantissa |
|
||||
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
// | SSRC feedback |
|
||||
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
// | ...
|
||||
|
||||
class Remb : public RtcpPacket {
|
||||
public:
|
||||
Remb() : RtcpPacket() {
|
||||
memset(&remb_, 0, sizeof(remb_));
|
||||
memset(&remb_item_, 0, sizeof(remb_item_));
|
||||
}
|
||||
|
||||
virtual ~Remb() {}
|
||||
|
||||
void From(uint32_t ssrc) {
|
||||
remb_.SenderSSRC = ssrc;
|
||||
}
|
||||
void AppliesTo(uint32_t ssrc);
|
||||
|
||||
void WithBitrateBps(uint32_t bitrate_bps) {
|
||||
remb_item_.BitRate = bitrate_bps;
|
||||
}
|
||||
|
||||
protected:
|
||||
bool Create(uint8_t* packet,
|
||||
size_t* index,
|
||||
size_t max_length,
|
||||
RtcpPacket::PacketReadyCallback* callback) const override;
|
||||
|
||||
private:
|
||||
static const int kMaxNumberOfSsrcs = 0xff;
|
||||
|
||||
size_t BlockLength() const {
|
||||
return (remb_item_.NumberOfSSRCs + 5) * 4;
|
||||
}
|
||||
|
||||
RTCPUtility::RTCPPacketPSFBAPP remb_;
|
||||
RTCPUtility::RTCPPacketPSFBREMBItem remb_item_;
|
||||
|
||||
RTC_DISALLOW_COPY_AND_ASSIGN(Remb);
|
||||
};
|
||||
|
||||
// From RFC 3611: RTP Control Protocol Extended Reports (RTCP XR).
|
||||
//
|
||||
// Format for XR packets:
|
||||
|
||||
117
webrtc/modules/rtp_rtcp/source/rtcp_packet/remb.cc
Normal file
117
webrtc/modules/rtp_rtcp/source/rtcp_packet/remb.cc
Normal file
@ -0,0 +1,117 @@
|
||||
/*
|
||||
* Copyright (c) 2016 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/modules/rtp_rtcp/source/rtcp_packet/remb.h"
|
||||
|
||||
#include "webrtc/base/logging.h"
|
||||
#include "webrtc/modules/rtp_rtcp/source/byte_io.h"
|
||||
|
||||
using webrtc::RTCPUtility::PT_PSFB;
|
||||
using webrtc::RTCPUtility::RTCPPacketPSFBAPP;
|
||||
using webrtc::RTCPUtility::RTCPPacketPSFBREMBItem;
|
||||
|
||||
namespace webrtc {
|
||||
namespace rtcp {
|
||||
namespace {
|
||||
const uint32_t kUnusedMediaSourceSsrc0 = 0;
|
||||
|
||||
void AssignUWord8(uint8_t* buffer, size_t* offset, uint8_t value) {
|
||||
buffer[(*offset)++] = value;
|
||||
}
|
||||
|
||||
void AssignUWord32(uint8_t* buffer, size_t* offset, uint32_t value) {
|
||||
ByteWriter<uint32_t>::WriteBigEndian(buffer + *offset, value);
|
||||
*offset += 4;
|
||||
}
|
||||
|
||||
void ComputeMantissaAnd6bitBase2Exponent(uint32_t input_base10,
|
||||
uint8_t bits_mantissa,
|
||||
uint32_t* mantissa,
|
||||
uint8_t* exp) {
|
||||
// input_base10 = mantissa * 2^exp
|
||||
assert(bits_mantissa <= 32);
|
||||
uint32_t mantissa_max = (1 << bits_mantissa) - 1;
|
||||
uint8_t exponent = 0;
|
||||
for (uint32_t i = 0; i < 64; ++i) {
|
||||
if (input_base10 <= (mantissa_max << i)) {
|
||||
exponent = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
*exp = exponent;
|
||||
*mantissa = (input_base10 >> exponent);
|
||||
}
|
||||
|
||||
// Receiver Estimated Max Bitrate (REMB) (draft-alvestrand-rmcat-remb).
|
||||
//
|
||||
// 0 1 2 3
|
||||
// 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
||||
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
// |V=2|P| FMT=15 | PT=206 | length |
|
||||
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
// | SSRC of packet sender |
|
||||
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
// | SSRC of media source |
|
||||
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
// | Unique identifier 'R' 'E' 'M' 'B' |
|
||||
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
// | Num SSRC | BR Exp | BR Mantissa |
|
||||
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
// | SSRC feedback |
|
||||
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
// | ... |
|
||||
void CreateRemb(const RTCPPacketPSFBAPP& remb,
|
||||
const RTCPPacketPSFBREMBItem& remb_item,
|
||||
uint8_t* buffer,
|
||||
size_t* pos) {
|
||||
uint32_t mantissa = 0;
|
||||
uint8_t exp = 0;
|
||||
ComputeMantissaAnd6bitBase2Exponent(remb_item.BitRate, 18, &mantissa, &exp);
|
||||
|
||||
AssignUWord32(buffer, pos, remb.SenderSSRC);
|
||||
AssignUWord32(buffer, pos, kUnusedMediaSourceSsrc0);
|
||||
AssignUWord8(buffer, pos, 'R');
|
||||
AssignUWord8(buffer, pos, 'E');
|
||||
AssignUWord8(buffer, pos, 'M');
|
||||
AssignUWord8(buffer, pos, 'B');
|
||||
AssignUWord8(buffer, pos, remb_item.NumberOfSSRCs);
|
||||
AssignUWord8(buffer, pos, (exp << 2) + ((mantissa >> 16) & 0x03));
|
||||
AssignUWord8(buffer, pos, mantissa >> 8);
|
||||
AssignUWord8(buffer, pos, mantissa);
|
||||
for (uint8_t i = 0; i < remb_item.NumberOfSSRCs; ++i) {
|
||||
AssignUWord32(buffer, pos, remb_item.SSRCs[i]);
|
||||
}
|
||||
}
|
||||
} // namespace
|
||||
|
||||
bool Remb::Create(uint8_t* packet,
|
||||
size_t* index,
|
||||
size_t max_length,
|
||||
RtcpPacket::PacketReadyCallback* callback) const {
|
||||
while (*index + BlockLength() > max_length) {
|
||||
if (!OnBufferFull(packet, index, callback))
|
||||
return false;
|
||||
}
|
||||
const uint8_t kFmt = 15;
|
||||
CreateHeader(kFmt, PT_PSFB, HeaderLength(), packet, index);
|
||||
CreateRemb(remb_, remb_item_, packet, index);
|
||||
return true;
|
||||
}
|
||||
|
||||
void Remb::AppliesTo(uint32_t ssrc) {
|
||||
if (remb_item_.NumberOfSSRCs >= kMaxNumberOfSsrcs) {
|
||||
LOG(LS_WARNING) << "Max number of REMB feedback SSRCs reached.";
|
||||
return;
|
||||
}
|
||||
remb_item_.SSRCs[remb_item_.NumberOfSSRCs++] = ssrc;
|
||||
}
|
||||
|
||||
} // namespace rtcp
|
||||
} // namespace webrtc
|
||||
60
webrtc/modules/rtp_rtcp/source/rtcp_packet/remb.h
Normal file
60
webrtc/modules/rtp_rtcp/source/rtcp_packet/remb.h
Normal file
@ -0,0 +1,60 @@
|
||||
/*
|
||||
* Copyright (c) 2016 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.
|
||||
*/
|
||||
|
||||
#ifndef WEBRTC_MODULES_RTP_RTCP_SOURCE_RTCP_PACKET_REMB_H_
|
||||
#define WEBRTC_MODULES_RTP_RTCP_SOURCE_RTCP_PACKET_REMB_H_
|
||||
|
||||
#include <vector>
|
||||
#include "webrtc/base/basictypes.h"
|
||||
#include "webrtc/modules/rtp_rtcp/source/rtcp_packet.h"
|
||||
#include "webrtc/modules/rtp_rtcp/source/rtcp_utility.h"
|
||||
|
||||
namespace webrtc {
|
||||
namespace rtcp {
|
||||
// Receiver Estimated Max Bitrate (REMB) (draft-alvestrand-rmcat-remb).
|
||||
class Remb : public RtcpPacket {
|
||||
public:
|
||||
Remb() : RtcpPacket() {
|
||||
memset(&remb_, 0, sizeof(remb_));
|
||||
memset(&remb_item_, 0, sizeof(remb_item_));
|
||||
}
|
||||
|
||||
virtual ~Remb() {}
|
||||
|
||||
void From(uint32_t ssrc) {
|
||||
remb_.SenderSSRC = ssrc;
|
||||
}
|
||||
void AppliesTo(uint32_t ssrc);
|
||||
|
||||
void WithBitrateBps(uint32_t bitrate_bps) {
|
||||
remb_item_.BitRate = bitrate_bps;
|
||||
}
|
||||
|
||||
protected:
|
||||
bool Create(uint8_t* packet,
|
||||
size_t* index,
|
||||
size_t max_length,
|
||||
RtcpPacket::PacketReadyCallback* callback) const override;
|
||||
|
||||
private:
|
||||
static const int kMaxNumberOfSsrcs = 0xff;
|
||||
|
||||
size_t BlockLength() const {
|
||||
return (remb_item_.NumberOfSSRCs + 5) * 4;
|
||||
}
|
||||
|
||||
RTCPUtility::RTCPPacketPSFBAPP remb_;
|
||||
RTCPUtility::RTCPPacketPSFBREMBItem remb_item_;
|
||||
|
||||
RTC_DISALLOW_COPY_AND_ASSIGN(Remb);
|
||||
};
|
||||
} // namespace rtcp
|
||||
} // namespace webrtc
|
||||
#endif // WEBRTC_MODULES_RTP_RTCP_SOURCE_RTCP_PACKET_REMB_H_
|
||||
46
webrtc/modules/rtp_rtcp/source/rtcp_packet/remb_unittest.cc
Normal file
46
webrtc/modules/rtp_rtcp/source/rtcp_packet/remb_unittest.cc
Normal file
@ -0,0 +1,46 @@
|
||||
/*
|
||||
* Copyright (c) 2016 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/modules/rtp_rtcp/source/rtcp_packet/remb.h"
|
||||
|
||||
#include "testing/gmock/include/gmock/gmock.h"
|
||||
#include "testing/gtest/include/gtest/gtest.h"
|
||||
#include "webrtc/test/rtcp_packet_parser.h"
|
||||
|
||||
using webrtc::rtcp::RawPacket;
|
||||
using webrtc::rtcp::Remb;
|
||||
using webrtc::test::RtcpPacketParser;
|
||||
|
||||
namespace webrtc {
|
||||
|
||||
const uint32_t kSenderSsrc = 0x12345678;
|
||||
const uint32_t kRemoteSsrc = 0x23456789;
|
||||
|
||||
TEST(RtcpPacketRembTest, Remb) {
|
||||
Remb remb;
|
||||
remb.From(kSenderSsrc);
|
||||
remb.AppliesTo(kRemoteSsrc);
|
||||
remb.AppliesTo(kRemoteSsrc + 1);
|
||||
remb.AppliesTo(kRemoteSsrc + 2);
|
||||
remb.WithBitrateBps(261011);
|
||||
|
||||
rtc::scoped_ptr<RawPacket> packet(remb.Build());
|
||||
RtcpPacketParser parser;
|
||||
parser.Parse(packet->Buffer(), packet->Length());
|
||||
EXPECT_EQ(1, parser.psfb_app()->num_packets());
|
||||
EXPECT_EQ(kSenderSsrc, parser.psfb_app()->Ssrc());
|
||||
EXPECT_EQ(1, parser.remb_item()->num_packets());
|
||||
EXPECT_EQ(261011, parser.remb_item()->last_bitrate_bps());
|
||||
std::vector<uint32_t> ssrcs = parser.remb_item()->last_ssrc_list();
|
||||
EXPECT_EQ(kRemoteSsrc, ssrcs[0]);
|
||||
EXPECT_EQ(kRemoteSsrc + 1, ssrcs[1]);
|
||||
EXPECT_EQ(kRemoteSsrc + 2, ssrcs[2]);
|
||||
}
|
||||
} // namespace webrtc
|
||||
@ -27,7 +27,6 @@ using webrtc::rtcp::Dlrr;
|
||||
using webrtc::rtcp::Fir;
|
||||
using webrtc::rtcp::RawPacket;
|
||||
using webrtc::rtcp::ReceiverReport;
|
||||
using webrtc::rtcp::Remb;
|
||||
using webrtc::rtcp::ReportBlock;
|
||||
using webrtc::rtcp::Rpsi;
|
||||
using webrtc::rtcp::Rrtr;
|
||||
@ -324,26 +323,6 @@ TEST(RtcpPacketTest, BuildWithTooSmallBuffer) {
|
||||
EXPECT_FALSE(rr.BuildExternalBuffer(buffer, kBufferSize, &verifier));
|
||||
}
|
||||
|
||||
TEST(RtcpPacketTest, Remb) {
|
||||
Remb remb;
|
||||
remb.From(kSenderSsrc);
|
||||
remb.AppliesTo(kRemoteSsrc);
|
||||
remb.AppliesTo(kRemoteSsrc + 1);
|
||||
remb.AppliesTo(kRemoteSsrc + 2);
|
||||
remb.WithBitrateBps(261011);
|
||||
|
||||
rtc::scoped_ptr<RawPacket> packet(remb.Build());
|
||||
RtcpPacketParser parser;
|
||||
parser.Parse(packet->Buffer(), packet->Length());
|
||||
EXPECT_EQ(1, parser.psfb_app()->num_packets());
|
||||
EXPECT_EQ(kSenderSsrc, parser.psfb_app()->Ssrc());
|
||||
EXPECT_EQ(1, parser.remb_item()->num_packets());
|
||||
EXPECT_EQ(261011, parser.remb_item()->last_bitrate_bps());
|
||||
std::vector<uint32_t> ssrcs = parser.remb_item()->last_ssrc_list();
|
||||
EXPECT_EQ(kRemoteSsrc, ssrcs[0]);
|
||||
EXPECT_EQ(kRemoteSsrc + 1, ssrcs[1]);
|
||||
EXPECT_EQ(kRemoteSsrc + 2, ssrcs[2]);
|
||||
}
|
||||
|
||||
TEST(RtcpPacketTest, XrWithNoReportBlocks) {
|
||||
Xr xr;
|
||||
|
||||
@ -25,6 +25,7 @@
|
||||
#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_jitter_report.h"
|
||||
#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/pli.h"
|
||||
#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/receiver_report.h"
|
||||
#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/remb.h"
|
||||
#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/sli.h"
|
||||
#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/tmmbr.h"
|
||||
#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.h"
|
||||
|
||||
@ -28,6 +28,7 @@
|
||||
#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/nack.h"
|
||||
#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/pli.h"
|
||||
#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/receiver_report.h"
|
||||
#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/remb.h"
|
||||
#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/sli.h"
|
||||
#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/tmmbn.h"
|
||||
#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/tmmbr.h"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user