Skip to content

IceDBorn/pipewire-screenaudio

Repository files navigation

Logo Pipewire Screenaudio

Extension to passthrough Pipewire audio to WebRTC Screenshare

Based on virtual-mic and Screenshare-with-audio-on-Discord-with-Linux

Communication

You can find us on Matrix

Installation

Packages

AUR AUR

NixOS Flakes

# flake.nix

{
  inputs.pipewire-screenaudio.url = "github:IceDBorn/pipewire-screenaudio";
  # ...

  outputs = {nixpkgs, pipewire-screenaudio, ...} @ inputs: {
    nixosConfigurations.HOSTNAME = nixpkgs.lib.nixosSystem {
      specialArgs = { inherit inputs; }; # this is the important part
      modules = [
        ./configuration.nix
      ];
    };
  }
}

# configuration.nix

{inputs, pkgs, ...}: {
  environment.systemPackages = with pkgs; [
    (firefox.override { nativeMessagingHosts = [ inputs.pipewire-screenaudio.packages.${pkgs.system}.default ]; })
    # ...
  ];
}

Installing from Source

Requirements

  • gawk
  • hexdump
  • jq
  • pipewire
git clone https://github.com/IceDBorn/pipewire-screenaudio.git
cd pipewire-screenaudio
bash install.sh

Usage

  • Install the extension
  • Optional: Grant extension with access permissions to all sites
  • Join a WebRTC call, click the extension icon, select an audio node and share
  • Stream, your transmission should contain both audio and video

Known Problems

  • You can't stream firefox WebRTC calls at all while using All Desktop Audio, they are excluded by default

resistFingerprinting

  • privacy.resistFingerprinting (enabled by default in LibreWolf, arkenfox user.js, etc.) breaks the extension. Either disable the preference or add any domains you wish to use Pipewire Screenaudio with to privacy.resistFingerprinting.exemptedDomains in about:config

Audio pitching

  • This bug exclusively impacts Firefox versions predating 120

Planned Features

  • Multiple nodes selection
  • More customization options (node matching, watcher behavior etc.)
  • Chromium support