Add RequestKeyFrame with Fir to RtcpTransceiver

Bug: webrtc:8239
Change-Id: If094d434a7be20cdff5c80447322d68a4a7a4580
Reviewed-on: https://webrtc-review.googlesource.com/22961
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Reviewed-by: Niels Moller <nisse@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20833}
This commit is contained in:
Danil Chapovalov
2017-11-22 14:00:41 +01:00
committed by Commit Bot
parent 65c392265f
commit 2ddf98d894
5 changed files with 145 additions and 42 deletions

View File

@ -23,6 +23,7 @@
#include "modules/rtp_rtcp/source/rtcp_packet/report_block.h"
#include "modules/rtp_rtcp/source/rtcp_transceiver_config.h"
#include "rtc_base/constructormagic.h"
#include "rtc_base/function_view.h"
#include "rtc_base/weak_ptr.h"
#include "system_wrappers/include/ntp_time.h"
@ -36,26 +37,19 @@ class RtcpTransceiverImpl {
explicit RtcpTransceiverImpl(const RtcpTransceiverConfig& config);
~RtcpTransceiverImpl();
// Handles incoming rtcp packets.
void ReceivePacket(rtc::ArrayView<const uint8_t> packet, int64_t now_us);
// Sends RTCP packets starting with a sender or receiver report.
void SendCompoundPacket();
// (REMB) Receiver Estimated Max Bitrate.
// Includes REMB in following compound packets.
void SetRemb(int bitrate_bps, std::vector<uint32_t> ssrcs);
// Stops sending REMB in following compound packets.
void UnsetRemb();
void RequestKeyFrame(rtc::ArrayView<const uint32_t> ssrcs);
void SendPictureLossIndication(rtc::ArrayView<const uint32_t> ssrcs);
void SendFullIntraRequest(rtc::ArrayView<const uint32_t> ssrcs);
private:
class PacketSender;
struct SenderReportTimes {
int64_t local_received_time_us;
NtpTime remote_sent_time;
};
struct RemoteSenderState;
void HandleReceivedPacket(const rtcp::CommonHeader& rtcp_packet_header,
int64_t now_us);
@ -67,13 +61,15 @@ class RtcpTransceiverImpl {
void CreateCompoundPacket(PacketSender* sender);
// Sends RTCP packets.
void SendPeriodicCompoundPacket();
void SendImmediateFeedback(
rtc::FunctionView<void(PacketSender*)> append_feedback);
// Generate Report Blocks to be send in Sender or Receiver Report.
std::vector<rtcp::ReportBlock> CreateReportBlocks();
const RtcpTransceiverConfig config_;
rtc::Optional<rtcp::Remb> remb_;
std::map<uint32_t, SenderReportTimes> last_received_sender_reports_;
std::map<uint32_t, RemoteSenderState> remote_senders_;
rtc::WeakPtrFactory<RtcpTransceiverImpl> ptr_factory_;
RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(RtcpTransceiverImpl);