83 lines
3.0 KiB
C++
83 lines
3.0 KiB
C++
/**
|
|
* @file src/rtsp.h
|
|
* @brief Declarations for RTSP streaming.
|
|
*/
|
|
#pragma once
|
|
|
|
// standard includes
|
|
#include <atomic>
|
|
|
|
// local includes
|
|
#include "crypto.h"
|
|
#include "thread_safe.h"
|
|
|
|
namespace rtsp_stream {
|
|
constexpr auto RTSP_SETUP_PORT = 21; ///< GameStream base-port offset used for the RTSP setup listener.
|
|
|
|
/**
|
|
* @brief RTSP launch session state shared with stream setup.
|
|
*/
|
|
struct launch_session_t {
|
|
uint32_t id; ///< RTSP launch-session identifier assigned before stream startup.
|
|
|
|
crypto::aes_t gcm_key; ///< AES-GCM key negotiated for encrypted RTSP messages.
|
|
crypto::aes_t iv; ///< Initial RTSP AES-GCM IV supplied by the client.
|
|
|
|
std::string av_ping_payload; ///< AV ping payload.
|
|
uint32_t control_connect_data; ///< Client-provided token used when connecting the control channel.
|
|
|
|
bool host_audio; ///< Whether host audio should be played locally.
|
|
std::string unique_id; ///< Moonlight client unique identifier for this launch request.
|
|
int width; ///< Frame or display width in pixels.
|
|
int height; ///< Frame or display height in pixels.
|
|
int fps; ///< Requested video frame rate.
|
|
int gcmap; ///< Game controller mapping requested by the client.
|
|
int appid; ///< Application ID requested for launch or resume.
|
|
int surround_info; ///< Encoded GameStream surround-sound capability flags.
|
|
std::string surround_params; ///< Client-provided surround-sound layout parameters.
|
|
bool continuous_audio; ///< Whether audio packets continue during silence.
|
|
bool enable_hdr; ///< Whether HDR streaming is requested.
|
|
bool enable_sops; ///< Whether sequence output protection is requested.
|
|
|
|
std::optional<crypto::cipher::gcm_t> rtsp_cipher; ///< AES-GCM cipher used once encrypted RTSP is negotiated.
|
|
std::string rtsp_url_scheme; ///< URL scheme selected by the RTSP SETUP flow.
|
|
uint32_t rtsp_iv_counter; ///< Counter value mixed into encrypted RTSP IVs.
|
|
std::string client_cert; ///< PEM certificate for the paired Moonlight client.
|
|
};
|
|
|
|
/**
|
|
* @brief Queue a launch session until the RTSP client connects.
|
|
*
|
|
* @param launch_session Session state prepared by the GameStream launch handler.
|
|
*/
|
|
void launch_session_raise(std::shared_ptr<launch_session_t> launch_session);
|
|
|
|
/**
|
|
* @brief Clear state for the specified launch session.
|
|
* @param launch_session_id The ID of the session to clear.
|
|
*/
|
|
void launch_session_clear(uint32_t launch_session_id);
|
|
|
|
/**
|
|
* @brief Get the number of active sessions.
|
|
* @return Count of active sessions.
|
|
*/
|
|
int session_count();
|
|
|
|
/**
|
|
* @brief Terminates all running streaming sessions.
|
|
*/
|
|
void terminate_sessions();
|
|
/**
|
|
* @brief Terminate active sessions associated with a client certificate.
|
|
*
|
|
* @param cert Certificate data or object used by the operation.
|
|
*/
|
|
void terminate_sessions_by_cert(std::string_view cert);
|
|
|
|
/**
|
|
* @brief Runs the RTSP server loop.
|
|
*/
|
|
void start();
|
|
} // namespace rtsp_stream
|