fzwoch / obs-teleport

An OBS Studio plugin for an open NDI-like replacement. Pretty simple, straight forward. No NDI compatibility in any form.
GNU General Public License v2.0
445 stars 16 forks source link

Teleport Screen Capture Tool #84

Closed dx9s closed 1 year ago

dx9s commented 1 year ago

This isn't a bug, but an inquiry.

Has there been any discussions into making a stand alone tool for screen capturing and sending a Teleport network stream to the OBS Teleport plugin?

Presenting all the knobs and sliders and options OBS provides can be overwhelming to some folks and cause panic. A smaller tool that simply has a start/stop capture, which screen (or area of screen) and a slider for quality would be less confusing to many. Eventually updating the the Tool and OBS Plugin to allow for remote management of the quality and screen (sort of how the NDI screen capture tool kind of does it now if my memory is correct).

Just curious... Thanks!

--Doug

YorVeX commented 1 year ago

The "overwhelming" part that applies to some users also applies to developers when it's about screen capturing - OBS uses 3 entirely different and separate implementations for macOS, Linux and Windows, because there is no simple standard way that works for all 3 (at least none with reasonable performance). This is what you would have to recreate first in your standalone program, and then you got only video - which is a walk in the park compared to doing audio (OBS also struggles with that and a necessary rewrite keeps on getting postponed due to the complexity).

That said, the Teleport protocol itself is not that hard, it's pretty standard with a bit of header data and then the actual frame data, so if a dev wants this e.g. only for Windows and has an existing capturing framework or at least experience with it might actually have a chance.

I am still wondering about the use case though, you say overwhelmed by OBS, but your idea was to still use OBS on the receiver side, right? How's that less overwhelming than setting it up on the sender side?

fzwoch commented 1 year ago

The simplest way would be to just write a small app around libobs. It is "easy" to create one simple scene with one capture source. It is still work though. I'm pretty sure it won't be me writing this app though.

dx9s commented 1 year ago

I am still wondering about the use case though, you say overwhelmed by OBS, but your idea was to still use OBS on the receiver side, right? How's that less overwhelming than setting it up on the sender side?

Think of this scenario, In a live stream where guest bring their own computer to do a presentation to a "projector" (or large TV) as second monitor.

On the final live stream OBS machine, it is compositing several live camera shots from audience and presenter as well as the "powerpoint" or whatever output to the crowd.

Just a weird edge case use-case that probably isn't your target market.

dx9s commented 1 year ago

The simplest way would be to just write a small app around libobs. It is "easy" to create one simple scene with one capture source. It is still work though. I'm pretty sure it won't be me writing this app though.

Probably yeah. Like I said, it's a weird edge case where you are capturing from a computer that is not yours. And I fully admit that installing a flown blown OBS is completely doable, but they might be put off by installing anything. Ideally, such a tool could be simply ran from a thumb drive and require no installer/uninstaller.

I'm not verse into libobs but it sounds like a reasonable way to go. (And in this weird edge case, audio is usually not required).

YorVeX commented 1 year ago

And I fully admit that installing a flown blown OBS is completely doable, but they might be put off by installing anything. Ideally, such a tool could be simply ran from a thumb drive and require no installer/uninstaller.

That can be done with OBS already, just prepare a folder with OBS configured to portable mode that includes the Teleport plugin and has a display capture source preconfigured.

Example for Windows: 1.) Unzip OBS (the zip download, not the installer) to a custom directory outside of "C:\Program Files (x86)" or "C:\Program Files" 2.) Create a blank text file named "portable_mode.txt" in the base unzip folder. 3.) Copy the teleport plugin to \obs-plugins\64bit\ in that folder structure 4.) Run obs64.exe from the \bin directory within the unzip folder, finish the wizard/first time setup stuff, configure Teleport to your liking, add a display capture source, then exit OBS

Now preserve this folder somewhere, it's what you will always hand out to the guests who should present their screens. They don't need to install anything, just copy the folder to any location on their machines and run \bin\obs64.exe from it. Make sure to keep your base folder updated with matching OBS and Teleport versions of your receiving computer.

YorVeX commented 1 year ago

Pro Tip: you can make the copying process significantly faster by deleting unused locale files from that base folder, assuming that the guests aren't supposed to interact a lot with OBS anyway, English will most probably suffice. Here's the script that I use for this, it will keep de-DE and en-US and delete all others - adjust to your liking (it also deletes some cache stuff so you can re-execute it after you have run this instance to configure something).

Save as OBS-Cleanup.cmd and copy to the unzip base folder, then execute it from there with a double click.

@echo off

if not exist "bin" if not exist "config" if not exist "data" if not exist "obs-plugins" (
    echo This does not look like this script is run from an OBS directory, aborting...
    pause
    exit
)

echo Deleting browser cache...
del /q "config\obs-studio\plugin_config\obs-browser\Cache\*"
FOR /D %%p IN ("config\obs-studio\plugin_config\obs-browser\Cache\*.*") DO rmdir "%%p" /s /q

echo Deleting browser code cache...
del /q "config\obs-studio\plugin_config\obs-browser\Code Cache\*"
FOR /D %%p IN ("config\obs-studio\plugin_config\obs-browser\Code Cache\*.*") DO rmdir "%%p" /s /q

echo Deleting browser GPU cache...
del /q "config\obs-studio\plugin_config\obs-browser\GPUCache\*"
FOR /D %%p IN ("config\obs-studio\plugin_config\obs-browser\GPUCache\*.*") DO rmdir "%%p" /s /q

echo Deleting unused locale files...
for /R %%f in (locale\*.ini) do (
    if NOT "%%~nf" == "de-DE" if NOT "%%~nf" == "en-US" del "%%f"
)
for /R %%f in (locales\*.pak) do (
    if NOT "%%~nf" == "de" if NOT "%%~nf" == "en-US" del "%%f"
)
echo Done.

pause

You could also remove some of the standard plugins from the folder that are most probably not needed for this simple capture scenario to make OBS startup a bit faster (AJA, Decklink, WebSocket stuff etc.).