Beam

Beam v1.0.0

Hello all!

I would love to try out this solution, but I need a MacOS version, it can be in ROSETTA, even though I would prefer in M1 (I have a M1Max64Gb) but I mean, I already use Teleport on Rosetta version of OBS so... The thing is: Teleport don´t have Alpha transparency. NDI is just too laggy for my needs. Teleport is flawless in terms of not lagging, and quality is perfect. But maybe BEAM will be better than any of those solutions. Can you please try to do it for MAC? I can be tester, helper, anything... @YorVeX I will thank you very much, send me DM if you want ;)

A few points:

First, to send NDI, are you using the NDI output option under Tools? If you are, are you using the "BGRA" colorspace in the Advanced menu? You need to in order to have alpha channel stream support. If you are using a filter, you can get away with a lot more, but you need to use a second stream if you need to send audio.

If you're set up like you're supposed to and it's STILL lagging, I agree with @YorVeX. If you're using NDI and you're at gigabit ethernet already, you have other underlying problems. Your network speed is likely not the problem. Also, be sure you're using Apple Silicon versions of OBS Studio, the OBS-NDI plugin as well as the NDI runtime itself. I suspect the very instant you involve Rosetta at any part of the stack, whether it's NDI or Beam you're using, notwithstanding network bandwidth for a moment, your day will get a lot worse.

But then again, full disclosure, I am not a Mac person. I would say other things about that, but I do not want to piss people off, 'specially the moderators. :3 But I digress.

As for Teleport, due to the very way it works, it cannot support alpha channels because it uses a JPEG-based algorithm. I don't know whether it's "true" MJPEG (Motion JPEG) like many other programs out there use, but it basically compresses individual frames, then shoots them over the network.

--Katt. =^.^=
 
I think there is freeze when the NIC driver used by beam becomes responseless while using beam, it doesn't work anymore. and there is also freeze at OBS shutdown procedure.
when I press exit of OBS after beam freeze, OBS also freeze, so should force shutdown. (beam GUI works even after freeze, but does nothing)

how to reproduce
Alt-tabbing games which set as fullscreen(fullscreen optimization disabled)
Change the NIC driver setting used by beam in device manager
Disable, and enable the NIC driver used by beam in device manager or network connections

NIC: ConnectX-3 to both sides, directly connected
Also, reproduced by ASIX AX88179
 

YorVeX

Member
I think there is freeze when the NIC driver used by beam becomes responseless while using beam, it doesn't work anymore. and there is also freeze at OBS shutdown procedure.
when I press exit of OBS after beam freeze, OBS also freeze, so should force shutdown. (beam GUI works even after freeze, but does nothing)

how to reproduce
Alt-tabbing games which set as fullscreen(fullscreen optimization disabled)
Change the NIC driver setting used by beam in device manager
Disable, and enable the NIC driver used by beam in device manager or network connections

NIC: ConnectX-3 to both sides, directly connected
Also, reproduced by ASIX AX88179
That's a bit like asking Tesla to fix their car because it crashes when you remove and replace the tires while driving 100.
If you freeze (because of config change) or even disable the network driver while Beam is using it, for sure that will cause problems. The solution: simply don't do that. Just as Tesla would tell you not to work on the tires while driving. You can't work on hardware while it is being used.

I can't reproduce issues while alt-tabbing myself, can you send a log of both sender and receiver when that happens please? Does it happen with Arma 3? Do you use a different resolution in Arma than on your desktop? Unfortunately I don't have that game myself, I can only try with a few different games.
 
That's a bit like asking Tesla to fix their car because it crashes when you remove and replace the tires while driving 100.
If you freeze (because of config change) or even disable the network driver while Beam is using it, for sure that will cause problems. The solution: simply don't do that. Just as Tesla would tell you not to work on the tires while driving. You can't work on hardware while it is being used.
Yeah, literally how to reproduce. it is the easiest way to reproduce the symptom.

Resolution is same, both desktop, game are 1920x1080.

https://obsproject.com/logs/GuZ3fT8k89vgbJ7N - receiver
https://obsproject.com/logs/NjZCv2TbuuMZvRBq - sender

When it happened, doesn't need to restart receiver, only sender.

BTW, I updated the GPU driver, and the symptom is mitigated alot, really alot... 552.22 to 555.85
But, still happening. games using D3D11, D3D12 barely cauing it now, but I think games using OpenGL do often.
https://github.com/exch-bms2/beatoraja at least it is causing it alot.
Before updating GPU driver, every games with fullscreen are causing it within 1~3 times of alt-tab.(fullscreen optimization disabled) even moonlight did.
But now, after updating GPU driver, it happened only once by Arma 3, dead space, EZ2ON with many times of alt-tab while I'm collecting logs.
Other games tested, Ready or Not, Squad, Battlebit, Project DIVA. not happened.
And seems large pages option causes it more. Arma 3, beatoraja can use it.
 
Last edited:

YorVeX

Member
Yeah, literally how to reproduce. it is the easiest way to reproduce the symptom.

Resolution is same, both desktop, game are 1920x1080.

https://obsproject.com/logs/GuZ3fT8k89vgbJ7N - receiver
https://obsproject.com/logs/NjZCv2TbuuMZvRBq - sender

When it happened, doesn't need to restart receiver, only sender.

BTW, I updated the GPU driver, and the symptom is mitigated alot, really alot... 552.22 to 555.85
But, still happening. games using D3D11, D3D12 barely cauing it now, but I think games using OpenGL do often.
https://github.com/exch-bms2/beatoraja at least it is causing it alot.
Before updating GPU driver, every games with fullscreen are causing it within 1~3 times of alt-tab.(fullscreen optimization disabled) even moonlight did.
But now, after updating GPU driver, it happened only once by Arma 3, dead space, EZ2ON with many times of alt-tab while I'm collecting logs.
Other games tested, Ready or Not, Squad, Battlebit, Project DIVA. not happened.
And seems large pages option causes it more. Arma 3, beatoraja can use it.
Glad to hear you could at least mitigate the problem a bit, also good job there providing verbose mode logs right away!
The OBS game capture seems to reset when you alt-tab:

Code:
00:51:05.295: [game-capture: 'Game Capture'] ----------------- d3d11 capture freed ----------------
00:51:05.314: [game-capture: 'Game Capture'] Found D3D11 11.0 device on swap chain
00:51:05.314: [game-capture: 'Game Capture'] DXGI_SWAP_CHAIN_DESC:
00:51:05.314:     BufferDesc.Width: 1920
00:51:05.314:     BufferDesc.Height: 1080
00:51:05.314:     BufferDesc.RefreshRate.Numerator: 0
00:51:05.314:     BufferDesc.RefreshRate.Denominator: 1
00:51:05.314:     BufferDesc.Format: 28
00:51:05.314:     BufferDesc.ScanlineOrdering: 0
00:51:05.314:     BufferDesc.Scaling: 0
00:51:05.314:     SampleDesc.Count: 1
00:51:05.314:     SampleDesc.Quality: 0
00:51:05.314:     BufferUsage: 48
00:51:05.314:     BufferCount: 2
00:51:05.314:     Windowed: 1
00:51:05.314:     SwapEffect: 3
00:51:05.314:     Flags: 2114
00:51:05.315: [game-capture: 'Game Capture'] d3d11 shared texture capture successful
00:51:05.320: [game-capture: 'Game Capture'] ----------------- d3d11 capture freed ----------------
00:51:05.328: [game-capture: 'Game Capture'] Found D3D11 11.0 device on swap chain
00:51:05.328: [game-capture: 'Game Capture'] DXGI_SWAP_CHAIN_DESC:
00:51:05.328:     BufferDesc.Width: 1920
00:51:05.328:     BufferDesc.Height: 1080
00:51:05.328:     BufferDesc.RefreshRate.Numerator: 0
00:51:05.328:     BufferDesc.RefreshRate.Denominator: 1
00:51:05.328:     BufferDesc.Format: 28
00:51:05.328:     BufferDesc.ScanlineOrdering: 0
00:51:05.328:     BufferDesc.Scaling: 0
00:51:05.328:     SampleDesc.Count: 1
00:51:05.328:     SampleDesc.Quality: 0
00:51:05.328:     BufferUsage: 48
00:51:05.328:     BufferCount: 2
00:51:05.328:     Windowed: 1
00:51:05.328:     SwapEffect: 3
00:51:05.328:     Flags: 2114
00:51:05.328: [game-capture: 'Game Capture'] d3d11 shared texture capture successful

This happens twice within milliseconds, which makes me wonder a bit, what's your "Hook Rate" setting on that game capture?

Either way, this short interruption on the frames Beam is getting from OBS seems to start the problems, and it seems that's because the "Receiver timeout" mechanism is incorrectly triggered here. It should occur only after 1000 ms of not getting receive confirmations from the receiver, but apparently occurs a lot faster. It's based on the global _lastFrameTime variable that isn't accessed in a thread-safe way, which might be the culprit. Or I am just tired and it's something else xD

Will do some tests and maybe come up with a new beta release, would be nice if you could test it then to see whether it solves your issue.
 

DogRocketeer

New Member
is there a way to disable the send output from streamer.bot or through obs websocket?
i have an automation on a remote obs that needs to change profiles (which has a different resolution) and it doesnt update because the sender is still active so the scene is messed.

I need to disable the beam, change the profile then re-enable the beam.

cant seem to make it work... anyone know if this is possible?
 

YorVeX

Member
is there a way to disable the send output from streamer.bot or through obs websocket?
i have an automation on a remote obs that needs to change profiles (which has a different resolution) and it doesnt update because the sender is still active so the scene is messed.

I need to disable the beam, change the profile then re-enable the beam.

cant seem to make it work... anyone know if this is possible?
I have never used streamer.bot myself so cannot go into details, at least in theory you should be able to stop it using the StopOutput request specifying either "Beam Output" or "Beam Sender Output" as parameter for the output name (one is the unique ID string and one is the display name, not sure which of the two it expects but one of them should work, just try both).

Stopping and starting outputs in OBS can take a short time, I'd suggest you wait 1-2 seconds in your automation before switching the profile. Then after the switch you can start the output again using StartOutput.

I don't think I ever tried controlling Beam's output this way, so I am not sure how it reacts. Let me know if you run into any issues with it.
 
Last edited:
Top