#pragma once #include class OBSBasic; struct BasicOutputHandler { OBSOutputAutoRelease fileOutput; OBSOutputAutoRelease streamOutput; OBSOutputAutoRelease replayBuffer; OBSOutputAutoRelease virtualCam; bool streamingActive = false; bool recordingActive = false; bool delayActive = false; bool replayBufferActive = false; bool virtualCamActive = false; OBSBasic *main; std::string outputType; std::string lastError; std::string lastRecordingPath; OBSSignal startRecording; OBSSignal stopRecording; OBSSignal startReplayBuffer; OBSSignal stopReplayBuffer; OBSSignal startStreaming; OBSSignal stopStreaming; OBSSignal startVirtualCam; OBSSignal stopVirtualCam; OBSSignal streamDelayStarting; OBSSignal streamStopping; OBSSignal recordStopping; OBSSignal recordFileChanged; OBSSignal replayBufferStopping; OBSSignal replayBufferSaved; inline BasicOutputHandler(OBSBasic *main_); virtual ~BasicOutputHandler(){}; virtual bool SetupStreaming(obs_service_t *service) = 0; virtual bool StartStreaming(obs_service_t *service) = 0; virtual bool StartRecording() = 0; virtual bool StartReplayBuffer() { return false; } virtual bool StartVirtualCam(); virtual void StopStreaming(bool force = false) = 0; virtual void StopRecording(bool force = false) = 0; virtual void StopReplayBuffer(bool force = false) { (void)force; } virtual void StopVirtualCam(); virtual bool StreamingActive() const = 0; virtual bool RecordingActive() const = 0; virtual bool ReplayBufferActive() const { return false; } virtual bool VirtualCamActive() const; virtual void Update() = 0; virtual void SetupOutputs() = 0; inline bool Active() const { return streamingActive || recordingActive || delayActive || replayBufferActive || virtualCamActive; } protected: void SetupAutoRemux(const char *&ext); std::string GetRecordingFilename(const char *path, const char *ext, bool noSpace, bool overwrite, const char *format, bool ffmpeg); }; BasicOutputHandler *CreateSimpleOutputHandler(OBSBasic *main); BasicOutputHandler *CreateAdvancedOutputHandler(OBSBasic *main);