• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 #ifndef CALL_FLEXFEC_RECEIVE_STREAM_H_
12 #define CALL_FLEXFEC_RECEIVE_STREAM_H_
13 
14 #include <stdint.h>
15 
16 #include <string>
17 #include <vector>
18 
19 #include "api/call/transport.h"
20 #include "api/rtp_headers.h"
21 #include "api/rtp_parameters.h"
22 #include "call/rtp_packet_sink_interface.h"
23 
24 namespace webrtc {
25 
26 class FlexfecReceiveStream : public RtpPacketSinkInterface {
27  public:
28   ~FlexfecReceiveStream() override = default;
29 
30   struct Stats {
31     std::string ToString(int64_t time_ms) const;
32 
33     // TODO(brandtr): Add appropriate stats here.
34     int flexfec_bitrate_bps;
35   };
36 
37   struct Config {
38     explicit Config(Transport* rtcp_send_transport);
39     Config(const Config&);
40     ~Config();
41 
42     std::string ToString() const;
43 
44     // Returns true if all RTP information is available in order to
45     // enable receiving FlexFEC.
46     bool IsCompleteAndEnabled() const;
47 
48     // Payload type for FlexFEC.
49     int payload_type = -1;
50 
51     // SSRC for FlexFEC stream to be received.
52     uint32_t remote_ssrc = 0;
53 
54     // Vector containing a single element, corresponding to the SSRC of the
55     // media stream being protected by this FlexFEC stream. The vector MUST have
56     // size 1.
57     //
58     // TODO(brandtr): Update comment above when we support multistream
59     // protection.
60     std::vector<uint32_t> protected_media_ssrcs;
61 
62     // SSRC for RTCP reports to be sent.
63     uint32_t local_ssrc = 0;
64 
65     // What RTCP mode to use in the reports.
66     RtcpMode rtcp_mode = RtcpMode::kCompound;
67 
68     // Transport for outgoing RTCP packets.
69     Transport* rtcp_send_transport = nullptr;
70 
71     // |transport_cc| is true whenever the send-side BWE RTCP feedback message
72     // has been negotiated. This is a prerequisite for enabling send-side BWE.
73     bool transport_cc = false;
74 
75     // RTP header extensions that have been negotiated for this track.
76     std::vector<RtpExtension> rtp_header_extensions;
77   };
78 
79   virtual Stats GetStats() const = 0;
80 
81   virtual const Config& GetConfig() const = 0;
82 };
83 
84 }  // namespace webrtc
85 
86 #endif  // CALL_FLEXFEC_RECEIVE_STREAM_H_
87