3.9 KiB
3.9 KiB
Broadcaster Software (icecast and darkice)
Summary
User: grace Hostname: portal.local Password: emergence Running icecast (port 80) and darkice with Namecheap Dynamic DNS for external access. See icecast-darkice.md for setup instructions.
Bill of Materials
- Raspberry pi 4b (1 gig ram) - https://www.sparkfun.com/raspberry-pi-4-model-b-1gb.html
- 3 x USB to XLR sound card cable - https://www.amazon.com/dp/B089WFYZ5R?ref=ppx_yo2ov_dt_b_fed_asin_title&th=1
- 3 x XLR microphones -
- Raspberry pi 4 Power supply - https://www.waveshare.com/pi-psu-us-w.htm
- ethernet cable - https://hosatech.com/products/data/network-cable/cat-500/
- micro hdmi to regular hdmi cable- https://www.waveshare.com/pi-official-micro-hdmi-cable-1m.htm
Hardware setup
- Plug the mic into the the usb cable
- Plug the usb cable into the pi
- Plug the pi into the wall
Pre work
- install raspian lite 64 for raspi model 4b
- configure user and wifi and turn on ssh services when you install
- boot
- find the ip address of the pi and ssh to it
Setup instructions
Creature comforts
- sudo apt update && install git vim zsh
- sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
Icecast2 and Darkice installation
Loosely following this tutorial: https://dev.to/shilleh/stream-audio-from-raspberry-pi-to-local-computer-1a1c
Install icecast2
- sudo apt install icecast2
- It will ask you for three passwords. Set them all as emergence.
Install darkice
- sudo apt install darkice
- sudo vim /etc/darkice.cfg
[general]
duration = 0 # Stream indefinitely
bufferSecs = 5 # Buffer for the input, in seconds
reconnect = yes # Reconnect to the server if disconnected
[input]
device = plughw:1,0 # Your audio capture device
sampleRate = 44100
bitsPerSample = 16 # Bits per sample
channel = 1 # 2 = stereo, 1 = mono
[icecast2-0]
bitrateMode = cbr # Constant bit rate
format = mp3 # Audio format
bitrate = 128 # Bitrate in kbps
server = localhost # Server name or IP
port = 80 # Port number
password=emergence # Your Icecast password
mountPoint = portal # Mount point to stream to
name = Black Portal # Name of the stream
description = Black Portal Project # Description of the stream
url = http://blackportaldetroit.com # URL related to the stream
genre = politics # Genre of the stream
public = no # Do not list on public lists
Daemonize darkice
- sudo vim /lib/systemd/system/darkice.service
[Unit]
Description=Darkice Service
[Service]
User=root
Type=simple
Restart=on-failure
RestartSec=5
WorkingDirectory=/home/grace
ExecStart=/usr/bin/darkice -c /etc/darkice.cfg
[Install]
WantedBy=multi-user.target
- sudo systemctl daemon-reload
- sudo systemctl enable icecast2
- sudo systemctl enable darkice
Dynamic DNS Configuration (Automated)
The install script automatically configures Namecheap Dynamic DNS to make the stream accessible at blackportaldetroit.com without requiring a static IP address.
What gets installed:
- ddclient - Updates your domain's IP address automatically
- Configuration file - Pre-configured for Namecheap at
/etc/ddclient.conf - Systemd service - Runs ddclient as a background service
- Icecast on port 80 - Eliminates need for router port forwarding
Manual steps required after installation:
- In Namecheap account: Enable Dynamic DNS for blackportaldetroit.com
- Add DNS record: Create an "A + Dynamic DNS" record for "@" (root domain)
- Get password: Note the Dynamic DNS password from Namecheap
- Update config: Edit
/etc/ddclient.confand replaceREPLACE_WITH_NAMECHEAP_DDNS_PASSWORD - Start service: Run
sudo systemctl start ddclient - No router setup needed - icecast runs directly on port 80
Verify Dynamic DNS is working:
# Check ddclient status
sudo systemctl status ddclient
# View ddclient logs
sudo journalctl -u ddclient -f
# Test DNS resolution
nslookup blackportaldetroit.com