Skip to main content

Overview

TCP Streamer on Linux supports both ALSA and PulseAudio for flexible audio capture. This guide covers installation via .deb packages and AppImage, system audio configuration, and Linux-specific optimizations.

Installation

Debian/Ubuntu (.deb Package)

The recommended installation method for Debian-based distributions:
1

Download the .deb package

Download the latest .deb file from the Releases Page.Available for:
  • amd64 (64-bit Intel/AMD)
  • arm64 (64-bit ARM, Raspberry Pi 4+)
2

Install via apt

Open terminal and navigate to your downloads directory:
cd ~/Downloads
sudo apt install ./tcp-streamer_*.deb
The ./ prefix is important - it tells apt to install from the current directory.
3

Launch the application

Start TCP Streamer from your application menu or run:
tcp-streamer

Updating to a New Version

Do not double-click the .deb file if you already have an older version installed. The GUI installer may fail to detect upgrades. Correct update method:
cd ~/Downloads
sudo apt install ./tcp-streamer_*.deb
apt will automatically detect the installed version and upgrade it in-place, preserving your settings.

Troubleshooting Package Conflicts

If you see “Conflicts with existing package”:
sudo apt remove tcp-streamer
sudo apt install ./tcp-streamer_*.deb

AppImage (Universal)

For non-Debian distributions or portable installation:
1

Download the AppImage

Download the .AppImage file from the Releases Page.
2

Make executable

chmod +x tcp-streamer_*.AppImage
3

Run the AppImage

./tcp-streamer_*.AppImage
Or double-click the file in your file manager.
4

Optional: Integrate with system (AppImageLauncher)

Install AppImageLauncher to integrate AppImages with your desktop environment.

System Requirements

  • OS: Ubuntu 20.04+, Debian 11+, Fedora 35+, Arch Linux
  • RAM: 100 MB minimum
  • Architecture: x86_64 (amd64) or ARM64
  • Audio: ALSA or PulseAudio
  • Network: Stable connection to TCP server

Build Dependencies (for building from source)

If building from source, install these dependencies: Ubuntu/Debian:
sudo apt install libgtk-3-dev libwebkit2gtk-4.0-dev libappindicator3-dev \
                 librsvg2-dev patchelf libasound2-dev
Fedora:
sudo dnf install gtk3-devel webkit2gtk3-devel libappindicator-gtk3-devel \
                 librsvg2-devel patchelf alsa-lib-devel
Arch Linux:
sudo pacman -S gtk3 webkit2gtk libappindicator-gtk3 librsvg patchelf alsa-lib

Audio Capture Methods

PulseAudio provides “monitor” sources that capture system audio output:
1

List available sources

pactl list sources short
Look for sources with .monitor in the name:
  • alsa_output.pci-0000_00_1f.3.analog-stereo.monitor
  • alsa_output.usb-Generic_USB_Audio-00.analog-stereo.monitor
2

Select monitor in TCP Streamer

In TCP Streamer’s Input Device dropdown, select the monitor source corresponding to your output device.Example:
  • If your speakers are “Built-in Audio Analog Stereo”
  • Select “Built-in Audio Analog Stereo (Monitor)”
3

Test audio capture

Play audio and watch the real-time volume indicator in TCP Streamer.
PulseAudio monitors capture audio before volume control, so even muted systems will stream audio.

ALSA Loopback

For systems without PulseAudio:
1

Load snd-aloop module

sudo modprobe snd-aloop
Make permanent by adding to /etc/modules:
echo "snd-aloop" | sudo tee -a /etc/modules
2

Configure ALSA

Create or edit ~/.asoundrc:
pcm.loopin {
    type plug
    slave.pcm "hw:Loopback,0,0"
}

pcm.loopout {
    type plug
    slave.pcm "hw:Loopback,1,0"
}
3

Route audio to loopback

Set applications to output to loopin.In TCP Streamer, select loopout as input device.

Microphone Input

For capturing microphone or line-in:
  1. Select your microphone device in TCP Streamer’s Input Device dropdown
  2. Adjust volume using pavucontrol (PulseAudio) or alsamixer (ALSA)

Configuration

Optimal Settings for PulseAudio

PulseAudio provides excellent timing stability:
For stable wired connections:
  • Sample Rate: 48 kHz
  • Buffer Size: 512 samples
  • Ring Buffer: 2000ms
  • Adaptive Buffer: Enabled
    • Min: 1000ms
    • Max: 4000ms
  • Expected Latency: 1-2 seconds

Network Presets

Use the Advanced tab for quick configuration:
PresetRing BufferChunk SizeAdaptive RangeBest For
Ethernet2000ms5122-6sWired connections
WiFi4000ms10243-10sStandard WiFi
WiFi (Poor)8000ms20485-15sWeak signal

Sample Rate Considerations

  • 48 kHz - Recommended for modern systems, video sync
  • 44.1 kHz - Standard for music, slightly lower CPU usage
Check your audio device’s native sample rate:
cat /proc/asound/card*/stream0
Match TCP Streamer’s sample rate to your device for best performance.

Performance & Optimization

CPU Usage

TCP Streamer is lightweight on Linux:
  • Idle: <1% CPU
  • Streaming: 1-3% CPU
  • Memory: 2-4 MB typical

Reducing CPU Usage

  1. Increase buffer size to 2048 samples
  2. Lower sample rate to 44.1 kHz
  3. Close unnecessary background processes
  4. Use PulseAudio instead of ALSA (better buffering)

Real-time Priority (Advanced)

For professional audio or low-latency requirements:
1

Add user to audio group

sudo usermod -a -G audio $USER
Log out and log back in for changes to take effect.
2

Configure rtprio limits

Edit /etc/security/limits.d/audio.conf:
@audio   -  rtprio     95
@audio   -  memlock    unlimited
3

Enable high priority thread

In TCP Streamer Advanced settings, enable High Priority Thread.
Real-time priority is usually unnecessary unless running professional audio applications or experiencing severe jitter.

Troubleshooting

Audio Device Not Found

Problem: No audio devices appear in dropdown Solutions:
1

Check PulseAudio is running

pulseaudio --check
echo $?
If output is 0, PulseAudio is running. If not:
pulseaudio --start
2

List available devices

pactl list sources short
For ALSA:
arecord -l
3

Restart TCP Streamer

Quit and relaunch after connecting new audio devices.
4

Check permissions

Ensure your user is in the audio group:
groups $USER
If audio is missing:
sudo usermod -a -G audio $USER
Log out and back in.

No Audio Capture (Monitor)

Problem: Monitor source selected but no audio captured Solutions:
  1. Verify monitor source:
    pactl list sources | grep -A 10 monitor
    
    Ensure the monitor corresponds to your active output device.
  2. Check audio is playing:
    pactl list sink-inputs
    
    Should show active audio streams.
  3. Test monitor directly:
    parec --device=alsa_output.pci.monitor | aplay
    
    You should hear your system audio.
  4. Restart PulseAudio:
    pulseaudio --kill
    pulseaudio --start
    

Connection Issues

Problem: “Failed to connect to TCP server” Solutions:
1

Test network connectivity

nc -zv [server-ip] [port]
Example:
nc -zv 192.168.1.100 4953
2

Check firewall

UFW:
sudo ufw status
sudo ufw allow out [port]/tcp
iptables:
sudo iptables -L OUTPUT -v
3

Verify server is listening

On the server machine:
netstat -tuln | grep [port]
4

Try localhost

If server is on the same machine:
  • IP: 127.0.0.1 or localhost

Audio Stuttering or Dropouts

Problem: Audio cuts out or stutters during streaming Solutions:
1

Enable adaptive buffer

Navigate to Audio Settings and enable Adaptive Buffer.
2

Increase PulseAudio buffer

Edit /etc/pulse/daemon.conf:
default-fragment-size-msec = 25
default-fragments = 4
Restart PulseAudio:
pulseaudio --kill && pulseaudio --start
3

Apply WiFi preset

Use the WiFi (Poor Signal) preset in Advanced tab.
4

Check CPU governor

Ensure CPU is not throttling:
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
Set to performance if needed:
echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

AppImage Issues

Problem: AppImage fails to run Solutions:
  1. Enable FUSE:
    sudo apt install fuse libfuse2
    
  2. Extract and run:
    ./tcp-streamer_*.AppImage --appimage-extract
    ./squashfs-root/AppRun
    
  3. Check architecture:
    uname -m
    
    Ensure you downloaded the correct version (x86_64 or aarch64).

Permission Denied Errors

Problem: “Permission denied” when accessing audio device Solutions:
  1. Add user to audio group:
    sudo usermod -a -G audio $USER
    
    Log out and log back in.
  2. Check device permissions:
    ls -l /dev/snd/*
    
    Devices should be owned by audio group.
  3. Disable PulseAudio sandboxing (if using Flatpak/Snap):
    flatpak override --user --filesystem=host tcp-streamer
    

Automation

Auto-start on Login

Enable Auto-start on launch in TCP Streamer settings, or manually:
  1. Open Startup Applications
  2. Click Add
  3. Name: TCP Streamer
  4. Command: tcp-streamer (or path to AppImage)
  5. Click Save

Auto-stream Configuration

For fully automated operation:
  1. Enable Auto-start on launch - Start with system
  2. Enable Auto-stream - Begin streaming immediately
  3. Enable Auto-reconnect - Retry connection on failure
  4. Set silence detection - Pause during silence

Advanced Features

PulseAudio Configuration

Optimize PulseAudio for streaming:

Reduce Latency

Edit /etc/pulse/daemon.conf:
default-sample-rate = 48000
default-fragment-size-msec = 10
default-fragments = 2
Restart PulseAudio:
pulseaudio --kill && pulseaudio --start

Set Default Source

Force TCP Streamer to use specific source:
pactl set-default-source alsa_output.pci.monitor

ALSA Configuration

For advanced ALSA setups, edit ~/.asoundrc:
defaults.pcm.rate_converter "speexrate_best"

pcm.!default {
    type plug
    slave.pcm "hw:0,0"
}

QoS (Quality of Service) Tagging

  1. Navigate to Advanced tab
  2. Select QoS preset:
    • VoIP (EF) - Highest priority
    • Low Delay - Expedited forwarding
    • Throughput - Bulk transfer
QoS requires router support and proper iptables rules to be effective on Linux.

Best Practices

For Multi-room Audio (Snapcast)

  1. Use PulseAudio monitor for system audio
  2. Apply WiFi preset (4s buffer)
  3. Enable Auto-reconnect
  4. Set silence timeout to 300 seconds (5 minutes)
  5. Enable Adaptive Buffer (3s - 10s)

For Raspberry Pi

  1. Use .deb package for ARM64
  2. Apply WiFi (Poor) preset for stability
  3. Enable Auto-reconnect
  4. Use PulseAudio for easier configuration
  5. Consider overclocking for better performance:
    # Edit /boot/config.txt
    over_voltage=2
    arm_freq=1750
    

For Low-latency Applications

  1. Use wired Ethernet connection
  2. Apply Ethernet preset (2s buffer)
  3. Set buffer size to 512 samples
  4. Use 48 kHz sample rate
  5. Configure real-time priority (see Performance section)

Distribution-Specific Notes

Ubuntu/Debian

  • Use .deb package for best integration
  • PulseAudio pre-installed on desktop editions
  • Update via apt as shown above

Fedora

  • Convert .deb to .rpm using alien:
    sudo dnf install alien
    sudo alien -r tcp-streamer_*.deb
    sudo dnf install tcp-streamer-*.rpm
    
  • Or use AppImage

Arch Linux

  • Use AppImage or build from source
  • Install dependencies via pacman (see Build Dependencies)
  • Consider creating AUR package

Raspberry Pi OS

  • Use ARM64 .deb package (Raspberry Pi 4+)
  • Enable hardware audio:
    # Edit /boot/config.txt
    dtparam=audio=on
    
  • Increase GPU memory:
    gpu_mem=128
    

Additional Resources


Platform: Linux (Ubuntu 20.04+, Debian 11+, Fedora, Arch) Audio APIs: ALSA, PulseAudio Native Loopback: Yes (PulseAudio monitors) Typical Latency: 1-3 seconds (wired) | 3-6 seconds (WiFi)

Build docs developers (and LLMs) love