A StreamDeck plugin and basic Web UI are also provided.
Download files from the latest release; most users will not want the 'debug-' downloads.
For instructions, see INSTALL.md
The web UI is tested on Chrome and Safari; it is known not to work on Edge.
If local storage is available, the web UI will save connection settings; local storage is not available when opening the index.html file directly in Safari, but it works in Chrome.
- retrieve a list of outputs and states
- start an output (stream or recording)
- stop an output
- push notifications for output state changes
- software-agnostic: there are no protocol or client differences when using OBS vs XSplit
- modern security (authentication and encryption) via libsodium
We expect to expand the capabilities in the future.
Building Native Components From Source
- Qt5 the web UI or the XSplit plugin
- OBS Studio - built from source - if building the OBS plugin
- Visual Studio 2019 or recent XCode
streaming-remote$ mkdir build streaming-remote$ cd build build$ cmake .. \ -DWITH_XSPLIT=ON \ -DWITH_OBS_ON \ -DOBS_SOURCE_DIR=/path/to/obs-studio \ -DOBS_BUILD_DIR=/path/to/obs-studio/build build$ cmake --build . --parallel
The XSplit plugin can be built on all platforms, even though XSplit itself
is only available on Windows. This is useful when working on changes that
StreamingSoftware class on a non-Windows machine.
Building TypeScript Components from source
- yarn (preferred) or npm
yarn install && tsc
yarn install && yarn run webpack --mode production
There are two message-based protocols:
- a binary handshake protocol providing authentication and initialization encryption
- an encrypted JSON-RPC-based RPC protocol
For WebSockets, the standard binary mesage functions are used.
For TCP sockets, Unix sockets (MacOS, Linux), and named pipes (Windows), an ASCII
Content-Length: header is
sent containing the number of bytes, then CRLF CRLF, then the blob. The next Content-Length header
immediately follows the blob.
"Content-Length: 7\r\n" "\r\n "hello, Content-Length: 6\r\n" "\r\n" "world."
See the [LICENSE](LICENSE file) and individual source files for details.