#pragma once #include "screencast/capture/capture.h" #include "screencast/codec/decoder.h" #include "screencast/codec/encoder.h" #include "screencast/network/transport.h" #include "screencast/render/renderer.h" #include #include namespace sc { struct SenderPipelineConfig { CaptureTarget capture_target; EncoderConfig encoder; Endpoint local_rtp_endpoint; std::optional signaling_server; // Where encoded RTP packets are sent. Defaults to the local loopback so // a sender and receiver on one machine work without any configuration. Endpoint peer_rtp_endpoint{"127.0.0.1", 5004}; }; struct ReceiverPipelineConfig { DecoderConfig decoder; Endpoint local_rtp_endpoint; std::optional peer_signaling; RendererConfig renderer; // TCP port the signaling server listens on (offers arrive here). std::uint16_t signaling_port = 5005; }; // Sender pipeline: capture → encode → packetize → RTP/UDP. class SenderPipeline { public: explicit SenderPipeline(SenderPipelineConfig config); ~SenderPipeline(); bool start(); void stop(); private: class Impl; std::unique_ptr impl_; }; // Receiver pipeline: RTP/UDP → depacketize → decode → render. class ReceiverPipeline { public: explicit ReceiverPipeline(ReceiverPipelineConfig config); ~ReceiverPipeline(); bool start(); void stop(); private: class Impl; std::unique_ptr impl_; }; } // namespace sc