Fullscreen projector logistics

themusicman55

New Member
Is there a way to ensure that when one switches scenes, a full-screen projector is automatically reassigned to a specific one of three sources within the scene? The set-up is being used in a live concert setting by a single musician, so my aim is to minimise the number of keystrokes / mouse operations needed to switch scene and ensure that one of the new scene's sources is automatically displayed full-screen on a designated projector. The attached image shows what we need the result to look like - the right-hand side is what is displayed on the musician's console; the left-hand side is displayed on a large screen at the back of a concert hall stage (for an indication of size, think Sydney Opera House).
Cheers.
 

Attachments

  • Screenshot from 2023-04-11 15-03-33.jpg
    Screenshot from 2023-04-11 15-03-33.jpg
    620.8 KB · Views: 55

AaronD

Active Member
There are ways to get multiple different outputs from a single copy of OBS, but I think it works well to dedicate a separate copy to each. For example, I've built a rig around an online meeting platform (Jitsi, specifically, but it'll work just as well with Zoom, Skype, or anything else) that uses two copies of OBS:
  • Master takes the cameras, videos, graphics, etc., and live-produces a feed to the meeting. Same as a live stream, except that it goes through the Virtual Camera to the meeting instead. Audio goes through OBS's Monitor and a loopback, so the meeting can pick it up as a "mic".
  • Slavehas 3 scenes, and auto-produces the local display and recording:
    1. Window capture of the meeting, with audio from another loopback that is fed by the meeting
    2. Virtual Cam directly from Master, with audio from that loopback
    3. Same as #2 but with #1's audio ("voiceover")
The Master copy has a naming convention for its scenes that allows the Advanced Scene Switcher plugin to know which mode to be in, which then does some auto-mixing of the audio (fade-up/down during the transitions) and sends the appropriate message to its counterpart in the Slave copy to coordinate that scene-switch and audio mix as well.

You can use the --multi switch on the command line to tell OBS not to complain about multiple instances, and the --profile and --collection switches to make it load those instead of whatever it had last. obs --help to see everything that you can do there.

My rig is managed by a script, because there's a lot more going on than just OBS, and there's no way I'm going to remember how to set it all up and tear it down nicely. Run the script, wait for it to finish, run the meeting, then tell the script to shut down, wait for that to finish, and done.
 

AaronD

Active Member
If OBS is ONLY driving that projector - no stream, no recording, etc. - then your question screams of an XY Problem. Start over, and set up OBS to produce that content directly, the way that OBS is meant to be used.
 

themusicman55

New Member
There are ways to get multiple different outputs from a single copy of OBS, but I think it works well to dedicate a separate copy to each. For example, I've built a rig around an online meeting platform (Jitsi, specifically, but it'll work just as well with Zoom, Skype, or anything else) that uses two copies of OBS:
  • Master takes the cameras, videos, graphics, etc., and live-produces a feed to the meeting. Same as a live stream, except that it goes through the Virtual Camera to the meeting instead. Audio goes through OBS's Monitor and a loopback, so the meeting can pick it up as a "mic".
  • Slavehas 3 scenes, and auto-produces the local display and recording:
    1. Window capture of the meeting, with audio from another loopback that is fed by the meeting
    2. Virtual Cam directly from Master, with audio from that loopback
    3. Same as #2 but with #1's audio ("voiceover")
The Master copy has a naming convention for its scenes that allows the Advanced Scene Switcher plugin to know which mode to be in, which then does some auto-mixing of the audio (fade-up/down during the transitions) and sends the appropriate message to its counterpart in the Slave copy to coordinate that scene-switch and audio mix as well.

You can use the --multi switch on the command line to tell OBS not to complain about multiple instances, and the --profile and --collection switches to make it load those instead of whatever it had last. obs --help to see everything that you can do there.

My rig is managed by a script, because there's a lot more going on than just OBS, and there's no way I'm going to remember how to set it all up and tear it down nicely. Run the script, wait for it to finish, run the meeting, then tell the script to shut down, wait for that to finish, and done.
That may work. I've been taking advice from two BBC video production experts (who conveniently are friends of mine) but even they concede that the issue is not entirely straightforward. I've used OBS with both Jitsi and Zoom, works well for that. In this case the problem such as it is arises because in a live concert environment, the musician needs to be able to switch scenes in real time, with split second timing and have the huge audience display as seamless as possible. I'm trying to script it such that the poor bloke has to do nothing more than tap a foot controller to achieve that. Bit of an ask, really, but an interesting challenge. He's using MAC, I'm using Ubuntu 22.04, so every script I write needs to cater for all eventualities within those display server environments. Thanks for the advice.
 

AaronD

Active Member
The Master copy has a naming convention for its scenes that allows the Advanced Scene Switcher plugin to know which mode to be in, which then does some auto-mixing of the audio (fade-up/down during the transitions) and sends the appropriate message to its counterpart in the Slave copy to coordinate that scene-switch and audio mix as well.
You might also be interested to know how those messages are sent. I just now started on my 4th method, using a "sandbox" rig before I move it to production:
  1. Before Adv. SS was anywhere near as capable as it is now, I had the Master write the name of the current scene to a file, and then the Slave would read that file, do a regex on it, and switch accordingly. It works, but I don't like thrashing the filesystem for what should be an inter-process message of some kind.
  2. Then when I discovered that OBS supports WebSockets, I wrote a Python script to connect to both instances and subscribe to the Master's scene-change event. Then it would do the regex and command the Slave. That worked until OBS 28 broke the WebSocket server so that an external thing can't connect separately to two copies anymore.
  3. But, by that time, Adv. SS became capable enough that I could do the WebSocket connection entirely in there. So the Master runs the server and the Slave connects directly to it. No more Python script; just the bash one to set it all up, wait for done, and tear it down again.
    But, the WebSocket messages don't always get through, even on the same machine. I tried for a while to repeat sending it, first with two identical lines in Adv. SS and then with a "spam loop" that runs forever. The "spam loop" finally works, but it completely ties up the Slave so that I can't override the automatic production if for some reason I wanted to, since it's *always* getting those commands instead of once per change. And I also had a problem of not enough audio channels in OBS to do all of the mix changes that I wanted. I tried switching to 4.0 channels instead of stereo, with the idea of "4-way panning" stuff around and mixing/routing that in the DAW, but OBS doesn't do multi-way panning.
  4. So I completely redid the DAW, using slow side-chained Gates (*Keyers*, at that point) instead of OBS's fades, thus keeping the audio path entirely in the DAW, and now the Master OBS only mutes or passes a 10Hz sine that is generated from the DAW and used to trigger the Gates. And since I have that now, I also feed the 10Hz present-or-not signal into the Slave's Adv. SS to serve as the automation messages. Two of those sines, actually - using a duplicated global source in OBS that is panned hard left and hard right, and each one muted or not by Adv. SS - so I can have essentially a 2-bit constant command with 4 possible states.
    10Hz is because OBS only has a single Monitor device, which is how it feeds back to the DAW, and I need to keep it separate from whatever media I might play to the meeting. A steep crossover at 20Hz works nicely for that.
    It's actually a duplicated channel strip in the DAW, with a highpass for the audio and a lowpass for the control, but that's exactly what a crossover *is*, except for the integration into one box. I tried the one box too, but I couldn't figure out how to route away from its many-channel output. The many meters made sense when I gave it my test signals, but a separate meter hooked up to the corresponding outputs didn't match. But for a fixed 2-way X-over, the duplicated channel strip with separate filters is fine.
The DAW is Ardour, by the way, and comes pre-installed with Ubuntu Studio, along with what had already become my favorite audio plugins and a bunch more.
 

AaronD

Active Member
...in a live concert environment, the musician needs to be able to switch scenes in real time, with split second timing and have the huge audience display as seamless as possible. I'm trying to script it such that the poor bloke has to do nothing more than tap a foot controller to achieve that.
Still doesn't sound like you need to show individual parts of a scene. You can have a bunch of scenes, with each one shown in its entirety, and then you switch scenes like OBS is designed to do. And then a fullscreen projector from the Program output "just works"...if you can convince a Mac specifically to let you do that. There's at least one thread about that in here. :-/

I also wonder if you even need OBS. Maybe something else like PowerPoint or its open-source equivalent LibreOffice will work. Or OpenLP, which is designed to show media to churches but I've used it for general presentations too, since it also does videos with both an advance button and random selection from the local computer and a remote control app. LibreOffice and OpenLP also come pre-installed with Ubuntu Studio.
Then the advance pedal appears to the computer as a keyboard...
 
Top