Implement Cast Streaming mirroring, DLNA casting, daemon+GUI, and breadd integration
Some checks failed
dev release / build (push) Failing after 12s
Some checks failed
dev release / build (push) Failing after 12s
Builds out the full v1 scope: a vendored+patched openscreen subset for low-latency Cast Streaming (Mirroring receiver 0F5096E8) alongside the existing Cast V2/HLS and new DLNA/AVTransport casting paths, breadcastd's Idle/Casting state machine with a private IPC socket, the breadcast GTK4 popup as a thin IPC client, and bread.cast.*/bread.command.cast.* breadd integration (device discovery, start/stop, mirroring lifecycle events). Also adds bakery/systemd/Forgejo CI packaging. Validated end-to-end against a real Chromecast/Google TV: negotiated Cast Streaming session, live pipeline playback, and daemon+GUI click-to-cast/ stop through the actual popup.
This commit is contained in:
parent
887c29002f
commit
8c745d18e0
283 changed files with 36788 additions and 0 deletions
71
breadcast-caststream-sys/vendor/openscreen/cast/streaming/public/session_config.h
vendored
Normal file
71
breadcast-caststream-sys/vendor/openscreen/cast/streaming/public/session_config.h
vendored
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
// Copyright 2019 The Chromium Authors
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#ifndef CAST_STREAMING_PUBLIC_SESSION_CONFIG_H_
|
||||
#define CAST_STREAMING_PUBLIC_SESSION_CONFIG_H_
|
||||
|
||||
#include <array>
|
||||
#include <chrono>
|
||||
#include <cstdint>
|
||||
|
||||
#include "cast/streaming/public/constants.h"
|
||||
#include "cast/streaming/ssrc.h"
|
||||
|
||||
namespace openscreen::cast {
|
||||
|
||||
// Common streaming configuration, established from the OFFER/ANSWER exchange,
|
||||
// that the Sender and Receiver are both assuming.
|
||||
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 = false,
|
||||
StreamType stream_type = StreamType::kUnknown,
|
||||
bool are_receiver_event_logs_enabled = true);
|
||||
SessionConfig(const SessionConfig& other);
|
||||
SessionConfig(SessionConfig&& other) noexcept;
|
||||
SessionConfig& operator=(const SessionConfig& other);
|
||||
SessionConfig& operator=(SessionConfig&& other) noexcept;
|
||||
~SessionConfig();
|
||||
|
||||
bool IsValid() const;
|
||||
|
||||
// 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;
|
||||
|
||||
// The type (e.g. audio or video) of the stream.
|
||||
StreamType stream_type = StreamType::kUnknown;
|
||||
|
||||
// Whether RTCP event logs from the Receiver are enabled. These are used for
|
||||
// generating statistics. It is recommended that this generally be true.
|
||||
bool are_receiver_event_logs_enabled = true;
|
||||
};
|
||||
|
||||
} // namespace openscreen::cast
|
||||
|
||||
#endif // CAST_STREAMING_PUBLIC_SESSION_CONFIG_H_
|
||||
Loading…
Add table
Add a link
Reference in a new issue