Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Canvases - Part Tres (Multitrack Changes) #11833

Draft
wants to merge 18 commits into
base: master
Choose a base branch
from

Conversation

dsaedtler
Copy link
Contributor

@dsaedtler dsaedtler commented Feb 5, 2025

Description

Note

This contains the two previous PRs (#11823, #11832) and hence is a draft.

Adds canvases to the multitrack output and settings.

  • Updates multitrack schema to the latest version (2025-01-25)
  • Adds combobox to select an additional canvas for use with multitrack
  • Adds selected canvases to API request
  • Configures encoders to use canvas video instead of always using the main video
  • Bumps the limit for encoders per output to 10
    • In the future we might want to do 4+3 or 5+2 on GPUs capaable enough to not sacrifice too much on the landscape canvas, raising this to 10 should be relatively unproblematic, and it's a limit we have used in our closed beta builds for the past year

Motivation and Context

Allow multi-format (landscape + portrait) streaming. Plus potentially other multi-canvas use-cases in the future.

Documentation for the changes to the GetClientConfiguration API schema is here: https://d50yg09cghihd.cloudfront.net/other/20250207-DualFormatApiSpecification.pdf

How Has This Been Tested?

This was tested with this fork of the vertical canvas plugin that makes use of the new APIs: https://github.com/dsaedtler/obs-vertical-canvas

Note that the server-side changes are not yet live, and once they are live this feature will be restricted to select users while the Twitch/IVS components are being built.

Types of changes

  • New feature (non-breaking change which adds functionality)

Checklist:

  • My code has been run through clang-format.
  • I have read the contributing document.
  • My code is not on the master branch.
  • The code has been tested.
  • All commit messages are properly formatted and commits squashed where appropriate.
  • I have included updates to all appropriate documentation.

Allos creating additional views that act like a MAIN_VIEW instead of AUX_VIEW.
This adds a new obs_canvas object that acts as a shareable
(reference-counted) owner of views, mixes, and (optionally) scenes.

This is a step towards faciliatating multi-canvas and multi-output
features in OBS Studio.

It solves a number of complications that exist with the manual approach
of using views, such as audio mixing, source active-state tracking, and
scenes not havinga  reliable way of identifying the actual available
canvas size.
Since scenes now can have non-unique names by being part of different
canvases, use UUIDs instead.
Signals when a video reset has completed. This is mainly useful when
canvases or views are used, whose mixes will have been freed or
recreated during the reset.
In addition to the global reset, canvas video can be reset
independently. This signal can be used to detect if the canvas video
was reset, whether by another API user or through a global reset.
"revision" was defined to be a string in the schema but accepted
integers, this is enforced with the new schema version.
@dsaedtler dsaedtler force-pushed the rodney/multi-canvas-multitrack branch from 59c2394 to 63f97a8 Compare February 6, 2025 21:56
@WizardCM WizardCM added the New Feature New feature or plugin label Feb 12, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
New Feature New feature or plugin
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants