Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(25)

Side by Side Diff: webrtc/call/rtcp_demuxer.h

Issue 2957763002: Revert of Create RtcpDemuxer (Closed)
Patch Set: Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « webrtc/call/rsid_resolution_observer.h ('k') | webrtc/call/rtcp_demuxer.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /*
2 * Copyright (c) 2017 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 WEBRTC_CALL_RTCP_DEMUXER_H_
12 #define WEBRTC_CALL_RTCP_DEMUXER_H_
13
14 #include <map>
15 #include <string>
16 #include <vector>
17
18 #include "webrtc/base/array_view.h"
19 #include "webrtc/base/basictypes.h"
20 #include "webrtc/call/rsid_resolution_observer.h"
21
22 namespace webrtc {
23
24 class RtcpPacketSinkInterface;
25
26 // This class represents the RTCP demuxing, for a single RTP session (i.e., one
27 // SSRC space, see RFC 7656). It isn't thread aware, leaving responsibility of
28 // multithreading issues to the user of this class.
29 class RtcpDemuxer : public RsidResolutionObserver {
30 public:
31 RtcpDemuxer();
32 ~RtcpDemuxer() override;
33
34 // Registers a sink. The sink will be notified of incoming RTCP packets with
35 // that sender-SSRC. The same sink can be registered for multiple SSRCs, and
36 // the same SSRC can have multiple sinks. Null pointer is not allowed.
37 // Sinks may be associated with both an SSRC and an RSID.
38 // Sinks may be registered as SSRC/RSID-specific or broadcast, but not both.
39 void AddSink(uint32_t sender_ssrc, RtcpPacketSinkInterface* sink);
40
41 // Registers a sink. Once the RSID is resolved to an SSRC, the sink will be
42 // notified of all RTCP packets with that sender-SSRC.
43 // The same sink can be registered for multiple RSIDs, and
44 // the same RSID can have multiple sinks. Null pointer is not allowed.
45 // Sinks may be associated with both an SSRC and an RSID.
46 // Sinks may be registered as SSRC/RSID-specific or broadcast, but not both.
47 void AddSink(const std::string& rsid, RtcpPacketSinkInterface* sink);
48
49 // Registers a sink. The sink will be notified of any incoming RTCP packet.
50 // Null pointer is not allowed.
51 // Sinks may be registered as SSRC/RSID-specific or broadcast, but not both.
52 void AddBroadcastSink(RtcpPacketSinkInterface* sink);
53
54 // Undo previous AddSink() calls with the given sink.
55 void RemoveSink(const RtcpPacketSinkInterface* sink);
56
57 // Undo AddBroadcastSink().
58 void RemoveBroadcastSink(const RtcpPacketSinkInterface* sink);
59
60 // Process a new RTCP packet and forward it to the appropriate sinks.
61 void OnRtcpPacket(rtc::ArrayView<const uint8_t> packet);
62
63 // Implement RsidResolutionObserver - become notified whenever RSIDs resolve
64 // to an SSRC.
65 void OnRsidResolved(const std::string& rsid, uint32_t ssrc) override;
66
67 // TODO(eladalon): Add the ability to resolve RSIDs and inform observers,
68 // like in the RtpDemuxer case, once the relevant standard is finalized.
69
70 private:
71 // Records the association SSRCs to sinks.
72 std::multimap<uint32_t, RtcpPacketSinkInterface*> ssrc_sinks_;
73
74 // Records the association RSIDs to sinks.
75 std::multimap<std::string, RtcpPacketSinkInterface*> rsid_sinks_;
76
77 // Sinks which will receive notifications of all incoming RTCP packets.
78 // Additional/removal of sinks is expected to be significantly less frequent
79 // than RTCP message reception; container chosen for iteration performance.
80 std::vector<RtcpPacketSinkInterface*> broadcast_sinks_;
81 };
82
83 } // namespace webrtc
84
85 #endif // WEBRTC_CALL_RTCP_DEMUXER_H_
OLDNEW
« no previous file with comments | « webrtc/call/rsid_resolution_observer.h ('k') | webrtc/call/rtcp_demuxer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698