/** * @file src/stream.h * @brief Declarations for the streaming protocols. */ #pragma once // standard includes #include // lib includes #include // local includes #include "audio.h" #include "crypto.h" #include "video.h" namespace stream { constexpr auto VIDEO_STREAM_PORT = 9; ///< GameStream base-port offset used for the video UDP stream. constexpr auto CONTROL_PORT = 10; ///< GameStream base-port offset used for the control channel. constexpr auto AUDIO_STREAM_PORT = 11; ///< GameStream base-port offset used for the audio UDP stream. struct session_t; /** * @brief Stream configuration shared by capture and network senders. */ struct config_t { audio::config_t audio; ///< Audio capture configuration for the stream. video::config_t monitor; ///< Video capture and encoder configuration for the selected monitor. int packetsize; ///< Maximum payload size for network packets. int minRequiredFecPackets; ///< Minimum recovery packets required before FEC is emitted. int mlFeatureFlags; ///< Moonlight feature flags negotiated for this session. int controlProtocolType; ///< GameStream control protocol variant selected by the client. int audioQosType; ///< Audio QoS type. int videoQosType; ///< Video QoS type. uint32_t encryptionFlagsEnabled; ///< Bitmask of GameStream encryption features enabled for the session. std::optional gcmap; ///< Optional game-controller mapping override from the launch request. }; namespace session { /** * @brief Enumerates supported state options. */ enum class state_e : int { STOPPED, ///< The session is stopped STOPPING, ///< The session is stopping STARTING, ///< The session is starting RUNNING, ///< The session is running }; /** * @brief Allocate and initialize platform input state for a stream. * * @param config Configuration values to apply. * @param launch_session Launch session. * @return Allocated object or identifier, or an error value on failure. */ std::shared_ptr alloc(config_t &config, rtsp_stream::launch_session_t &launch_session); /** * @brief Start a streaming session for the supplied peer address. * * @param session Active streaming or pairing session for the request. * @param addr_string Addr string. * @return Start status. */ int start(session_t &session, const std::string &addr_string); /** * @brief Stop a streaming session and prevent more packets from being queued. * * @param session Active streaming or pairing session for the request. */ void stop(session_t &session); /** * @brief Wait for worker threads owned by the session to exit. * * @param session Active streaming or pairing session for the request. */ void join(session_t &session); /** * @brief Platform handle returned from stream setup. * * @param session Active streaming or pairing session for the request. * @return Current lifecycle state for the stream session. */ state_e state(session_t &session); /** * @brief Return the paired client certificate for a stream session. * * @param session Active streaming or pairing session for the request. * @return PEM certificate associated with the session's client. */ const std::string &client_cert(session_t &session); } // namespace session } // namespace stream