Introduce PacketReceiver::DeliverRtpPacket and PacketReceier::DeliverRtcpPacket
DeliverRtpPacket use a parsed RTP packet as argument where the RTP extensions are supposed to be known.
This method is implemented in webrt::Call and temporary used by the exising method Call::DeliverRtp, but the idea is to instead avoid extra packet parsing by forwarding a RtpPacketReceived from RtpTransport::DemuxRtpPacket via WebrtcVideoChannel::OnPacketReceived and WebrtcVoiceChannel.
DeliverRtcpPacket is also implemented in Call and is directly used in PeerConnection::InitializeRtcpCallback.
Bug: webrtc:14795, webrtc:7135
Change-Id: Ib6ffe8e1229ac07fa459ee2fc9a0af8455a23bac
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/290401
Commit-Queue: Per Kjellander <perkj@webrtc.org>
Reviewed-by: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#39015}
diff --git a/call/packet_receiver.h b/call/packet_receiver.h
index 13d3b84..a97bb96 100644
--- a/call/packet_receiver.h
+++ b/call/packet_receiver.h
@@ -10,7 +10,10 @@
#ifndef CALL_PACKET_RECEIVER_H_
#define CALL_PACKET_RECEIVER_H_
+#include "absl/functional/any_invocable.h"
#include "api/media_types.h"
+#include "modules/rtp_rtcp/source/rtp_packet_received.h"
+#include "rtc_base/checks.h"
#include "rtc_base/copy_on_write_buffer.h"
namespace webrtc {
@@ -27,6 +30,28 @@
rtc::CopyOnWriteBuffer packet,
int64_t packet_time_us) = 0;
+ // Demux RTCP packets. Must be called on the worker thread.
+ virtual void DeliverRtcpPacket(rtc::CopyOnWriteBuffer packet) {
+ // TODO(perkj, https://bugs.webrtc.org/7135): Implement in FakeCall and
+ // FakeNetworkPipe.
+ RTC_CHECK_NOTREACHED();
+ }
+
+ // Invoked once when a packet packet is received that can not be demuxed.
+ // If the method returns true, a new attempt is made to demux the packet.
+ using OnUndemuxablePacketHandler =
+ absl::AnyInvocable<bool(const RtpPacketReceived& parsed_packet)>;
+
+ // Demux RTP packets. Must be called on the worker thread.
+ virtual void DeliverRtpPacket(
+ MediaType media_type,
+ RtpPacketReceived packet,
+ OnUndemuxablePacketHandler undemuxable_packet_handler) {
+ // TODO(perkj, https://bugs.webrtc.org/7135): Implement in FakeCall and
+ // FakeNetworkPipe.
+ RTC_CHECK_NOTREACHED();
+ }
+
protected:
virtual ~PacketReceiver() {}
};