You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat: video listener fix, AAC-in-TS for HLS, README overhaul
Raw /mount/video listeners now seek back to the most recent keyframe
and prepend the cached SPS/PPS Annex-B NALUs before any live bytes.
mpv / ffmpeg stop spamming "non-existing PPS 0 referenced" /
"reference picture missing during reorder" because the listener
joins on a clean IDR boundary instead of mid-GOP. Stream gains
VideoInfo() accessor so the server package can read the video
header state without touching the unexported stream mutex.
AAC audio in HLS:
- New BuildADTSHeader helper in codec_aac.go.
- RTMP ingest parses the AAC AudioSpecificConfig on the first
sequence-header packet, extracts profile / sampleRateIdx /
channelConfig, and wraps every raw AAC frame in ADTS before
broadcast.
- MuxAVSegment takes an audioStreamType param; writePMTAV emits
stream_type 0x03 (MP3) or 0x0F (ADTS-AAC) accordingly.
- HLSOutput picks the stream type from the audio track's content
type so AAC sources carrying H.264 now produce a playable A/V
HLS stream end-to-end.
README overhauled: tagline switches to "audio + video", the old
"What's new in v2.0 Beta" list is replaced by a v2.0.0-beta.5
section covering the video pipeline + the audio / auth / ops fixes
from the last few weeks, and a new "Streaming video from OBS"
section walks through the full OBS + HLS flow.
> High-performance Icecast-compatible streaming with WebRTC, AutoDJ, transcoding, and a world-class web interface. Deploy anywhere in seconds.
7
+
> High-performance Icecast-compatible streaming server with RTMP/SRT/WebRTC ingest, AutoDJ, live audio transcoding, HLS audio/video output, and a built-in admin SPA. Deploy anywhere in seconds.
@@ -60,15 +127,17 @@ Traditional streaming servers can be complex to configure and resource-heavy. Ti
60
127
61
128
### Streaming & Protocols
62
129
-**Icecast2 Compatible**: Works with standard source clients (BUTT, OBS, Mixxx, LadioCast) and players (VLC, web browsers).
130
+
-**RTMP Ingest**: OBS / ffmpeg / any RTMP publisher can push H.264 + MP3 or H.264 + AAC. OBS's Server-path = mount, Stream-key = password UX just works.
131
+
-**SRT Ingest**: Low-latency SRT with MPEG-TS demux for both audio and video.
63
132
-**WebRTC Source & Playback**: Ultra-low-latency browser-based broadcasting and listening via the Go Live page.
133
+
-**HLS A/V Output**: `/mount/playlist.m3u8` serves audio-only or audio+video segments depending on what the source pushes. PMT advertises MP3 or ADTS-AAC correctly; PCR is emitted; SPS/PPS are injected on every keyframe so late joiners can decode.
64
134
-**High-Performance Distribution**: Shared circular buffer architecture designed for 100,000+ concurrent listeners per stream.
65
135
-**Instant Start**: Listeners receive a 64KB audio burst upon connection, eliminating the "buffering" delay.
66
-
-**Built-in Transcoding**: PureGo transcoding (MP3/Opus) to provide multiple quality options from a single source. No FFmpeg required.
136
+
-**Multi-Codec Transcoding**: Pure-Go transcoder and AutoDJ accept MP3 / Ogg Opus / Ogg Vorbis / FLAC / FLAC-in-Ogg / WAV as input and re-encode to MP3 or Opus with automatic resampling. No FFmpeg required.
67
137
-**Edge Relaying**: Pull streams from upstream servers with automatic reconnection.
68
138
-**Smart Fallback & Auto-Recovery**: Automatically switch listeners to a backup stream if the primary drops.
69
139
-**Outbound ICY Metadata**: Injects song titles into the audio stream for traditional radio players.
70
140
-**Playlist Support**: `.m3u8`, `.m3u`, and `.pls` playlists for VLC, Winamp, mobile apps.
71
-
-**HLS Output**: Automatic HLS segmentation for each mount point.
72
141
73
142
### AutoDJ
74
143
-**Multi-Instance Orchestration**: Multiple independent AutoDJs on different mounts from a single server.
@@ -172,6 +241,50 @@ Point your encoder (BUTT, OBS, Mixxx) to:
172
241
173
242
Or use the **Go Live** page in the admin panel to broadcast directly from your browser via WebRTC.
174
243
244
+
## Streaming video from OBS
245
+
246
+
TinyIce accepts H.264 + AAC (or H.264 + MP3) over RTMP and produces
247
+
HLS audio+video at `/<mount>/playlist.m3u8`.
248
+
249
+
1.**Enable RTMP** in `tinyice.json`:
250
+
251
+
```json
252
+
"ingest": {
253
+
"rtmp_enabled": true,
254
+
"rtmp_port": "1935"
255
+
}
256
+
```
257
+
258
+
2.**Create a mount** in the admin UI (Streams → Add Mount). Give it
259
+
a password — that password becomes your OBS Stream Key.
260
+
261
+
3.**OBS → Settings → Stream** (Service: Custom):
262
+
263
+
-**Server**: `rtmp://<your-host>/<mount>` — e.g. `rtmp://radio.example.com/live`
264
+
-**Stream Key**: your mount's source password
265
+
266
+
(The classic layout `rtmp://<host>/` + Stream Key `mount?key=password`
267
+
also works.)
268
+
269
+
4.**OBS → Settings → Output** — set Video Encoder to `x264` (or a
270
+
hardware H.264 encoder) and Audio Encoder to AAC (default) or
271
+
MP3. 2-second keyframe interval is a good default for HLS latency.
272
+
273
+
5.**Click Start Streaming.** The server log will show
274
+
`RTMP: Publishing started mount=/live` followed by
275
+
`RTMP: Parsed AVC config` and `RTMP: Parsed AAC ASC`.
276
+
277
+
6.**Watch it** three ways:
278
+
279
+
-**Built-in player**: `https://<your-host>/player/<mount>`. If the
280
+
source has video, the player renders an HTML5 `<video>`; Safari
281
+
plays HLS natively, other browsers get `hls.js` loaded on
0 commit comments