crabSDR

Stream-Technik Ton aus crabSDR ohne Browser

Sofort ausprobieren

WasDF0HHH (Rosengarten)DM0NDR (Hamburg)
FM-Relais, Opus145725/fm.ogg145725/fm.ogg
Anruf FM, Opus 64 kbit/s145500/fm.ogg?br=64145500/fm.ogg?br=64
SSB-Runde, langsame AGC144260/usb.ogg?pb=300,2700&agc=slow144260/usb.ogg?pb=300,2700&agc=slow
APRS roh, PCM (für Decoder)144800/data.wav?sq=off144800/data.wav?sq=off
Zwei Kanäle links/rechts, PCMpair.wav?l=145725/fm&r=145500/fmpair.wav?l=145725/fm&r=439275/fm
I/Q 48 kHz 16 bit (nur Sysop, token=)145700/iq.wav?bw=30000439275/iq.wav?bw=30000
Animierte Krabbe in VLC (Theora 160×140, 6 fps, +8–10 kbit/s; ohne Live-Titel und Titelbild)145725/fm.ogg?anim=1145725/fm.ogg?anim=1
Senderliste für VLCpresets.m3upresets.m3u
Browser, Minimal-Ansicht?tune=145725.000fm&ui=min?tune=145725.000fm&ui=min

Alle Adressen beginnen mit https://<station>/stream/. In VLC: Medien → Netzwerkstream öffnen, Adresse einfügen. „Laufzeit 00:00“ ist bei Live-Streams normal.

Stream details audio from crabSDR without a browser

Try it right away

WhatDF0HHH (Rosengarten)DM0NDR (Hamburg)
FM repeater, Opus145725/fm.ogg145725/fm.ogg
FM calling frequency, Opus 64 kbit/s145500/fm.ogg?br=64145500/fm.ogg?br=64
SSB net, slow AGC144260/usb.ogg?pb=300,2700&agc=slow144260/usb.ogg?pb=300,2700&agc=slow
APRS raw, PCM (for decoders)144800/data.wav?sq=off144800/data.wav?sq=off
Two channels left/right, PCMpair.wav?l=145725/fm&r=145500/fmpair.wav?l=145725/fm&r=439275/fm
I/Q 48 kHz 16 bit (sysop only, token=)145700/iq.wav?bw=30000439275/iq.wav?bw=30000
Animated crab in VLC (Theora 160×140, 6 fps, +8–10 kbit/s; without live title and cover art)145725/fm.ogg?anim=1145725/fm.ogg?anim=1
Station list for VLCpresets.m3upresets.m3u
Browser, minimal view?tune=145725.000fm&ui=min?tune=145725.000fm&ui=min

All addresses start with https://<station>/stream/. In VLC: Media → Open Network Stream, paste the address. “Duration 00:00” is normal for live streams.

Adressen

https://<station>/stream/<kHz>/<mode>.ogg                     Opus, fürs Ohr (≈ 4 kB/s)
https://<station>/stream/<kHz>/<mode>.wav                     PCM 16 bit 48 kHz mono, für Decoder (96 kB/s)
https://<station>/stream/pair.wav?l=<kHz>/<mode>&r=<kHz>/<mode>  PCM stereo, zwei Kanäle (192 kB/s)
https://<station>/stream/presets.m3u                         Schnellwahl als Senderliste
https://<station>/stream/<kHz>/iq.wav                        I/Q links/rechts, 48 kHz 16 bit (1,5 Mbit/s), ?rate=32000&bits=8 → 0,5 Mbit/s
https://<station>/stream/<kHz>/iq.ogg?br=192                 I/Q als Opus, Experiment (0,2 Mbit/s)
https://<station>/stream/decoder/<id>.ogg                    Ton eines Decoders (z. B. FreeDV), id aus /api/decoders

Frequenz in kHz, auch mit Nachkommastellen; unter 1000 gilt MHz. Das Band wird anhand der Frequenz gewählt. mode: fm, am, sam, usb, lsb, cw, cwr, data (FM ohne Sprachfilter, für Decoder), disc (Diskriminator flach über bw); iq siehe unten.

Parameter

ParameterWerteVorgabe
bwBandbreite in HzFM 12500, AM 9000, SSB 2700, CW 500, disc 25000
pbSSB-Durchlass lo,hi in Hz300,3000
sqauto · auto:10 (dB über Rauschen) · -85 (dBFS fest) · offauto bei FM/Daten, sonst off
agcfast · medium · slow · off (AM/SSB/CW)medium
brOpus-Bitrate 8–128 kbit/s, nur .oggStation (32)
anim1: animierte Krabbe als Theora-Videospur (160×140, 6 fps, 3-s-Schleife, ~8–10 kbit/s extra, keine Zusatzlatenz), nur .ogg; dann ohne Live-Titel und Wasserfall-Titelbildaus
live1: Titel zeigt Pegel, Rauschsperre und Rufzeichen · 0: fester Titelan, außer im Browser
coverwf: alle 10 s der Wasserfall um die Frequenz als Titelbild–
picStationsbild in den Tagsan, außer im Browser
nameName in der HörerlisteStream
bandBand-Kennung, falls zwei Bänder die Frequenz abdeckenautomatisch
rate, bitsnur iq.wav: 32000/48000 Hz, 8/16 bit48000, 16
tokenGast-Token (POST /api/auth/guest), Anmelde-Token aus dem Browser (localStorage.crab_token) oder der feste Stream-Schlüssel der Station (Admin → Station → Erzeugen, oder Datei stream_key_file): zählt wie der Sysop, nur für Streams, läuft nie ab–

Addresses

https://<station>/stream/<kHz>/<mode>.ogg                     Opus, for the ear (≈ 4 kB/s)
https://<station>/stream/<kHz>/<mode>.wav                     PCM 16 bit 48 kHz mono, for decoders (96 kB/s)
https://<station>/stream/pair.wav?l=<kHz>/<mode>&r=<kHz>/<mode>  PCM stereo, two channels (192 kB/s)
https://<station>/stream/presets.m3u                         quick tune list as a station list
https://<station>/stream/<kHz>/iq.wav                        I/Q left/right, 48 kHz 16 bit (1.5 Mbit/s), ?rate=32000&bits=8 → 0.5 Mbit/s
https://<station>/stream/<kHz>/iq.ogg?br=192                 I/Q as Opus, experimental (0.2 Mbit/s)
https://<station>/stream/decoder/<id>.ogg                    audio of a decoder (e.g. FreeDV), id from /api/decoders

Frequency in kHz, decimals allowed; below 1000 it is taken as MHz. The band is chosen by the frequency. mode: fm, am, sam, usb, lsb, cw, cwr, data (FM without speech filter, for decoders), disc (flat discriminator across bw); iq see below.

Parameters

ParameterValuesDefault
bwbandwidth in HzFM 12500, AM 9000, SSB 2700, CW 500, disc 25000
pbSSB passband lo,hi in Hz300,3000
sqauto · auto:10 (dB above noise) · -85 (fixed dBFS) · offauto for FM/data, otherwise off
agcfast · medium · slow · off (AM/SSB/CW)medium
brOpus bit rate 8–128 kbit/s, .ogg onlystation (32)
anim1: animated crab as a Theora video track (160×140, 6 fps, 3 s loop, ~8–10 kbit/s extra, no additional latency), .ogg only; then without live title and waterfall cover artoff
live1: title shows level, squelch and call sign · 0: fixed titleon, except in the browser
coverwf: every 10 s the waterfall around the frequency as cover art–
picstation picture in the tagson, except in the browser
namename in the listener listStream
bandband ID, in case two bands cover the frequencyautomatic
rate, bitsiq.wav only: 32000/48000 Hz, 8/16 bit48000, 16
tokenguest token (POST /api/auth/guest), sign-in token from the browser (localStorage.crab_token), or the station’s fixed stream key (Admin → Station → Generate, or the file stream_key_file): counts like the sysop, streams only, never expires–

Browser-Link

https://<station>/?tune=145700.000fm&pb=-8.00,8.00&sq=auto:6&agc=slow&vol=-10&mute=1&name=DO1XX&ui=min
ParameterWirkung
tuneFrequenz in kHz plus Betriebsart; Endung dv = DV in USB, dvl = DV in LSB, t = Betriebsart T
pbDurchlass in kHz relativ zum Träger (SSB 0.30,2.70)
sq, agcwie beim Stream
volLautstärke in dB, −20 bis 6
mute=1stumm starten
nameAnzeigename
ui=minnur Frequenz, Betriebsart, Bandbreite, Pegel; kein Wasserfall, kein Chat. Für viele Tabs. Tab-Titel = Frequenz
view=allalle Bänder untereinander
decTon eines Stations-Decoders, dec=<id>

Ton startet in jedem Tab erst nach einem Klick (Browser-Regel). Chrome merkt sich die Erlaubnis je Seite, Firefox nicht.

Browser link

https://<station>/?tune=145700.000fm&pb=-8.00,8.00&sq=auto:6&agc=slow&vol=-10&mute=1&name=DO1XX&ui=min
ParameterEffect
tunefrequency in kHz plus mode; suffix dv = DV in USB, dvl = DV in LSB, t = mode T
pbpassband in kHz relative to the carrier (SSB 0.30,2.70)
sq, agcas for the stream
volvolume in dB, −20 to 6
mute=1start muted
namedisplay name
ui=minonly frequency, mode, bandwidth, level; no waterfall, no chat. For many tabs. Tab title = frequency
view=allall bands stacked
decaudio of a station decoder, dec=<id>

In every tab, audio starts only after a click (browser rule). Chrome remembers the permission per site, Firefox does not.

Betriebsart data

FM mit flachem Diskriminator-Ausgang: derselbe ZF-Filter wie FM, aber kein 300-Hz-Hochpass (bei FM gegen CTCSS), kein Sprachfilter bei 4 kHz, sondern Tiefpass bei 8 kHz, Gleichanteil-Entfernung bei etwa 30 Hz, Verstärkung auf ±4,5 kHz Hub (Spitze −8 dBFS). Erhält die Flanken von POCSAG (1200/2400 Bd), AFSK 1200, DTMF. Für DMR (4FSK, ±1,9 kHz) .wav nehmen, Opus rundet die Symbole ab.

I/Q-Stream

Kein Demodulator: der Kanalausschnitt wird zur Mitte gemischt (Gleichanteil bleibt), auf die Abtastrate umgerechnet, auf Spitze −6 dBFS geregelt, links I und rechts Q. bw ist die Breite des Ausschnitts (Vorgabe 30 kHz; TETRA 25 kHz, DMR 12,5 kHz). Bei I/Q ist die nutzbare Bandbreite gleich der Abtastrate, 32 kHz reichen also für einen TETRA-Kanal. Datenmenge: 48 kHz/16 bit 1,5 Mbit/s, 32 kHz/8 bit 0,5 Mbit/s (8 bit = −48 dB Quantisierungsrauschen, TETRA braucht 10–20 dB SNR), Opus-Experiment 0,2 Mbit/s. Ein I/Q-Hörer wiegt wie 50 Ton-Hörer, deshalb iq_stream = "admin" | "users" | "all" | "off" (Vorgabe admin) und max_iq (Vorgabe 1).

curl -sN "https://<station>/stream/430450/iq.wav?bw=30000&token=…" \
  | sox -t wav - -t raw -r 36000 -e float -b 32 -c 2 - | <tetra-decoder>

Mode data

FM with a flat discriminator output: the same IF filter as FM, but no 300 Hz high-pass (used in FM against CTCSS), no voice filter at 4 kHz, instead a low-pass at 8 kHz, DC removal at about 30 Hz, gain set for ±4.5 kHz deviation (peak −8 dBFS). Preserves the edges of POCSAG (1200/2400 Bd), AFSK 1200, DTMF. For DMR (4FSK, ±1.9 kHz), use .wav; Opus rounds off the symbols.

I/Q stream

No demodulator: the channel slice is mixed to the center (DC remains), resampled to the sample rate, leveled to a peak of −6 dBFS, I on the left and Q on the right. bw is the width of the slice (default 30 kHz; TETRA 25 kHz, DMR 12.5 kHz). With I/Q, the usable bandwidth equals the sample rate, so 32 kHz is enough for one TETRA channel. Data volume: 48 kHz/16 bit 1.5 Mbit/s, 32 kHz/8 bit 0.5 Mbit/s (8 bit = −48 dB quantization noise, TETRA needs 10–20 dB SNR), Opus experiment 0.2 Mbit/s. One I/Q listener weighs as much as 50 audio listeners, hence iq_stream = "admin" | "users" | "all" | "off" (default admin) and max_iq (default 1).

curl -sN "https://<station>/stream/430450/iq.wav?bw=30000&token=…" \
  | sox -t wav - -t raw -r 36000 -e float -b 32 -c 2 - | <tetra-decoder>

Decoder-Beispiele

# ohne Soundkarte, multimon-ng will 22050 Hz s16le
curl -sN "https://df0hhh.crabsdr.de/stream/144800/data.wav?sq=off" \
  | sox -t wav - -t raw -r 22050 -e signed -b 16 -c 1 - \
  | multimon-ng -t raw -a AFSK1200 -a POCSAG1200 -a POCSAG2400 -

# DMR mit DSD-FME
curl -sN "https://ccchh.crabsdr.de/stream/439500/data.wav?sq=off" | dsd-fme -i - -fs

# zwei Frequenzen auf ein virtuelles Audiokabel, je ein Decoder links/rechts
mpv --audio-device=… "https://df0hhh.crabsdr.de/stream/pair.wav?l=145700/fm&r=145725/fm&sq=off"

# Home Assistant: media_player.play_media
media_content_id: https://df0hhh.crabsdr.de/stream/145500/fm.ogg
media_content_type: music

Lastgrenzen

Teuer ist der Kanal, nicht der Hörer: jede andere Frequenz/Betriebsart/Bandbreite kostet auf einem Pi 4 rund 2–3 % CPU, Hörer auf demselben Kanal teilen ihn. Oben in config.toml, gilt je Band, 0 = keine Grenze:

SchlüsselVorgabeWirkung
max_channels16verschiedene Kanäle; darüber „Station voll“ (Browser-Hinweis, Stream 503), schon gehörte Frequenzen gehen weiter
max_streams6gleichzeitige Streams (503)
max_per_ip10Verbindungen je Adresse, Tabs und Bänder zählen einzeln (429)
max_listeners50Verbindungen insgesamt (503)
max_iq1gleichzeitige I/Q-Streams (503); iq_stream regelt, wer darf

Decoder examples

# without a sound card, multimon-ng wants 22050 Hz s16le
curl -sN "https://df0hhh.crabsdr.de/stream/144800/data.wav?sq=off" \
  | sox -t wav - -t raw -r 22050 -e signed -b 16 -c 1 - \
  | multimon-ng -t raw -a AFSK1200 -a POCSAG1200 -a POCSAG2400 -

# DMR with DSD-FME
curl -sN "https://ccchh.crabsdr.de/stream/439500/data.wav?sq=off" | dsd-fme -i - -fs

# two frequencies onto a virtual audio cable, one decoder each left/right
mpv --audio-device=… "https://df0hhh.crabsdr.de/stream/pair.wav?l=145700/fm&r=145725/fm&sq=off"

# Home Assistant: media_player.play_media
media_content_id: https://df0hhh.crabsdr.de/stream/145500/fm.ogg
media_content_type: music

Load limits

The channel is what costs, not the listener: each additional frequency/mode/bandwidth costs about 2–3 % CPU on a Pi 4; listeners on the same channel share it. At the top of config.toml, applies per band, 0 = no limit:

KeyDefaultEffect
max_channels16distinct channels; beyond that “Station full” (browser note, stream 503); frequencies already being heard keep going
max_streams6simultaneous streams (503)
max_per_ip10connections per address; tabs and bands count individually (429)
max_listeners50connections in total (503)
max_iq1simultaneous I/Q streams (503); iq_stream decides who may

Latenz

I/Q 2 ms + DSP-Rahmen ≈ 50 ms + Anlauf 100 ms + Ogg-Seite 100 ms + Puffer des Spielers (VLC Vorgabe 1 s, --network-caching=300 geht). Realistisch 0,5–1,5 s; der Browser liegt bei etwa 0,4 s.

Latency

I/Q 2 ms + DSP frame ≈ 50 ms + start-up 100 ms + Ogg page 100 ms + player buffer (VLC default 1 s, --network-caching=300 works). Realistically 0.5–1.5 s; the browser is at about 0.4 s.