blob: 79beaca252f611b03f7a76635226e7a3a40b26f8 [file]
/*
* Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#ifndef MEDIA_BASE_MEDIA_CONSTANTS_H_
#define MEDIA_BASE_MEDIA_CONSTANTS_H_
#include <stddef.h>
#include "absl/strings/string_view.h"
#include "rtc_base/system/rtc_export.h"
// This file contains constants related to media.
namespace webrtc {
inline constexpr int kVideoCodecClockrate = 90'000;
inline constexpr int kVideoMtu = 1200;
inline constexpr int kVideoRtpSendBufferSize = 262'144;
inline constexpr int kVideoRtpRecvBufferSize = 1'048'576;
// Default CPU thresholds.
inline constexpr float kHighSystemCpuThreshold = 0.85f;
inline constexpr float kLowSystemCpuThreshold = 0.65f;
inline constexpr float kProcessCpuThreshold = 0.10f;
extern const char kRedCodecName[];
extern const char kUlpfecCodecName[];
extern const char kFlexfecCodecName[];
inline constexpr absl::string_view kFlexfecFmtpRepairWindow = "repair-window";
extern const char kRtxCodecName[];
inline constexpr absl::string_view kCodecParamRtxTime = "rtx-time";
extern const char kCodecParamAssociatedPayloadType[];
inline constexpr absl::string_view kCodecParamAssociatedCodecName = "acn";
inline constexpr absl::string_view kCodecParamNotInNameValueFormat = "";
extern const char kOpusCodecName[];
extern const char kL16CodecName[];
extern const char kG722CodecName[];
extern const char kPcmuCodecName[];
extern const char kPcmaCodecName[];
extern const char kCnCodecName[];
extern const char kDtmfCodecName[];
// Attribute parameters
inline constexpr absl::string_view kCodecParamPTime = "ptime";
inline constexpr absl::string_view kCodecParamMaxPTime = "maxptime";
// fmtp parameters
inline constexpr absl::string_view kCodecParamMinPTime = "minptime";
inline constexpr absl::string_view kCodecParamSPropStereo = "sprop-stereo";
extern const char kCodecParamStereo[];
extern const char kCodecParamUseInbandFec[];
extern const char kCodecParamUseDtx[];
inline constexpr absl::string_view kCodecParamCbr = "cbr";
inline constexpr absl::string_view kCodecParamMaxAverageBitrate =
"maxaveragebitrate";
inline constexpr absl::string_view kCodecParamMaxPlaybackRate =
"maxplaybackrate";
inline constexpr absl::string_view kCodecParamPerLayerPictureLossIndication =
"x-google-per-layer-pli";
inline constexpr absl::string_view kParamValueTrue = "1";
// Parameters are stored as parameter/value pairs. For parameters who do not
// have a value, `kParamValueEmpty` should be used as value.
inline constexpr absl::string_view kParamValueEmpty = "";
// opus parameters.
// Default value for maxptime according to
// http://tools.ietf.org/html/draft-spittka-payload-rtp-opus-03
inline constexpr int kOpusDefaultMaxPTime = 120;
inline constexpr int kOpusDefaultPTime = 20;
inline constexpr int kOpusDefaultMinPTime = 3;
inline constexpr int kOpusDefaultSPropStereo = 0;
inline constexpr int kOpusDefaultStereo = 0;
inline constexpr int kOpusDefaultUseInbandFec = 0;
inline constexpr int kOpusDefaultUseDtx = 0;
inline constexpr int kOpusDefaultMaxPlaybackRate = 48000;
// Prefered values in this code base. Note that they may differ from the default
// values in http://tools.ietf.org/html/draft-spittka-payload-rtp-opus-03
// Only frames larger or equal to 10 ms are currently supported in this code
// base.
inline constexpr int kPreferredMaxPTime = 120;
inline constexpr int kPreferredMinPTime = 10;
inline constexpr int kPreferredSPropStereo = 0;
inline constexpr int kPreferredStereo = 0;
inline constexpr int kPreferredUseInbandFec = 0;
inline constexpr absl::string_view kPacketizationParamRaw = "raw";
// rtcp-fb message in its first experimental stages. Documentation pending.
inline constexpr absl::string_view kRtcpFbParamLntf = "goog-lntf";
// rtcp-fb messages according to RFC 4585
inline constexpr absl::string_view kRtcpFbParamNack = "nack";
inline constexpr absl::string_view kRtcpFbNackParamPli = "pli";
// rtcp-fb messages according to
// http://tools.ietf.org/html/draft-alvestrand-rmcat-remb-00
inline constexpr absl::string_view kRtcpFbParamRemb = "goog-remb";
// rtcp-fb messages according to
// https://tools.ietf.org/html/draft-holmer-rmcat-transport-wide-cc-extensions-01
inline constexpr absl::string_view kRtcpFbParamTransportCc = "transport-cc";
// ccm submessages according to RFC 5104
inline constexpr absl::string_view kRtcpFbParamCcm = "ccm";
inline constexpr absl::string_view kRtcpFbCcmParamFir = "fir";
// Receiver reference time report
// https://tools.ietf.org/html/rfc3611 section 4.4
inline constexpr absl::string_view kRtcpFbParamRrtr = "rrtr";
// Google specific parameters
extern const char kCodecParamMaxBitrate[];
extern const char kCodecParamMinBitrate[];
extern const char kCodecParamStartBitrate[];
inline constexpr absl::string_view kCodecParamMaxQuantization =
"x-google-max-quantization";
extern const char kComfortNoiseCodecName[];
RTC_EXPORT extern const char kVp8CodecName[];
RTC_EXPORT extern const char kVp9CodecName[];
RTC_EXPORT extern const char kAv1CodecName[];
RTC_EXPORT extern const char kH264CodecName[];
RTC_EXPORT extern const char kH265CodecName[];
// RFC 6184 RTP Payload Format for H.264 video
RTC_EXPORT extern const char kH264FmtpProfileLevelId[];
RTC_EXPORT extern const char kH264FmtpLevelAsymmetryAllowed[];
RTC_EXPORT extern const char kH264FmtpPacketizationMode[];
inline constexpr absl::string_view kH264FmtpSpropParameterSets =
"sprop-parameter-sets";
inline constexpr absl::string_view kH264FmtpSpsPpsIdrInKeyframe =
"sps-pps-idr-in-keyframe";
inline constexpr absl::string_view kH264ProfileLevelConstrainedBaseline =
"42e01f";
inline constexpr absl::string_view kH264ProfileLevelConstrainedHigh = "640c1f";
// RFC 7798 RTP Payload Format for H.265 video.
// According to RFC 7742, the sprop parameters MUST NOT be included
// in SDP generated by WebRTC, so for H.265 we don't handle them, though
// current H.264 implementation honors them when receiving
// sprop-parameter-sets in SDP.
RTC_EXPORT extern const char kH265FmtpProfileSpace[];
RTC_EXPORT extern const char kH265FmtpTierFlag[];
RTC_EXPORT extern const char kH265FmtpProfileId[];
RTC_EXPORT extern const char kH265FmtpLevelId[];
RTC_EXPORT extern const char kH265FmtpProfileCompatibilityIndicator[];
RTC_EXPORT extern const char kH265FmtpInteropConstraints[];
RTC_EXPORT extern const char kH265FmtpTxMode[];
// draft-ietf-payload-vp9
inline constexpr absl::string_view kVP9ProfileId = "profile-id";
// https://aomediacodec.github.io/av1-rtp-spec/
inline constexpr absl::string_view kAv1FmtpProfile = "profile";
inline constexpr absl::string_view kAv1FmtpLevelIdx = "level-idx";
inline constexpr absl::string_view kAv1FmtpTier = "tier";
inline constexpr int kDefaultVideoMaxFramerate = 60;
inline constexpr int kDefaultVideoMaxQpVpx = 56;
inline constexpr int kDefaultVideoMaxQpAv1 = 52;
inline constexpr int kDefaultVideoMaxQpH26x = 51;
inline constexpr size_t kConferenceMaxNumSpatialLayers = 3;
inline constexpr size_t kConferenceMaxNumTemporalLayers = 3;
inline constexpr size_t kConferenceDefaultNumTemporalLayers = 3;
inline constexpr absl::string_view kApplicationSpecificBandwidth = "AS";
inline constexpr absl::string_view kTransportSpecificBandwidth = "TIAS";
} // namespace webrtc
#endif // MEDIA_BASE_MEDIA_CONSTANTS_H_