1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef MEDIA_CAST_RTCP_RTCP_RECEIVER_H_
6 #define MEDIA_CAST_RTCP_RTCP_RECEIVER_H_
8 #include "media/cast/rtcp/rtcp.h"
9 #include "media/cast/rtcp/rtcp_defines.h"
10 #include "media/cast/rtcp/rtcp_utility.h"
11 #include "media/cast/transport/cast_transport_defines.h"
16 class RtcpReceiverFeedback {
18 virtual void OnReceivedSenderReport(
19 const transport::RtcpSenderInfo& remote_sender_info) = 0;
21 virtual void OnReceiverReferenceTimeReport(
22 const RtcpReceiverReferenceTimeReport& remote_time_report) = 0;
24 virtual void OnReceivedSendReportRequest() = 0;
26 virtual void OnReceivedReceiverLog(
27 const RtcpReceiverLogMessage& receiver_log) = 0;
29 virtual void OnReceivedSenderLog(
30 const transport::RtcpSenderLogMessage& sender_log) = 0;
32 virtual ~RtcpReceiverFeedback() {}
35 class RtcpRttFeedback {
37 virtual void OnReceivedDelaySinceLastReport(
38 uint32 receivers_ssrc,
40 uint32 delay_since_last_report) = 0;
42 virtual ~RtcpRttFeedback() {}
47 explicit RtcpReceiver(scoped_refptr<CastEnvironment> cast_environment,
48 RtcpSenderFeedback* sender_feedback,
49 RtcpReceiverFeedback* receiver_feedback,
50 RtcpRttFeedback* rtt_feedback,
52 virtual ~RtcpReceiver();
54 void SetRemoteSSRC(uint32 ssrc);
56 void IncomingRtcpPacket(RtcpParser* rtcp_parser);
59 void HandleSenderReport(RtcpParser* rtcp_parser);
61 void HandleReceiverReport(RtcpParser* rtcp_parser);
63 void HandleReportBlock(const RtcpField* rtcp_field,
66 void HandleSDES(RtcpParser* rtcp_parser);
67 void HandleSDESChunk(RtcpParser* rtcp_parser);
69 void HandleBYE(RtcpParser* rtcp_parser);
71 void HandleXr(RtcpParser* rtcp_parser);
72 void HandleRrtr(RtcpParser* rtcp_parser, uint32 remote_ssrc);
73 void HandleDlrr(RtcpParser* rtcp_parser);
75 // Generic RTP Feedback.
76 void HandleNACK(RtcpParser* rtcp_parser);
77 void HandleNACKItem(const RtcpField* rtcp_field,
78 std::list<uint16>* nack_sequence_numbers);
80 void HandleSendReportRequest(RtcpParser* rtcp_parser);
83 void HandlePLI(RtcpParser* rtcp_parser);
85 void HandleSLI(RtcpParser* rtcp_parser);
86 void HandleSLIItem(RtcpField* rtcpPacket);
88 void HandleRpsi(RtcpParser* rtcp_parser);
90 void HandleFIR(RtcpParser* rtcp_parser);
91 void HandleFIRItem(const RtcpField* rtcp_field);
93 void HandlePayloadSpecificApp(RtcpParser* rtcp_parser);
94 void HandlePayloadSpecificRembItem(RtcpParser* rtcp_parser);
95 void HandlePayloadSpecificCastItem(RtcpParser* rtcp_parser);
96 void HandlePayloadSpecificCastNackItem(
97 const RtcpField* rtcp_field,
98 MissingFramesAndPacketsMap* missing_frames_and_packets);
100 void HandleApplicationSpecificCastReceiverLog(RtcpParser* rtcp_parser);
101 void HandleApplicationSpecificCastSenderLog(RtcpParser* rtcp_parser);
102 void HandleApplicationSpecificCastReceiverEventLog(
103 RtcpParser* rtcp_parser,
104 RtcpReceiverEventLogMessages* event_log_messages);
109 // Not owned by this class.
110 RtcpSenderFeedback* const sender_feedback_;
111 RtcpReceiverFeedback* const receiver_feedback_;
112 RtcpRttFeedback* const rtt_feedback_;
113 scoped_refptr<CastEnvironment> cast_environment_;
115 transport::FrameIdWrapHelper ack_frame_id_wrap_helper_;
117 DISALLOW_COPY_AND_ASSIGN(RtcpReceiver);
123 #endif // MEDIA_CAST_RTCP_RTCP_RECEIVER_H_