Skip to content

Fix a batch of open issues: source audio, output restarts, file names, video reset, websocket events - #194

Open
QuentinDanblon wants to merge 9 commits into
exeldro:masterfrom
QuentinDanblon:claude/keen-tesla-5zrs7g
Open

QuentinDanblon wants to merge 9 commits into
exeldro:masterfrom
QuentinDanblon:claude/keen-tesla-5zrs7g

Conversation

@QuentinDanblon

Copy link
Copy Markdown

No description provided.

- Keep spaces in the names of files created by a split (exeldro#164)
- Give each recording its own file when two filters generate the same
  name, instead of writing over each other (exeldro#181, exeldro#105)
- Manual split (hotkey, button, websocket) works without automatic
  splitting; the Split button is no longer greyed out with the group
- Really fragment fragmented_mp4 / fragmented_mov outputs
- No fixed 512 byte limit on the recording path
- Restart the recording when its path, container or filename pattern
  changes while recording (upstream PR exeldro#183)
- Allow restarting a file output while the replay buffer or stream
  shares the encoder
- Use the right default path for Standard vs FFmpeg advanced recording
  and do not crash on missing profile values (exeldro#42)
- Save Replay hotkey uses the plugin's own text (exeldro#193)
- Stop rendering and holding the source once nothing records it, and
  stop outputs when the parent source is removed (exeldro#38, exeldro#135, exeldro#109)
- Keep the replay buffer hotkey bindings when its output is recreated
  (exeldro#24)
- Configurable replay buffer memory limit instead of a fixed 10 GB, so
  long replays work (exeldro#170)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JsN9xfAQr8oDP7GtCfzqaN
record_started, record_file_changed, record_stopped,
replay_buffer_started, replay_buffer_stopped, stream_started and
stream_stopped are emitted next to the existing replay_buffer_saved,
with the filter, its source and the file path. Signals are disconnected
from an output that could not be stopped in time so a late signal never
reaches a destroyed filter. The README lists the requests and events.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JsN9xfAQr8oDP7GtCfzqaN
Audio: in Source mode (and with Different Audio and a single source) the
filter read the source's Track 1 mix. libobs only renders a track mix
while one of its own outputs uses that track and the source is routed to
it, so recordings were silent when OBS itself was not recording, when the
source was not on Track 1, or when Track 1 was unused (exeldro#32, exeldro#150, exeldro#155,
exeldro#116, exeldro#67, exeldro#23, exeldro#113). The audio is now taken with an audio capture
callback on the source (after its filters, with its volume and mute) into
a small buffer that the filter's audio output reads.

Outputs that stopped on their own (disk full, failed start, lost
connection, capture gone) were never started again because the inactive
output object was kept. They are now dropped and recreated, at most every
5 seconds (exeldro#84, exeldro#91, exeldro#92).

Also adds a typed path field that overrides the Browse path and may be
relative, e.g. for a portable install (exeldro#171).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JsN9xfAQr8oDP7GtCfzqaN
- obs_reset_video frees the video_t of every view. The filter kept using
  it and its encoder, which crashed the next recording after the OBS
  resolution or color format was changed (exeldro#143). The video_reset signal
  now makes each filter drop its outputs, encoder and video output and
  build them again.
- {source}, {filter} and {recording} (the current OBS recording file
  name) can be used in the recording and replay filename formats (exeldro#102,
  exeldro#100).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JsN9xfAQr8oDP7GtCfzqaN
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JsN9xfAQr8oDP7GtCfzqaN
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JsN9xfAQr8oDP7GtCfzqaN
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JsN9xfAQr8oDP7GtCfzqaN
os_fopen returns a FILE of the C runtime libobs uses; closing it with
the plugin's fclose breaks when the two runtimes differ. Windows uses
CreateFileW with CREATE_NEW.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JsN9xfAQr8oDP7GtCfzqaN
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JsN9xfAQr8oDP7GtCfzqaN
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants