You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
Benjamin Bädorf 073d3a1248
Little better docs
6 months ago
src Little better docs 6 months ago
.envrc Little better docs 6 months ago
.gitignore Little better docs 6 months ago
Cargo.lock Update cargo.lock 1 year ago
Cargo.toml Actually bump verison in Cargo.toml 1 year ago
LICENSE.md Added license 2 years ago
README.md Little better docs 6 months ago
shell.nix Little better docs 6 months ago

README.md

wlstreamer

Wrapper around wf-recorder and ffmpeg that automatically switches the screen being recorded based on current window focus. Works with sway.

Installation

There's an AUR package called wlstreamer-git, alternatively you can build and install manually:

  1. Make sure you're running sway
  2. Install wf-recorder, v4l2loopback and ffmpeg
  3. Load the v4l2loopback kernel module
  4. Install the rust toolchain
  5. Clone this repo
  6. cargo install --path . --root ~/.local

Usage

See wlstreamer --help. If there are no screens available for streaming, a black screen will be shown instead.

Usage: wlstreamer [options]
Wrapper around wf-recorder and ffmpeg that automatically switches the screen being recorded based on current window focus

Options:
  --not-ws <ws-num>         Do not show this workspace. Can be used multiple times. Example: 3
  --not-screen <screen>     Do not show this screen. Can be used multiple times. Example: HDMI-A-1
  -d|--devices-from <id>    Use video devices starting at $id. Defaults to 0. /dev/video$id will be used as output. See DIFFERENT RESOLUTIONS below.
  -v|--version              Display version and exit
  --verbose                 Verbose logging

If there are no screens available for streaming, a black screen will be shown instead.

DIFFERENT RESOLUTIONS

When running outputs with different resolutions, the resulting stream will be the smallest possible resolution that can fit all output resolutions.
For example, two outputs, one 1600x1200, another 1920x1080, will result in an output stream of 1920x1200. Any remaining space will be padded black.
Another example, two outputs, one 640x480, another 1920x1080, will result in an output stream of 1920x1080. Space will only be padded black on the smaller screen.

To support this behaviour, wlstreamer needs access to a v4l2loopback device for each resolution, included the combined upscaled one if applicable. For the first example above, this would mean you would need 3 devices. For the second, you'd need two. If all your outputs have the same resolution, you only need an output device.

The --devices-from or -d option specifies at which device index it is okay to start using loopback devices. For example, if you specify -d 3, and you need 2 capture devices, /dev/video3 and /dev/video4 will be used by wlstreamer, with /dev/video3 being the output you want to use in other applications.

DYNAMICALLY CHANGING RESOLUTIONS

As long as you have enough v4l2loopback devices available for new resolutions, it should be fine to change resolutions on an output.
However, if your resolution is either wider or taller than the output resolution, this will result in failures, since dynamically changing the v4l2loopback device resolution is not possible.