#pragma once #include "BasicOutputHandler.hpp" struct AdvancedOutput : BasicOutputHandler { OBSEncoder streamAudioEnc; OBSEncoder streamArchiveEnc; OBSEncoder streamTrack[MAX_AUDIO_MIXES]; OBSEncoder recordTrack[MAX_AUDIO_MIXES]; OBSEncoder videoStreaming; OBSEncoder videoRecording; bool ffmpegOutput; bool ffmpegRecording; bool useStreamEncoder; bool useStreamAudioEncoder; bool usesBitrate = false; AdvancedOutput(OBSBasic *main_); inline void UpdateStreamSettings(); inline void UpdateRecordingSettings(); inline void UpdateAudioSettings(); virtual void Update() override; inline std::optional VodTrackMixerIdx(obs_service_t *service); inline void SetupVodTrack(obs_service_t *service); inline void SetupStreaming(); inline void SetupRecording(); inline void SetupFFmpeg(); void SetupOutputs() override; int GetAudioBitrate(size_t i, const char *id) const; virtual std::shared_future SetupStreaming(obs_service_t *service, SetupStreamingContinuation_t continuation) override; virtual bool StartStreaming(obs_service_t *service) override; virtual bool StartRecording() override; virtual bool StartReplayBuffer() override; virtual void StopStreaming(bool force) override; virtual void StopRecording(bool force) override; virtual void StopReplayBuffer(bool force) override; virtual bool StreamingActive() const override; virtual bool RecordingActive() const override; virtual bool ReplayBufferActive() const override; bool allowsMultiTrack(); };