1*3f982cf4SFabien Sanglard // Copyright 2020 The Chromium Authors. All rights reserved. 2*3f982cf4SFabien Sanglard // Use of this source code is governed by a BSD-style license that can be 3*3f982cf4SFabien Sanglard // found in the LICENSE file. 4*3f982cf4SFabien Sanglard 5*3f982cf4SFabien Sanglard #ifndef CAST_STREAMING_CAPTURE_CONFIGS_H_ 6*3f982cf4SFabien Sanglard #define CAST_STREAMING_CAPTURE_CONFIGS_H_ 7*3f982cf4SFabien Sanglard 8*3f982cf4SFabien Sanglard #include <string> 9*3f982cf4SFabien Sanglard #include <vector> 10*3f982cf4SFabien Sanglard 11*3f982cf4SFabien Sanglard #include "cast/streaming/constants.h" 12*3f982cf4SFabien Sanglard #include "cast/streaming/resolution.h" 13*3f982cf4SFabien Sanglard #include "util/simple_fraction.h" 14*3f982cf4SFabien Sanglard 15*3f982cf4SFabien Sanglard namespace openscreen { 16*3f982cf4SFabien Sanglard namespace cast { 17*3f982cf4SFabien Sanglard 18*3f982cf4SFabien Sanglard // A configuration set that can be used by the sender to capture audio, and the 19*3f982cf4SFabien Sanglard // receiver to playback audio. Used by Cast Streaming to provide an offer to the 20*3f982cf4SFabien Sanglard // receiver. 21*3f982cf4SFabien Sanglard struct AudioCaptureConfig { 22*3f982cf4SFabien Sanglard // Audio codec represented by this configuration. 23*3f982cf4SFabien Sanglard AudioCodec codec = AudioCodec::kOpus; 24*3f982cf4SFabien Sanglard 25*3f982cf4SFabien Sanglard // Number of channels used by this configuration. 26*3f982cf4SFabien Sanglard int channels = kDefaultAudioChannels; 27*3f982cf4SFabien Sanglard 28*3f982cf4SFabien Sanglard // Average bit rate in bits per second used by this configuration. A value 29*3f982cf4SFabien Sanglard // of "zero" suggests that the bitrate should be automatically selected by 30*3f982cf4SFabien Sanglard // the sender. 31*3f982cf4SFabien Sanglard int bit_rate = 0; 32*3f982cf4SFabien Sanglard 33*3f982cf4SFabien Sanglard // Sample rate for audio RTP timebase. 34*3f982cf4SFabien Sanglard int sample_rate = kDefaultAudioSampleRate; 35*3f982cf4SFabien Sanglard 36*3f982cf4SFabien Sanglard // Target playout delay in milliseconds. 37*3f982cf4SFabien Sanglard std::chrono::milliseconds target_playout_delay = kDefaultTargetPlayoutDelay; 38*3f982cf4SFabien Sanglard 39*3f982cf4SFabien Sanglard // The codec parameter for this configuration. Honors the format laid out 40*3f982cf4SFabien Sanglard // in RFC 6381: https://datatracker.ietf.org/doc/html/rfc6381 41*3f982cf4SFabien Sanglard // NOTE: the "profiles" parameter is not supported in our implementation. 42*3f982cf4SFabien Sanglard std::string codec_parameter; 43*3f982cf4SFabien Sanglard }; 44*3f982cf4SFabien Sanglard 45*3f982cf4SFabien Sanglard // A configuration set that can be used by the sender to capture video, as 46*3f982cf4SFabien Sanglard // well as the receiver to playback video. Used by Cast Streaming to provide an 47*3f982cf4SFabien Sanglard // offer to the receiver. 48*3f982cf4SFabien Sanglard struct VideoCaptureConfig { 49*3f982cf4SFabien Sanglard // Video codec represented by this configuration. 50*3f982cf4SFabien Sanglard VideoCodec codec = VideoCodec::kVp8; 51*3f982cf4SFabien Sanglard 52*3f982cf4SFabien Sanglard // Maximum frame rate in frames per second. 53*3f982cf4SFabien Sanglard // For simple cases, the frame rate may be provided by simply setting the 54*3f982cf4SFabien Sanglard // number to the desired value, e.g. 30 or 60FPS. Some common frame rates like 55*3f982cf4SFabien Sanglard // 23.98 FPS (for NTSC compatibility) are represented as fractions, in this 56*3f982cf4SFabien Sanglard // case 24000/1001. 57*3f982cf4SFabien Sanglard SimpleFraction max_frame_rate{kDefaultFrameRate, 1}; 58*3f982cf4SFabien Sanglard 59*3f982cf4SFabien Sanglard // Number specifying the maximum bit rate for this stream. A value of 60*3f982cf4SFabien Sanglard // zero means that the maximum bit rate should be automatically selected by 61*3f982cf4SFabien Sanglard // the sender. 62*3f982cf4SFabien Sanglard int max_bit_rate = 0; 63*3f982cf4SFabien Sanglard 64*3f982cf4SFabien Sanglard // Resolutions to be offered to the receiver. At least one resolution 65*3f982cf4SFabien Sanglard // must be provided. 66*3f982cf4SFabien Sanglard std::vector<Resolution> resolutions; 67*3f982cf4SFabien Sanglard 68*3f982cf4SFabien Sanglard // Target playout delay in milliseconds. 69*3f982cf4SFabien Sanglard std::chrono::milliseconds target_playout_delay = kDefaultTargetPlayoutDelay; 70*3f982cf4SFabien Sanglard 71*3f982cf4SFabien Sanglard // The codec parameter for this configuration. Honors the format laid out 72*3f982cf4SFabien Sanglard // in RFC 6381: https://datatracker.ietf.org/doc/html/rfc6381. 73*3f982cf4SFabien Sanglard // VP8 and VP9 codec parameter versions are defined here: 74*3f982cf4SFabien Sanglard // https://developer.mozilla.org/en-US/docs/Web/Media/Formats/codecs_parameter#webm 75*3f982cf4SFabien Sanglard // https://www.webmproject.org/vp9/mp4/#codecs-parameter-string 76*3f982cf4SFabien Sanglard // NOTE: the "profiles" parameter is not supported in our implementation. 77*3f982cf4SFabien Sanglard std::string codec_parameter; 78*3f982cf4SFabien Sanglard }; 79*3f982cf4SFabien Sanglard 80*3f982cf4SFabien Sanglard } // namespace cast 81*3f982cf4SFabien Sanglard } // namespace openscreen 82*3f982cf4SFabien Sanglard 83*3f982cf4SFabien Sanglard #endif // CAST_STREAMING_CAPTURE_CONFIGS_H_ 84