Add sending sdes to RtcpTransceiver.
Bug: webrtc:8239 Change-Id: Icff1528e177e0bb39dd82bd4f8533e1ed2736c40 Reviewed-on: https://webrtc-review.googlesource.com/15540 Reviewed-by: Niels Moller <nisse@webrtc.org> Reviewed-by: Erik Språng <sprang@webrtc.org> Commit-Queue: Danil Chapovalov <danilchap@webrtc.org> Cr-Commit-Position: refs/heads/master@{#20447}
This commit is contained in:

committed by
Commit Bot

parent
4556f3c3f4
commit
78161ca59d
@ -27,6 +27,8 @@ bool RtcpTransceiverConfig::Validate() const {
|
||||
LOG(LS_WARNING)
|
||||
<< debug_id
|
||||
<< "Ssrc 0 may be treated by some implementation as invalid.";
|
||||
if (cname.empty())
|
||||
LOG(LS_WARNING) << debug_id << "missing cname for ssrc " << feedback_ssrc;
|
||||
if (cname.size() > 255) {
|
||||
LOG(LS_ERROR) << debug_id << "cname can be maximum 255 characters.";
|
||||
return false;
|
||||
|
@ -33,7 +33,8 @@ struct RtcpTransceiverConfig {
|
||||
// Ssrc to use as default sender ssrc, e.g. for transport-wide feedbacks.
|
||||
uint32_t feedback_ssrc = 1;
|
||||
|
||||
// Cname of the local particiapnt.
|
||||
// Canonical End-Point Identifier of the local particiapnt.
|
||||
// Defined in rfc3550 section 6 note 2 and section 6.5.1.
|
||||
std::string cname;
|
||||
|
||||
// Maximum packet size outgoing transport accepts.
|
||||
|
@ -19,6 +19,7 @@
|
||||
#include "modules/rtp_rtcp/source/rtcp_packet.h"
|
||||
#include "modules/rtp_rtcp/source/rtcp_packet/receiver_report.h"
|
||||
#include "modules/rtp_rtcp/source/rtcp_packet/report_block.h"
|
||||
#include "modules/rtp_rtcp/source/rtcp_packet/sdes.h"
|
||||
#include "rtc_base/checks.h"
|
||||
|
||||
namespace webrtc {
|
||||
@ -87,8 +88,13 @@ void RtcpTransceiverImpl::SendCompoundPacket() {
|
||||
rr.SetReportBlocks(std::move(report_blocks));
|
||||
}
|
||||
sender.AppendPacket(rr);
|
||||
// TODO(danilchap): Append SDES to conform to the requirements on minimal
|
||||
// compound RTCP packet.
|
||||
if (!config_.cname.empty()) {
|
||||
rtcp::Sdes sdes;
|
||||
bool added = sdes.AddCName(config_.feedback_ssrc, config_.cname);
|
||||
RTC_DCHECK(added) << "Failed to add cname " << config_.cname
|
||||
<< " to rtcp sdes packet.";
|
||||
sender.AppendPacket(sdes);
|
||||
}
|
||||
|
||||
sender.Send();
|
||||
}
|
||||
|
@ -36,19 +36,28 @@ class MockReceiveStatisticsProvider : public webrtc::ReceiveStatisticsProvider {
|
||||
MOCK_METHOD1(RtcpReportBlocks, std::vector<ReportBlock>(size_t));
|
||||
};
|
||||
|
||||
TEST(RtcpTransceiverImplTest, ForceSendReportEmitsRtcpPacket) {
|
||||
TEST(RtcpTransceiverImplTest, SendsMinimalCompoundPacket) {
|
||||
const uint32_t kSenderSsrc = 12345;
|
||||
MockTransport outgoing_transport;
|
||||
RtcpPacketParser rtcp_parser;
|
||||
EXPECT_CALL(outgoing_transport, SendRtcp(_, _))
|
||||
.WillOnce(Invoke(&rtcp_parser, &RtcpPacketParser::Parse));
|
||||
|
||||
RtcpTransceiverConfig config;
|
||||
config.feedback_ssrc = kSenderSsrc;
|
||||
config.cname = "cname";
|
||||
config.outgoing_transport = &outgoing_transport;
|
||||
RtcpTransceiverImpl rtcp_transceiver(config);
|
||||
|
||||
ASSERT_EQ(rtcp_parser.receiver_report()->num_packets(), 0);
|
||||
RtcpPacketParser rtcp_parser;
|
||||
EXPECT_CALL(outgoing_transport, SendRtcp(_, _))
|
||||
.WillOnce(Invoke(&rtcp_parser, &RtcpPacketParser::Parse));
|
||||
rtcp_transceiver.SendCompoundPacket();
|
||||
EXPECT_GT(rtcp_parser.receiver_report()->num_packets(), 0);
|
||||
|
||||
// Minimal compound RTCP packet contains sender or receiver report and sdes
|
||||
// with cname.
|
||||
ASSERT_GT(rtcp_parser.receiver_report()->num_packets(), 0);
|
||||
EXPECT_EQ(rtcp_parser.receiver_report()->sender_ssrc(), kSenderSsrc);
|
||||
ASSERT_GT(rtcp_parser.sdes()->num_packets(), 0);
|
||||
ASSERT_EQ(rtcp_parser.sdes()->chunks().size(), 1u);
|
||||
EXPECT_EQ(rtcp_parser.sdes()->chunks()[0].ssrc, kSenderSsrc);
|
||||
EXPECT_EQ(rtcp_parser.sdes()->chunks()[0].cname, config.cname);
|
||||
}
|
||||
|
||||
TEST(RtcpTransceiverImplTest, ReceiverReportUsesReceiveStatistics) {
|
||||
|
Reference in New Issue
Block a user