1*3f982cf4SFabien Sanglard // Copyright 2019 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_SESSION_CONFIG_H_ 6*3f982cf4SFabien Sanglard #define CAST_STREAMING_SESSION_CONFIG_H_ 7*3f982cf4SFabien Sanglard 8*3f982cf4SFabien Sanglard #include <array> 9*3f982cf4SFabien Sanglard #include <chrono> 10*3f982cf4SFabien Sanglard #include <cstdint> 11*3f982cf4SFabien Sanglard 12*3f982cf4SFabien Sanglard #include "cast/streaming/ssrc.h" 13*3f982cf4SFabien Sanglard 14*3f982cf4SFabien Sanglard namespace openscreen { 15*3f982cf4SFabien Sanglard namespace cast { 16*3f982cf4SFabien Sanglard 17*3f982cf4SFabien Sanglard // Common streaming configuration, established from the OFFER/ANSWER exchange, 18*3f982cf4SFabien Sanglard // that the Sender and Receiver are both assuming. 19*3f982cf4SFabien Sanglard // TODO(jophba): add config validation. 20*3f982cf4SFabien Sanglard struct SessionConfig final { 21*3f982cf4SFabien Sanglard SessionConfig(Ssrc sender_ssrc, 22*3f982cf4SFabien Sanglard Ssrc receiver_ssrc, 23*3f982cf4SFabien Sanglard int rtp_timebase, 24*3f982cf4SFabien Sanglard int channels, 25*3f982cf4SFabien Sanglard std::chrono::milliseconds target_playout_delay, 26*3f982cf4SFabien Sanglard std::array<uint8_t, 16> aes_secret_key, 27*3f982cf4SFabien Sanglard std::array<uint8_t, 16> aes_iv_mask, 28*3f982cf4SFabien Sanglard bool is_pli_enabled); 29*3f982cf4SFabien Sanglard SessionConfig(const SessionConfig& other); 30*3f982cf4SFabien Sanglard SessionConfig(SessionConfig&& other) noexcept; 31*3f982cf4SFabien Sanglard SessionConfig& operator=(const SessionConfig& other); 32*3f982cf4SFabien Sanglard SessionConfig& operator=(SessionConfig&& other) noexcept; 33*3f982cf4SFabien Sanglard ~SessionConfig(); 34*3f982cf4SFabien Sanglard 35*3f982cf4SFabien Sanglard // The sender and receiver's SSRC identifiers. Note: SSRC identifiers 36*3f982cf4SFabien Sanglard // are defined as unsigned 32 bit integers here: 37*3f982cf4SFabien Sanglard // https://tools.ietf.org/html/rfc5576#page-5 38*3f982cf4SFabien Sanglard Ssrc sender_ssrc = 0; 39*3f982cf4SFabien Sanglard Ssrc receiver_ssrc = 0; 40*3f982cf4SFabien Sanglard 41*3f982cf4SFabien Sanglard // RTP timebase: The number of RTP units advanced per second. For audio, 42*3f982cf4SFabien Sanglard // this is the sampling rate. For video, this is 90 kHz by convention. 43*3f982cf4SFabien Sanglard int rtp_timebase = 90000; 44*3f982cf4SFabien Sanglard 45*3f982cf4SFabien Sanglard // Number of channels. Must be 1 for video, for audio typically 2. 46*3f982cf4SFabien Sanglard int channels = 1; 47*3f982cf4SFabien Sanglard 48*3f982cf4SFabien Sanglard // Initial target playout delay. 49*3f982cf4SFabien Sanglard std::chrono::milliseconds target_playout_delay; 50*3f982cf4SFabien Sanglard 51*3f982cf4SFabien Sanglard // The AES-128 crypto key and initialization vector. 52*3f982cf4SFabien Sanglard std::array<uint8_t, 16> aes_secret_key{}; 53*3f982cf4SFabien Sanglard std::array<uint8_t, 16> aes_iv_mask{}; 54*3f982cf4SFabien Sanglard 55*3f982cf4SFabien Sanglard // Whether picture loss indication (PLI) should be used for this session. 56*3f982cf4SFabien Sanglard bool is_pli_enabled = false; 57*3f982cf4SFabien Sanglard }; 58*3f982cf4SFabien Sanglard 59*3f982cf4SFabien Sanglard } // namespace cast 60*3f982cf4SFabien Sanglard } // namespace openscreen 61*3f982cf4SFabien Sanglard 62*3f982cf4SFabien Sanglard #endif // CAST_STREAMING_SESSION_CONFIG_H_ 63