File: session_config.h

package info (click to toggle)
android-platform-tools 34.0.5-12
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 150,900 kB
  • sloc: cpp: 805,786; java: 293,500; ansic: 128,288; xml: 127,491; python: 41,481; sh: 14,245; javascript: 9,665; cs: 3,846; asm: 2,049; makefile: 1,917; yacc: 440; awk: 368; ruby: 183; sql: 140; perl: 88; lex: 67
file content (62 lines) | stat: -rw-r--r-- 2,074 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CAST_STREAMING_SESSION_CONFIG_H_
#define CAST_STREAMING_SESSION_CONFIG_H_

#include <array>
#include <chrono>
#include <cstdint>

#include "cast/streaming/ssrc.h"

namespace openscreen {
namespace cast {

// Common streaming configuration, established from the OFFER/ANSWER exchange,
// that the Sender and Receiver are both assuming.
// TODO(jophba): add config validation.
struct SessionConfig final {
  SessionConfig(Ssrc sender_ssrc,
                Ssrc receiver_ssrc,
                int rtp_timebase,
                int channels,
                std::chrono::milliseconds target_playout_delay,
                std::array<uint8_t, 16> aes_secret_key,
                std::array<uint8_t, 16> aes_iv_mask,
                bool is_pli_enabled);
  SessionConfig(const SessionConfig& other);
  SessionConfig(SessionConfig&& other) noexcept;
  SessionConfig& operator=(const SessionConfig& other);
  SessionConfig& operator=(SessionConfig&& other) noexcept;
  ~SessionConfig();

  // The sender and receiver's SSRC identifiers. Note: SSRC identifiers
  // are defined as unsigned 32 bit integers here:
  // https://tools.ietf.org/html/rfc5576#page-5
  Ssrc sender_ssrc = 0;
  Ssrc receiver_ssrc = 0;

  // RTP timebase: The number of RTP units advanced per second. For audio,
  // this is the sampling rate. For video, this is 90 kHz by convention.
  int rtp_timebase = 90000;

  // Number of channels. Must be 1 for video, for audio typically 2.
  int channels = 1;

  // Initial target playout delay.
  std::chrono::milliseconds target_playout_delay;

  // The AES-128 crypto key and initialization vector.
  std::array<uint8_t, 16> aes_secret_key{};
  std::array<uint8_t, 16> aes_iv_mask{};

  // Whether picture loss indication (PLI) should be used for this session.
  bool is_pli_enabled = false;
};

}  // namespace cast
}  // namespace openscreen

#endif  // CAST_STREAMING_SESSION_CONFIG_H_