0
0
mirror of https://github.com/obsproject/obs-studio.git synced 2024-09-20 04:42:18 +02:00

UI: Create output before calling start stream event

Allows modifying the output OBS_FRONTEND_EVENT_STREAMING_STARTING.
This commit is contained in:
jp9000 2020-09-16 22:20:02 -07:00
parent c0f19b95d5
commit 2963b3b8ed
4 changed files with 40 additions and 21 deletions

View File

@ -279,6 +279,7 @@ struct SimpleOutput : BasicOutputHandler {
void UpdateRecording();
bool ConfigureRecording(bool useReplayBuffer);
virtual bool SetupStreaming(obs_service_t *service) override;
virtual bool StartStreaming(obs_service_t *service) override;
virtual bool StartRecording() override;
virtual bool StartReplayBuffer() override;
@ -726,7 +727,7 @@ const char *FindAudioEncoderFromCodec(const char *type)
return nullptr;
}
bool SimpleOutput::StartStreaming(obs_service_t *service)
bool SimpleOutput::SetupStreaming(obs_service_t *service)
{
if (!Active())
SetupOutputs();
@ -820,9 +821,11 @@ bool SimpleOutput::StartStreaming(obs_service_t *service)
obs_output_set_video_encoder(streamOutput, h264Streaming);
obs_output_set_audio_encoder(streamOutput, aacStreaming, 0);
obs_output_set_service(streamOutput, service);
return true;
}
/* --------------------- */
bool SimpleOutput::StartStreaming(obs_service_t *service)
{
bool reconnect = config_get_bool(main->Config(), "Output", "Reconnect");
int retryDelay =
config_get_uint(main->Config(), "Output", "RetryDelay");
@ -871,6 +874,7 @@ bool SimpleOutput::StartStreaming(obs_service_t *service)
else
lastError = string();
const char *type = obs_service_get_output_type(service);
blog(LOG_WARNING, "Stream output type '%s' failed to start!%s%s", type,
hasLastError ? " Last Error: " : "", hasLastError ? error : "");
return false;
@ -1064,6 +1068,7 @@ struct AdvancedOutput : BasicOutputHandler {
void SetupOutputs() override;
int GetAudioBitrate(size_t i) const;
virtual bool SetupStreaming(obs_service_t *service) override;
virtual bool StartStreaming(obs_service_t *service) override;
virtual bool StartRecording() override;
virtual bool StartReplayBuffer() override;
@ -1498,7 +1503,7 @@ int AdvancedOutput::GetAudioBitrate(size_t i) const
return FindClosestAvailableAACBitrate(bitrate);
}
bool AdvancedOutput::StartStreaming(obs_service_t *service)
bool AdvancedOutput::SetupStreaming(obs_service_t *service)
{
int streamTrack =
config_get_int(main->Config(), "AdvOut", "TrackIndex") - 1;
@ -1600,9 +1605,11 @@ bool AdvancedOutput::StartStreaming(obs_service_t *service)
obs_output_set_video_encoder(streamOutput, h264Streaming);
obs_output_set_audio_encoder(streamOutput, streamAudioEnc, 0);
return true;
}
/* --------------------- */
bool AdvancedOutput::StartStreaming(obs_service_t *service)
{
obs_output_set_service(streamOutput, service);
bool reconnect = config_get_bool(main->Config(), "Output", "Reconnect");
@ -1651,6 +1658,7 @@ bool AdvancedOutput::StartStreaming(obs_service_t *service)
else
lastError = string();
const char *type = obs_service_get_output_type(service);
blog(LOG_WARNING, "Stream output type '%s' failed to start!%s%s", type,
hasLastError ? " Last Error: " : "", hasLastError ? error : "");
return false;

View File

@ -36,6 +36,7 @@ struct BasicOutputHandler {
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; }

View File

@ -5496,6 +5496,23 @@ void OBSBasic::OpenSceneFilters()
#define VIRTUAL_CAM_STOP \
"==== Virtual Camera Stop ==========================================="
void OBSBasic::DisplayStreamStartError()
{
QString message = !outputHandler->lastError.empty()
? QTStr(outputHandler->lastError.c_str())
: QTStr("Output.StartFailedGeneric");
ui->streamButton->setText(QTStr("Basic.Main.StartStreaming"));
ui->streamButton->setEnabled(true);
ui->streamButton->setChecked(false);
if (sysTrayStream) {
sysTrayStream->setText(ui->streamButton->text());
sysTrayStream->setEnabled(true);
}
QMessageBox::critical(this, QTStr("Output.StartStreamFailed"), message);
}
void OBSBasic::StartStreaming()
{
if (outputHandler->StreamingActive())
@ -5503,6 +5520,11 @@ void OBSBasic::StartStreaming()
if (disableOutputsRef)
return;
if (!outputHandler->SetupStreaming(service)) {
DisplayStreamStartError();
return;
}
if (api)
api->on_event(OBS_FRONTEND_EVENT_STREAMING_STARTING);
@ -5518,21 +5540,7 @@ void OBSBasic::StartStreaming()
}
if (!outputHandler->StartStreaming(service)) {
QString message =
!outputHandler->lastError.empty()
? QTStr(outputHandler->lastError.c_str())
: QTStr("Output.StartFailedGeneric");
ui->streamButton->setText(QTStr("Basic.Main.StartStreaming"));
ui->streamButton->setEnabled(true);
ui->streamButton->setChecked(false);
if (sysTrayStream) {
sysTrayStream->setText(ui->streamButton->text());
sysTrayStream->setEnabled(true);
}
QMessageBox::critical(this, QTStr("Output.StartStreamFailed"),
message);
DisplayStreamStartError();
return;
}

View File

@ -544,6 +544,8 @@ public slots:
void DeferSaveBegin();
void DeferSaveEnd();
void DisplayStreamStartError();
void StartStreaming();
void StopStreaming();
void ForceStopStreaming();