Implement Cast Streaming mirroring, DLNA casting, daemon+GUI, and breadd integration
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:
Breadway 2026-08-03 09:07:21 +08:00
parent 887c29002f
commit 8c745d18e0
283 changed files with 36788 additions and 0 deletions

34
bakery.toml Normal file
View file

@ -0,0 +1,34 @@
name = "breadcast"
description = "Cast your screen to any Chromecast/Google TV or DLNA renderer — daemon + GTK4 popup"
binaries = ["breadcast", "breadcastd"]
# gst-plugin-va: the `vah264enc` element both encode pipelines use (see
# breadcast-core/src/pipeline/mod.rs) -- a separate Arch package from
# gst-plugins-bad itself, not bundled into it. jsoncpp/openssl: runtime
# shared-library deps of breadcastd itself (not just a build dep of
# breadcast-caststream-sys), confirmed via `ldd target/release/breadcastd`
# showing libjsoncpp.so/libcrypto.so -- the vendored openscreen Cast
# Streaming code (see breadcast-caststream-sys/vendor/openscreen) links
# dynamically against the system's jsoncpp/libcrypto rather than vendoring
# them too.
system_deps = [
"gtk4",
"gtk4-layer-shell",
"gstreamer",
"gst-plugin-pipewire",
"gst-plugins-bad",
"gst-plugin-hlssink3",
"gst-plugin-va",
"jsoncpp",
"openssl",
]
optional_system_deps = ["hyprland", "xdg-desktop-portal-hyprland"]
bread_deps = []
[[service]]
unit = "breadcastd.service"
enable = true
[install]
post_install = [
"systemctl --user is-active --quiet breadcastd || systemctl --user start breadcastd",
]