blob: 75c007da1809a226a1e0ae15e8735935f4d18c0b [file] [log] [blame]
/*
* Copyright (c) 2017 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 MODULES_RTP_RTCP_SOURCE_RTCP_TRANSCEIVER_CONFIG_H_
#define MODULES_RTP_RTCP_SOURCE_RTCP_TRANSCEIVER_CONFIG_H_
#include <string>
#include "common_types.h" // NOLINT(build/include)
#include "modules/rtp_rtcp/include/rtp_rtcp_defines.h"
#include "rtc_base/task_queue.h"
namespace webrtc {
class ReceiveStatisticsProvider;
class Transport;
// Interface to watch incoming rtcp packets by media (rtp) receiver.
class MediaReceiverRtcpObserver {
public:
virtual ~MediaReceiverRtcpObserver() = default;
// All message handlers have default empty implementation. This way user needs
// to implement only those she is interested in.
virtual void OnSenderReport(uint32_t sender_ssrc,
NtpTime ntp_time,
uint32_t rtp_time) {}
virtual void OnBye(uint32_t sender_ssrc) {}
virtual void OnBitrateAllocation(uint32_t sender_ssrc,
const BitrateAllocation& allocation) {}
};
struct RtcpTransceiverConfig {
RtcpTransceiverConfig();
RtcpTransceiverConfig(const RtcpTransceiverConfig&);
RtcpTransceiverConfig& operator=(const RtcpTransceiverConfig&);
~RtcpTransceiverConfig();
// Logs the error and returns false if configuration miss key objects or
// is inconsistant. May log warnings.
bool Validate() const;
// Used to prepend all log messages. Can be empty.
std::string debug_id;
// Ssrc to use as default sender ssrc, e.g. for transport-wide feedbacks.
uint32_t feedback_ssrc = 1;
// 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.
size_t max_packet_size = 1200;
// Transport to send rtcp packets to. Should be set.
Transport* outgoing_transport = nullptr;
// Queue for scheduling delayed tasks, e.g. sending periodic compound packets.
rtc::TaskQueue* task_queue = nullptr;
// Rtcp report block generator for outgoing receiver reports.
ReceiveStatisticsProvider* receive_statistics = nullptr;
// Callback to pass result of rtt calculation. Should outlive RtcpTransceiver.
// Callbacks will be invoked on the task_queue.
RtcpRttStats* rtt_observer = nullptr;
// Configures if sending should
// enforce compound packets: https://tools.ietf.org/html/rfc4585#section-3.1
// or allow reduced size packets: https://tools.ietf.org/html/rfc5506
// Receiving accepts both compound and reduced-size packets.
RtcpMode rtcp_mode = RtcpMode::kCompound;
//
// Tuning parameters.
//
// Initial state if |outgoing_transport| ready to accept packets.
bool initial_ready_to_send = true;
// Delay before 1st periodic compound packet.
int initial_report_delay_ms = 500;
// Period between periodic compound packets.
int report_period_ms = 1000;
//
// Flags for features and experiments.
//
bool schedule_periodic_compound_packets = true;
// Estimate RTT as non-sender as described in
// https://tools.ietf.org/html/rfc3611#section-4.4 and #section-4.5
bool non_sender_rtt_measurement = false;
// Copies LastSR/DelaySinceLastSR for previous report block to avoid
// triggering bug in older version of RtcpReceiver.
// TODO(bugs.webrtc.org/8805): Change to false by default then remove when
// all major webrtc clients updated with the fix in RtcpReceiver.
bool avoid_zero_last_sr_in_last_report_block = true;
};
} // namespace webrtc
#endif // MODULES_RTP_RTCP_SOURCE_RTCP_TRANSCEIVER_CONFIG_H_