Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/keijiro/klakspout

Spout plugin for Unity
https://github.com/keijiro/klakspout

plugin spout unity unity3d

Last synced: about 1 hour ago
JSON representation

Spout plugin for Unity

Awesome Lists containing this project

README

        

KlakSpout
=========

![gif](https://user-images.githubusercontent.com/343936/124232423-993f6c00-db4c-11eb-80d3-4c660a2025d9.gif)
![gif](https://user-images.githubusercontent.com/343936/124217164-c4b55d00-db32-11eb-88f1-735a04bfb235.gif)

**KlakSpout** is a Unity plugin that allows Unity to send/receive video streams
using the [Spout] system.

[Spout]: http://spout.zeal.co/

System requirements
-------------------

- Unity 2020.3 or later
- Windows system with DirectX 11/12 support

Currently, KlakSpout only supports Direct3D 11 and 12. You can't use other
graphics APIs like OpenGL or Vulkan.

How to install
--------------

This package uses the [scoped registry] feature to resolve package dependencies.
Please add the following sections to the manifest file (Packages/manifest.json).

[scoped registry]: https://docs.unity3d.com/Manual/upm-scoped.html

To the `scopedRegistries` section:

```
{
"name": "Keijiro",
"url": "https://registry.npmjs.com",
"scopes": [ "jp.keijiro" ]
}
```

To the `dependencies` section:

```
"jp.keijiro.klak.spout": "2.0.3"
```

After changes, the manifest file should look like below:

```
{
"scopedRegistries": [
{
"name": "Keijiro",
"url": "https://registry.npmjs.com",
"scopes": [ "jp.keijiro" ]
}
],
"dependencies": {
"jp.keijiro.klak.spout": "2.0.3",
...
```

Spout Sender component
----------------------

![Sender](https://user-images.githubusercontent.com/343936/124219895-e2d18c00-db37-11eb-8f96-0829bb757968.png)

You can send a video stream using the **Spout Sender** component. There are
three capture methods available:

- **Game View**: Captures the content of the Game View.
- **Camera**: Captures a specified camera.
- **Texture**: Captures a 2D texture or a Render Texture.

Note that the Camera capture method is only available on URP and HDRP -- You
can't use it on the built-in render pipeline.

The **KeepAlpha** property controls if it keeps or clears the content of the
alpha channel. Note that you have to enable [alpha output] when using HDRP.
Also note that you have to use the Texture capture method to enable alpha
output on URP.

[alpha output]:
https://docs.unity3d.com/Packages/[email protected]/manual/Alpha-Output.html

Spout Receiver component
------------------------

![Receiver](https://user-images.githubusercontent.com/343936/124220011-1f9d8300-db38-11eb-985a-2f5bebe4c058.png)

You can receive a video stream using the **Spout Receiver** component. It stores
received frames to the Target Texture. It also overrides a material property
specified in the Target Renderer.

You also can refer to the received texture via the
`SpoutReceiver.receivedTexture` property.

Scripting interface
-------------------

You can enumerate available Spout senders using the `SpoutManager` class.
Please check the [SourceSelector example] for further usage.

[SourceSelector example]:
https://github.com/keijiro/KlakSpout/blob/main/Assets/Script/SourceSelector.cs

You can dynamically create a Spout sender/receiver, but you must give the
`SpoutResources` asset (which holds references to the package assets) after
instantiation. Please see the [benchmark examples] for detailed steps.

[benchmark examples]:
https://github.com/keijiro/KlakSpout/blob/main/Assets/Script/SenderBenchmark.cs

Frequently asked questions
--------------------------

### What's the difference between NDI and Spout?

- NDI: Video-over-IP codec/protocol
- Spout: Interprocess GPU memory sharing on DirectX

NDI requires CPU/memory/network load, but it's greatly versatile.

Spout doesn't produce any CPU load, but its range of application is limited.

If you're trying to share videos between applications running on a single
Windows PC, Spout would be a better solution.