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:
parent
c0f19b95d5
commit
2963b3b8ed
@ -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;
|
||||
|
@ -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; }
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -544,6 +544,8 @@ public slots:
|
||||
void DeferSaveBegin();
|
||||
void DeferSaveEnd();
|
||||
|
||||
void DisplayStreamStartError();
|
||||
|
||||
void StartStreaming();
|
||||
void StopStreaming();
|
||||
void ForceStopStreaming();
|
||||
|
Loading…
Reference in New Issue
Block a user