blob: adfa2b54b6101fa0fd1e785ad0556ce0e2fad943 [file] [log] [blame]
henrike@webrtc.org28e20752013-07-10 00:45:36 +00001/*
kjellanderb24317b2016-02-10 07:54:43 -08002 * Copyright 2013 The WebRTC project authors. All Rights Reserved.
henrike@webrtc.org28e20752013-07-10 00:45:36 +00003 *
kjellanderb24317b2016-02-10 07:54:43 -08004 * 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.
henrike@webrtc.org28e20752013-07-10 00:45:36 +00009 */
10
11// This file contains the interface for MediaConstraints, corresponding to
12// the definition at
13// http://www.w3.org/TR/mediacapture-streams/#mediastreamconstraints and also
14// used in WebRTC: http://dev.w3.org/2011/webrtc/editor/webrtc.html#constraints.
15
Niels Möllerf06f9232018-08-07 12:32:18 +020016// Implementation of the w3c constraints spec is the responsibility of the
17// browser. Chrome no longer uses the constraints api declared here, and it will
18// be removed from WebRTC.
19// https://bugs.chromium.org/p/webrtc/issues/detail?id=9239
htaa2a49d92016-03-04 02:51:39 -080020
Steve Anton10542f22019-01-11 09:11:00 -080021#ifndef API_MEDIA_CONSTRAINTS_INTERFACE_H_
22#define API_MEDIA_CONSTRAINTS_INTERFACE_H_
henrike@webrtc.org28e20752013-07-10 00:45:36 +000023
Yves Gerey988cc082018-10-23 12:03:01 +020024#include <stddef.h>
henrike@webrtc.org28e20752013-07-10 00:45:36 +000025#include <string>
26#include <vector>
27
Yves Gerey988cc082018-10-23 12:03:01 +020028#include "api/audio_options.h"
Steve Anton10542f22019-01-11 09:11:00 -080029#include "api/peer_connection_interface.h"
htaa2a49d92016-03-04 02:51:39 -080030
henrike@webrtc.org28e20752013-07-10 00:45:36 +000031namespace webrtc {
32
henrike@webrtc.org28e20752013-07-10 00:45:36 +000033// Interface used for passing arguments about media constraints
34// to the MediaStream and PeerConnection implementation.
deadbeefb10f32f2017-02-08 01:38:21 -080035//
36// Constraints may be either "mandatory", which means that unless satisfied,
37// the method taking the constraints should fail, or "optional", which means
38// they may not be satisfied..
henrike@webrtc.org28e20752013-07-10 00:45:36 +000039class MediaConstraintsInterface {
40 public:
41 struct Constraint {
42 Constraint() {}
43 Constraint(const std::string& key, const std::string value)
Yves Gerey665174f2018-06-19 15:03:05 +020044 : key(key), value(value) {}
henrike@webrtc.org28e20752013-07-10 00:45:36 +000045 std::string key;
46 std::string value;
47 };
48
49 class Constraints : public std::vector<Constraint> {
50 public:
51 bool FindFirst(const std::string& key, std::string* value) const;
52 };
53
henrike@webrtc.org28e20752013-07-10 00:45:36 +000054 // Constraint keys used by a local audio source.
tommi39b31002015-06-23 09:50:47 -070055
henrike@webrtc.org28e20752013-07-10 00:45:36 +000056 // These keys are google specific.
Tommi70c7fe12015-06-15 09:14:03 +020057 static const char kGoogEchoCancellation[]; // googEchoCancellation
58
Henrik Lundin441f6342015-06-09 16:03:13 +020059 static const char kExtendedFilterEchoCancellation[]; // googEchoCancellation2
Yves Gerey665174f2018-06-19 15:03:05 +020060 static const char kDAEchoCancellation[]; // googDAEchoCancellation
61 static const char kAutoGainControl[]; // googAutoGainControl
62 static const char kExperimentalAutoGainControl[]; // googAutoGainControl2
63 static const char kNoiseSuppression[]; // googNoiseSuppression
sergeyu@chromium.org9cf037b2014-02-07 19:03:26 +000064 static const char kExperimentalNoiseSuppression[]; // googNoiseSuppression2
Yves Gerey665174f2018-06-19 15:03:05 +020065 static const char kHighpassFilter[]; // googHighpassFilter
sergeyu@chromium.orga59696b2013-09-13 23:48:58 +000066 static const char kTypingNoiseDetection[]; // googTypingNoiseDetection
Yves Gerey665174f2018-06-19 15:03:05 +020067 static const char kAudioMirroring[]; // googAudioMirroring
minyueba414282016-12-11 02:17:52 -080068 static const char
69 kAudioNetworkAdaptorConfig[]; // goodAudioNetworkAdaptorConfig
henrike@webrtc.org28e20752013-07-10 00:45:36 +000070
henrike@webrtc.org28e20752013-07-10 00:45:36 +000071 // Constraint keys for CreateOffer / CreateAnswer
72 // Specified by the W3C PeerConnection spec
Yves Gerey665174f2018-06-19 15:03:05 +020073 static const char kOfferToReceiveVideo[]; // OfferToReceiveVideo
74 static const char kOfferToReceiveAudio[]; // OfferToReceiveAudio
henrike@webrtc.org28e20752013-07-10 00:45:36 +000075 static const char kVoiceActivityDetection[]; // VoiceActivityDetection
Yves Gerey665174f2018-06-19 15:03:05 +020076 static const char kIceRestart[]; // IceRestart
henrike@webrtc.org28e20752013-07-10 00:45:36 +000077 // These keys are google specific.
78 static const char kUseRtpMux[]; // googUseRtpMUX
79
80 // Constraints values.
Yves Gerey665174f2018-06-19 15:03:05 +020081 static const char kValueTrue[]; // true
henrike@webrtc.org28e20752013-07-10 00:45:36 +000082 static const char kValueFalse[]; // false
83
wu@webrtc.org14814912014-04-02 23:25:15 +000084 // PeerConnection constraint keys.
henrike@webrtc.org28e20752013-07-10 00:45:36 +000085 // Temporary pseudo-constraints used to enable DTLS-SRTP
86 static const char kEnableDtlsSrtp[]; // Enable DTLS-SRTP
87 // Temporary pseudo-constraints used to enable DataChannels
88 static const char kEnableRtpDataChannels[]; // Enable RTP DataChannels
wu@webrtc.org14814912014-04-02 23:25:15 +000089 // Google-specific constraint keys.
wu@webrtc.orgde305012013-10-31 15:40:38 +000090 // Temporary pseudo-constraint for enabling DSCP through JS.
wu@webrtc.org14814912014-04-02 23:25:15 +000091 static const char kEnableDscp[]; // googDscp
henrika@webrtc.orgaebb1ad2014-01-14 10:00:58 +000092 // Constraint to enable IPv6 through JS.
wu@webrtc.org14814912014-04-02 23:25:15 +000093 static const char kEnableIPv6[]; // googIPv6
henrike@webrtc.org6e3dbc22014-03-25 17:09:47 +000094 // Temporary constraint to enable suspend below min bitrate feature.
95 static const char kEnableVideoSuspendBelowMinBitrate[];
Yves Gerey665174f2018-06-19 15:03:05 +020096 // googSuspendBelowMinBitrate
buildbot@webrtc.orgb4c7b092014-08-25 12:11:58 +000097 // Constraint to enable combined audio+video bandwidth estimation.
98 static const char kCombinedAudioVideoBwe[]; // googCombinedAudioVideoBwe
Yves Gerey665174f2018-06-19 15:03:05 +020099 static const char kScreencastMinBitrate[]; // googScreencastMinBitrate
100 static const char kCpuOveruseDetection[]; // googCpuOveruseDetection
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000101
Jonas Orelandfc1acd22018-08-24 10:58:37 +0200102 // Specifies number of simulcast layers for all video tracks
103 // with a Plan B offer/answer
104 // (see RTCOfferAnswerOptions::num_simulcast_layers).
105 static const char kNumSimulcastLayers[];
106
Magnus Jedvert3ecdd0f2017-11-24 11:21:14 +0100107 virtual ~MediaConstraintsInterface() = default;
108
109 virtual const Constraints& GetMandatory() const = 0;
110 virtual const Constraints& GetOptional() const = 0;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000111};
112
113bool FindConstraint(const MediaConstraintsInterface* constraints,
Yves Gerey665174f2018-06-19 15:03:05 +0200114 const std::string& key,
115 bool* value,
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000116 size_t* mandatory_constraints);
117
htaa2a49d92016-03-04 02:51:39 -0800118bool FindConstraint(const MediaConstraintsInterface* constraints,
119 const std::string& key,
120 int* value,
121 size_t* mandatory_constraints);
122
123// Copy all relevant constraints into an RTCConfiguration object.
124void CopyConstraintsIntoRtcConfiguration(
125 const MediaConstraintsInterface* constraints,
126 PeerConnectionInterface::RTCConfiguration* configuration);
127
deadbeeffe0fd412017-01-13 11:47:56 -0800128// Copy all relevant constraints into an AudioOptions object.
129void CopyConstraintsIntoAudioOptions(
130 const MediaConstraintsInterface* constraints,
131 cricket::AudioOptions* options);
132
Niels Möllerf06f9232018-08-07 12:32:18 +0200133bool CopyConstraintsIntoOfferAnswerOptions(
134 const MediaConstraintsInterface* constraints,
135 PeerConnectionInterface::RTCOfferAnswerOptions* offer_answer_options);
136
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000137} // namespace webrtc
138
Steve Anton10542f22019-01-11 09:11:00 -0800139#endif // API_MEDIA_CONSTRAINTS_INTERFACE_H_