Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
b99bbc0
Pass saved streaming encoder settings to Factory API video encoder
aleksandr-voitenko Apr 7, 2026
18d15e3
Fix apply encoder settings to video encoder instance when recording w…
michelinewu Apr 7, 2026
d6ab2f4
Test fixes.
michelinewu Apr 8, 2026
b1918cf
Remove audio track from enhanced broadcasting.
michelinewu Apr 8, 2026
fa8e3c2
Fix for undefined audio track.
michelinewu Apr 8, 2026
438af75
Fix Twitch VOD and enhanced broadcasting.
michelinewu Apr 8, 2026
c4339ec
Fix enhanced broadcasting test.
michelinewu Apr 8, 2026
fa483cf
Fix enhanced broadcasting test.
michelinewu Apr 8, 2026
02f4137
Fix VOD part of Enhanced Broadcasting Test.
michelinewu Apr 9, 2026
4d29875
Remove multistreaming from enhanced broadcasting test.
michelinewu Apr 9, 2026
5245f1d
Remove VOD from Enhanced Broadcasting Test.
michelinewu Apr 9, 2026
0ea7dec
Merge branch 'staging' into fix-factory-api-video-encoder-bitrate
michelinewu Apr 10, 2026
7c0dcf4
Skip Enhnaced Broadcasting test.
michelinewu Apr 10, 2026
aae2d62
Fix destroy enhanced broadcasting instances and error handling.
michelinewu Apr 10, 2026
79c8a27
Remove check for second signal from dual output ultra test.
michelinewu Apr 10, 2026
33c93b6
Fix for strictnulls.
michelinewu Apr 10, 2026
34e8662
Remove dual output from selective recording test.
michelinewu Apr 10, 2026
7acd61e
Re-enable Enhanced Broadcasting test.
michelinewu Apr 10, 2026
579a131
Disable enhanced broadcasting test.
michelinewu Apr 10, 2026
c8d58e8
Fixes for dual output and enhanced broadcasting.
michelinewu Apr 13, 2026
7b2e508
Add YouTube dual stream to test.
michelinewu Apr 13, 2026
620a377
Re-enable Twitch Enhanced Broadcasting test.
michelinewu Apr 13, 2026
94a52ab
Test add delay.
michelinewu Apr 14, 2026
254aacc
Fix crash for vertical display and enhanced broadcasting.
michelinewu Apr 14, 2026
f37c3b2
Preserve error type for factory output errors.
michelinewu Apr 14, 2026
e6866b5
Pass in display when starting stream.
michelinewu Apr 14, 2026
6047e86
Merge branch 'staging' into fix-factory-api-video-encoder-bitrate
michelinewu Apr 14, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 11 additions & 6 deletions app/services/settings/output/output-settings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -647,18 +647,18 @@ export class OutputSettingsService extends Service {
'VodTrackIndex',
);

return { ...advancedStreamSettings, twitchTrack };
return { ...advancedStreamSettings, twitchTrack } as IAdvancedStreamingOutputSettings;
}

return advancedStreamSettings;
return advancedStreamSettings as IAdvancedStreamingOutputSettings;
} else {
return {
videoEncoder,
enforceServiceBitrate,
useAdvanced,
customEncSettings,
enableTwitchVOD,
};
} as ISimpleStreamingOutputSettings;
}
}

Expand Down Expand Up @@ -806,14 +806,19 @@ export class OutputSettingsService extends Service {
return this.settingsService.findSettingValue(output, 'Recording', 'RecAAudio') ?? 'ffmpeg_aac';
}

getStreamingVideoEncoderSettings(): ISettings {
getStreamingVideoEncoderSettings(mode: TOutputSettingsMode): ISettings {
const output = this.settingsService.state.Output.formData;

const bitrate = this.settingsService.findSettingValue(output, 'Streaming', 'VBitrate');
const bitrate =
this.settingsService.findSettingValue(output, 'Streaming', 'bitrate') ??
this.settingsService.findSettingValue(output, 'Streaming', 'VBitrate');

if (mode === 'Simple') {
return { bitrate };
}

// TODO: these are only being fetched in advanced mode
const rateControl = this.settingsService.findSettingValue(output, 'Streaming', 'rate_control');
// const bitrate = this.settingsService.findSettingValue(output, 'Streaming', 'bitrate');
const keyintSec = this.settingsService.findSettingValue(output, 'Streaming', 'keyint_sec');
const x264opts = this.settingsService.findSettingValue(output, 'Streaming', 'x264opts');

Expand Down
21 changes: 17 additions & 4 deletions app/services/streaming/streaming.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2237,10 +2237,23 @@ export class StreamingService
key === 'videoEncoder' &&
(contextName !== 'enhancedBroadcasting' || isEnhancedBroadcastingContext)
) {
instance.videoEncoder = VideoEncoderFactory.create(
settings.videoEncoder,
`video-encoder-${type}-${contextName}`,
);
const encoderSettings =
type === 'streaming'
? this.outputSettingsService.getStreamingVideoEncoderSettings(mode)
: undefined;

if (encoderSettings) {
instance.videoEncoder = VideoEncoderFactory.create(
settings.videoEncoder,
`video-encoder-${type}-${contextName}`,
encoderSettings,
);
} else {
instance.videoEncoder = VideoEncoderFactory.create(
settings.videoEncoder,
`video-encoder-${type}-${contextName}`,
);
}

if (instance.videoEncoder.lastError) {
console.error(
Expand Down
8 changes: 7 additions & 1 deletion test/regular/recording.ts
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,13 @@ async function validateRecordingFiles(
waitForDisplayed('h1=Recordings');

const numRecordings = await getNumElements('[data-test=filename]');
t.is(numRecordings, numFiles, 'All recordings show in history matches number of files recorded');
t.is(
numRecordings,
numFiles,
`All recordings from ${
advanced ? 'Advanced' : 'Simple'
} mode in history matches number of files recorded`,
);
}

/**
Expand Down
Loading