feat: add WebRTC streaming via str0m + portal session persistence
- Add src/webrtc.rs: HTTP signaling server + str0m Sans-IO WebRTC transport with H.264 Annex-B → RTP packetization and key-frame request handling - avhw: introduce FrameOutput enum (Muxer | Channel) so SwEncState can output to either MP4 muxer or crossbeam channel for WebRTC - cap_portal: support portal session restore tokens (PersistMode::ExplicitlyRevoked) to skip re-authorization dialog; add --no-persist flag to force fresh dialog - args: make --output optional when --port is used for WebRTC mode - state_portal: integrate WebRTC pipeline (encoder channel → RTP forwarding) with shorter GOP for WebRTC (fps/2, min 10) - main: redirect tracing to stderr; validate --output or --port required - Add dependencies: str0m 0.20, serde_json 1, dirs 6
This commit is contained in:
+7
-3
@@ -3,9 +3,9 @@ use clap::Parser;
|
||||
#[derive(Parser, Debug, Clone)]
|
||||
#[command(name = "wl-webrtc", about = "Wayland screen capture and encoding tool")]
|
||||
pub struct Args {
|
||||
/// Output file path (e.g., output.mp4, output.mkv)
|
||||
/// Output file path (e.g., output.mp4, output.mkv). Optional when using --port for WebRTC mode
|
||||
#[arg(short, long)]
|
||||
pub output: String,
|
||||
pub output: Option<String>,
|
||||
|
||||
/// Wayland output name to capture
|
||||
#[arg(long)]
|
||||
@@ -43,7 +43,11 @@ pub struct Args {
|
||||
#[arg(long)]
|
||||
pub backend: Option<String>,
|
||||
|
||||
/// Port for WebTransport server (Phase 2, unused in MVP)
|
||||
/// Port for WebRTC HTTP signaling server; 0 keeps MP4 file output mode
|
||||
#[arg(long, default_value_t = 0)]
|
||||
pub port: u16,
|
||||
|
||||
/// Force re-authorization dialog (ignore saved portal restore token)
|
||||
#[arg(long)]
|
||||
pub no_persist: bool,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user