自托管互联网广播电台Airstation

简介

什么是 Airstation ?

Airstation 是一个自托管的 Web 应用程序,用于通过 Internet 流式传输音乐。它具有一个简单的界面,用于上传曲目和管理播放队列,以及一个供听众使用的简约播放器。在后台,它使用 HLS 通过 HTTP 流式传输音乐,将数据存储在 SQLite 中,并利用 FFmpeg 进行音频处理 — 所有这些都打包在一个紧凑的 Docker 容器中,以便于部署。

主要特点

  1. 自托管:用户可以自行部署,完全控制音频流媒体。
  2. 简洁界面:易于使用的界面,方便上传和管理音乐。
  3. HTTP 流媒体:通过 HLSHTTP Live Streaming)技术进行音乐流媒体传输。
  4. 数据存储:使用 SQLite 存储数据,确保轻量级和高效。
  5. 音频处理:利用 FFmpeg 进行音频处理,提供高质量的音频流。

应用场景

  • 个人在线电台:用户可以创建自己的在线电台,分享音乐。
  • 活动直播:用于活动或聚会中的音乐播放。
  • 社区广播:帮助社区组织共享音乐或播客内容。

Airstation 为音乐爱好者提供了一个灵活且易于使用的平台,满足个人和小型组织的音乐流媒体需求。

安装

在群晖上以 Docker 方式安装。

在注册表中搜索 airstation ,选择第一个 cheatsnake/airstation,版本选择 latest

本文写作时, latest 版本对应为 1.0.0-beta.4

docker 文件夹中,创建一个新文件夹 airstation,并在其中建两个子文件夹 datastatic

文件夹 装载路径 说明
docker/airstation/data /app/storage 存放数据库
docker/airstation/static /app/static 存放上传的音乐文件和 HLS 切片文件等

端口

本地端口不冲突就行,不确定的话可以用命令查一下

1
2
# 查看端口占用
netstat -tunlp | grep 端口号
本地端口 容器端口
7331 7331

环境

可变
AIRSTATION_SECRET_KEY 用来登录电台控制面板的密钥
AIRSTATION_JWT_SIGN 用于签名 JWT 会话的密钥

使用长度至少为 10 个字符的随机字符串生成器来为这些变量生成值!可以使用 openssl rand -base64 32 或者 Bitwarden来生成

命令行安装

如果你熟悉命令行,可能用 docker cli 更快捷

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 新建文件夹 airstation 和 子目录
mkdir -p /volume1/docker/airstation/{data,static}

# 进入 airstation 目录
cd /volume1/docker/airstation

# 运行容器
docker run -d \
--restart unless-stopped \
--name airstation \
-p 7331:7331 \
-v $(pwd)/data:/app/storage \
-v $(pwd)/static:/app/static \
-e AIRSTATION_SECRET_KEY=FSbLEAEyfNyYNLOWuijtTFK1J/t022uyHkjIp0s4laM= \
-e AIRSTATION_JWT_SIGN=CG/Lnxl/TRx9KDzC/XI0IU6IaHAplJgn0YQvrLvEgL4= \
cheatsnake/airstation:latest

也可以用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
services:
airstation:
image: cheatsnake/airstation:latest
container_name: airstation
restart: unless-stopped
ports:
- "7331:7331"
volumes:
- ./data:/app/storage
- ./static:/app/static
environment:
AIRSTATION_SECRET_KEY: FSbLEAEyfNyYNLOWuijtTFK1J/t022uyHkjIp0s4laM=
AIRSTATION_JWT_SIGN: CG/Lnxl/TRx9KDzC/XI0IU6IaHAplJgn0YQvrLvEgL4=
healthcheck:
test: ["CMD", "wget", "--spider", "-q", "http://localhost:7331/"]
interval: 10s
timeout: 5s
retries: 3
start_period: 10s

然后执行下面的命令

1
2
3
4
5
6
7
8
9
10
# 新建文件夹 airstation 和 子目录
mkdir -p /volume1/docker/airstation/{data,static}

# 进入 airstation 目录
cd /volume1/docker/airstation

# 将 docker-compose.yml 放入当前目录

# 一键启动
docker-compose up -d

运行

后台

在浏览器中输入 http://群晖IP:7331/studio ,输入环境变量 AIRSTATION_SECRET_KEY 的值

登录成功后的主界面

Add 添加 mp3 音乐文件

处理完成后,会显示在 Library

勾选后,点 Queue

等添加到 Live queue 后,点播放按钮

播放

打开 http://192.168.0.197:7331。如果后台没有点播放按钮,你只会在下面看到 Stream offline

而后台点了播放按钮,会看到当前播放的曲名

进后台可以看到播放的进度

点中间的播放键,就可以听到音乐了

如果没声,开关扬声器试试

参考文档

cheatsnake/airstation: 🎵 Your own online radio station
地址:https://github.com/cheatsnake/airstation

Airstation: self-hosted Internet radio station : r/selfhosted
地址:https://www.reddit.com/r/selfhosted/comments/1kjyo2d/airstation_selfhosted_internet_radio_station/