blob: a16a9b753da3902a5c80d52e97ba5e12370ad44f [file] [log] [blame]
Amit Hilbuchdd9390c2018-11-14 00:26:051/*
2 * Copyright 2018 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
Steve Anton10542f22019-01-11 17:11:0011#ifndef PC_CHANNEL_INTERFACE_H_
12#define PC_CHANNEL_INTERFACE_H_
Amit Hilbuchdd9390c2018-11-14 00:26:0513
14#include <string>
Amit Hilbuchbcd39d42019-01-26 01:13:5615#include <vector>
Amit Hilbuchdd9390c2018-11-14 00:26:0516
Tomas Gunnarsson94f01942022-01-03 14:59:1217#include "absl/strings/string_view.h"
Amit Hilbuchdd9390c2018-11-14 00:26:0518#include "api/jsep.h"
Steve Anton10542f22019-01-11 17:11:0019#include "api/media_types.h"
20#include "media/base/media_channel.h"
21#include "pc/rtp_transport_internal.h"
Amit Hilbuchdd9390c2018-11-14 00:26:0522
Tomas Gunnarsson5411b172022-01-24 07:45:2623namespace webrtc {
24class Call;
25class VideoBitrateAllocatorFactory;
26} // namespace webrtc
27
Amit Hilbuchdd9390c2018-11-14 00:26:0528namespace cricket {
29
30class MediaContentDescription;
Tomas Gunnarsson5411b172022-01-24 07:45:2631class VideoChannel;
32class VoiceChannel;
33struct MediaConfig;
Amit Hilbuchdd9390c2018-11-14 00:26:0534
Harald Alvestrandd5f414c2022-01-24 09:11:2335// A Channel is a construct that groups media streams of the same type
36// (audio or video), both outgoing and incoming.
37// When the PeerConnection API is used, a Channel corresponds one to one
38// to an RtpTransceiver.
39// When Unified Plan is used, there can only be at most one outgoing and
40// one incoming stream. With Plan B, there can be more than one.
41
42// ChannelInterface contains methods common to voice and video channels.
Amit Hilbuchdd9390c2018-11-14 00:26:0543// As more methods are added to BaseChannel, they should be included in the
44// interface as well.
45class ChannelInterface {
46 public:
47 virtual cricket::MediaType media_type() const = 0;
48
49 virtual MediaChannel* media_channel() const = 0;
50
Tomas Gunnarsson94f01942022-01-03 14:59:1251 // Returns a string view for the transport name. Fetching the transport name
52 // must be done on the network thread only and note that the lifetime of
53 // the returned object should be assumed to only be the calling scope.
Amit Hilbuchdd9390c2018-11-14 00:26:0554 // TODO(deadbeef): This is redundant; remove this.
Tomas Gunnarsson94f01942022-01-03 14:59:1255 virtual absl::string_view transport_name() const = 0;
Amit Hilbuchdd9390c2018-11-14 00:26:0556
Tomas Gunnarsson5411b172022-01-24 07:45:2657 // TODO(tommi): Change return type to string_view.
58 virtual const std::string& mid() const = 0;
Amit Hilbuchdd9390c2018-11-14 00:26:0559
Amit Hilbuchdd9390c2018-11-14 00:26:0560 // Enables or disables this channel
Tommi1959f8f2021-04-26 08:20:1961 virtual void Enable(bool enable) = 0;
Amit Hilbuchdd9390c2018-11-14 00:26:0562
63 // Used for latency measurements.
Tommi99c8a802021-04-27 13:00:0064 virtual void SetFirstPacketReceivedCallback(
65 std::function<void()> callback) = 0;
Amit Hilbuchdd9390c2018-11-14 00:26:0566
67 // Channel control
68 virtual bool SetLocalContent(const MediaContentDescription* content,
69 webrtc::SdpType type,
Tomas Gunnarssond908d742022-01-05 10:44:2670 std::string& error_desc) = 0;
Amit Hilbuchdd9390c2018-11-14 00:26:0571 virtual bool SetRemoteContent(const MediaContentDescription* content,
72 webrtc::SdpType type,
Tomas Gunnarssond908d742022-01-05 10:44:2673 std::string& error_desc) = 0;
Taylor Brandstetterd0acbd82021-01-25 21:44:5574 virtual bool SetPayloadTypeDemuxingEnabled(bool enabled) = 0;
Amit Hilbuchdd9390c2018-11-14 00:26:0575
Amit Hilbuchbcd39d42019-01-26 01:13:5676 // Access to the local and remote streams that were set on the channel.
77 virtual const std::vector<StreamParams>& local_streams() const = 0;
78 virtual const std::vector<StreamParams>& remote_streams() const = 0;
79
Amit Hilbuchdd9390c2018-11-14 00:26:0580 // Set an RTP level transport.
81 // Some examples:
82 // * An RtpTransport without encryption.
83 // * An SrtpTransport for SDES.
84 // * A DtlsSrtpTransport for DTLS-SRTP.
85 virtual bool SetRtpTransport(webrtc::RtpTransportInternal* rtp_transport) = 0;
86
87 protected:
88 virtual ~ChannelInterface() = default;
89};
90
Tomas Gunnarsson5411b172022-01-24 07:45:2691class ChannelFactoryInterface {
92 public:
93 virtual VideoChannel* CreateVideoChannel(
94 webrtc::Call* call,
95 const MediaConfig& media_config,
96 const std::string& mid,
97 bool srtp_required,
98 const webrtc::CryptoOptions& crypto_options,
99 const VideoOptions& options,
100 webrtc::VideoBitrateAllocatorFactory*
101 video_bitrate_allocator_factory) = 0;
102
103 virtual VoiceChannel* CreateVoiceChannel(
104 webrtc::Call* call,
105 const MediaConfig& media_config,
106 const std::string& mid,
107 bool srtp_required,
108 const webrtc::CryptoOptions& crypto_options,
109 const AudioOptions& options) = 0;
110
111 virtual void DestroyChannel(ChannelInterface* channel) = 0;
112
113 protected:
114 virtual ~ChannelFactoryInterface() = default;
115};
116
Amit Hilbuchdd9390c2018-11-14 00:26:05117} // namespace cricket
118
Steve Anton10542f22019-01-11 17:11:00119#endif // PC_CHANNEL_INTERFACE_H_