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)
|
LOG(LS_WARNING)
|
||||||
<< debug_id
|
<< debug_id
|
||||||
<< "Ssrc 0 may be treated by some implementation as invalid.";
|
<< "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) {
|
if (cname.size() > 255) {
|
||||||
LOG(LS_ERROR) << debug_id << "cname can be maximum 255 characters.";
|
LOG(LS_ERROR) << debug_id << "cname can be maximum 255 characters.";
|
||||||
return false;
|
return false;
|
||||||
|
@ -33,7 +33,8 @@ struct RtcpTransceiverConfig {
|
|||||||
// Ssrc to use as default sender ssrc, e.g. for transport-wide feedbacks.
|
// Ssrc to use as default sender ssrc, e.g. for transport-wide feedbacks.
|
||||||
uint32_t feedback_ssrc = 1;
|
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;
|
std::string cname;
|
||||||
|
|
||||||
// Maximum packet size outgoing transport accepts.
|
// 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.h"
|
||||||
#include "modules/rtp_rtcp/source/rtcp_packet/receiver_report.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/report_block.h"
|
||||||
|
#include "modules/rtp_rtcp/source/rtcp_packet/sdes.h"
|
||||||
#include "rtc_base/checks.h"
|
#include "rtc_base/checks.h"
|
||||||
|
|
||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
@ -87,8 +88,13 @@ void RtcpTransceiverImpl::SendCompoundPacket() {
|
|||||||
rr.SetReportBlocks(std::move(report_blocks));
|
rr.SetReportBlocks(std::move(report_blocks));
|
||||||
}
|
}
|
||||||
sender.AppendPacket(rr);
|
sender.AppendPacket(rr);
|
||||||
// TODO(danilchap): Append SDES to conform to the requirements on minimal
|
if (!config_.cname.empty()) {
|
||||||
// compound RTCP packet.
|
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();
|
sender.Send();
|
||||||
}
|
}
|
||||||
|
@ -36,19 +36,28 @@ class MockReceiveStatisticsProvider : public webrtc::ReceiveStatisticsProvider {
|
|||||||
MOCK_METHOD1(RtcpReportBlocks, std::vector<ReportBlock>(size_t));
|
MOCK_METHOD1(RtcpReportBlocks, std::vector<ReportBlock>(size_t));
|
||||||
};
|
};
|
||||||
|
|
||||||
TEST(RtcpTransceiverImplTest, ForceSendReportEmitsRtcpPacket) {
|
TEST(RtcpTransceiverImplTest, SendsMinimalCompoundPacket) {
|
||||||
|
const uint32_t kSenderSsrc = 12345;
|
||||||
MockTransport outgoing_transport;
|
MockTransport outgoing_transport;
|
||||||
RtcpPacketParser rtcp_parser;
|
|
||||||
EXPECT_CALL(outgoing_transport, SendRtcp(_, _))
|
|
||||||
.WillOnce(Invoke(&rtcp_parser, &RtcpPacketParser::Parse));
|
|
||||||
|
|
||||||
RtcpTransceiverConfig config;
|
RtcpTransceiverConfig config;
|
||||||
|
config.feedback_ssrc = kSenderSsrc;
|
||||||
|
config.cname = "cname";
|
||||||
config.outgoing_transport = &outgoing_transport;
|
config.outgoing_transport = &outgoing_transport;
|
||||||
RtcpTransceiverImpl rtcp_transceiver(config);
|
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();
|
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) {
|
TEST(RtcpTransceiverImplTest, ReceiverReportUsesReceiveStatistics) {
|
||||||
|
Reference in New Issue
Block a user