OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 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 | 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 | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
11 #ifndef WEBRTC_CALL_FLEXFEC_RECEIVE_STREAM_H_ | 11 #ifndef WEBRTC_CALL_FLEXFEC_RECEIVE_STREAM_H_ |
12 #define WEBRTC_CALL_FLEXFEC_RECEIVE_STREAM_H_ | 12 #define WEBRTC_CALL_FLEXFEC_RECEIVE_STREAM_H_ |
13 | 13 |
14 #include <memory> | |
15 #include <string> | 14 #include <string> |
| 15 #include <vector> |
16 | 16 |
17 #include "webrtc/api/call/flexfec_receive_stream.h" | 17 #include "webrtc/api/call/transport.h" |
18 #include "webrtc/base/basictypes.h" | 18 #include "webrtc/config.h" |
19 #include "webrtc/base/criticalsection.h" | |
20 #include "webrtc/modules/rtp_rtcp/include/flexfec_receiver.h" | |
21 | 19 |
22 namespace webrtc { | 20 namespace webrtc { |
23 | 21 |
24 namespace internal { | 22 class FlexfecReceiveStream { |
| 23 public: |
| 24 struct Stats { |
| 25 std::string ToString(int64_t time_ms) const; |
25 | 26 |
26 class FlexfecReceiveStream : public webrtc::FlexfecReceiveStream { | 27 // TODO(brandtr): Add appropriate stats here. |
27 public: | 28 int flexfec_bitrate_bps; |
28 FlexfecReceiveStream(const Config& config, | 29 }; |
29 RecoveredPacketReceiver* recovered_packet_callback); | |
30 ~FlexfecReceiveStream(); | |
31 | 30 |
32 bool AddAndProcessReceivedPacket(const uint8_t* packet, size_t length); | 31 struct Config { |
| 32 std::string ToString() const; |
33 | 33 |
34 // Implements webrtc::FlexfecReceiveStream. | 34 // Payload type for FlexFEC. |
35 void Start() override; | 35 int payload_type = -1; |
36 void Stop() override; | |
37 Stats GetStats() const override; | |
38 | 36 |
39 private: | 37 // SSRC for FlexFEC stream to be received. |
40 rtc::CriticalSection crit_; | 38 uint32_t remote_ssrc = 0; |
41 bool started_ GUARDED_BY(crit_); | |
42 | 39 |
43 const Config config_; | 40 // Vector containing a single element, corresponding to the SSRC of the |
44 const std::unique_ptr<FlexfecReceiver> receiver_; | 41 // media stream being protected by this FlexFEC stream. The vector MUST have |
| 42 // size 1. |
| 43 // |
| 44 // TODO(brandtr): Update comment above when we support multistream |
| 45 // protection. |
| 46 std::vector<uint32_t> protected_media_ssrcs; |
| 47 |
| 48 // SSRC for RTCP reports to be sent. |
| 49 uint32_t local_ssrc = 0; |
| 50 |
| 51 // What RTCP mode to use in the reports. |
| 52 RtcpMode rtcp_mode = RtcpMode::kCompound; |
| 53 |
| 54 // Transport for outgoing RTCP packets. |
| 55 Transport* rtcp_send_transport = nullptr; |
| 56 |
| 57 // |transport_cc| is true whenever the send-side BWE RTCP feedback message |
| 58 // has been negotiated. This is a prerequisite for enabling send-side BWE. |
| 59 bool transport_cc = false; |
| 60 |
| 61 // RTP header extensions that have been negotiated for this track. |
| 62 std::vector<RtpExtension> extensions; |
| 63 }; |
| 64 |
| 65 // Starts stream activity. |
| 66 // When a stream is active, it can receive and process packets. |
| 67 virtual void Start() = 0; |
| 68 // Stops stream activity. |
| 69 // When a stream is stopped, it can't receive nor process packets. |
| 70 virtual void Stop() = 0; |
| 71 |
| 72 virtual Stats GetStats() const = 0; |
| 73 |
| 74 protected: |
| 75 virtual ~FlexfecReceiveStream() = default; |
45 }; | 76 }; |
46 | 77 |
47 } // namespace internal | |
48 | |
49 } // namespace webrtc | 78 } // namespace webrtc |
50 | 79 |
51 #endif // WEBRTC_CALL_FLEXFEC_RECEIVE_STREAM_H_ | 80 #endif // WEBRTC_CALL_FLEXFEC_RECEIVE_STREAM_H_ |
OLD | NEW |