14 Jul 2025 |
n4ch723hr3r | that sounds complicated. why doesnt icecast just do m3u8 or something like that? | 13:43:44 |
matthewcroughan | [error] 57885#57885: *14 upstream sent invalid header: "\x20..." while reading response header from upstream, client: 192.168.5.222, server: icecast.example.com, request: "GET /radio HTTP/1.1", upstream: "http://192.168.5.196:8001/radio.ogg", host: "icecast.example.com" | 13:44:24 |
matthewcroughan | that's what you'll get if you try to use nginx to proxy to icecast on port 8000 | 13:44:34 |
matthewcroughan | because the webpage and other bits surrounding icecast are http, but the stream is tcp | 13:44:49 |
toonn | I've run into similar difficulty trying to proxy Ente. It has hardcoded-ish references in the code sharing backend addresses and such and it expects the host to be the same, only got part of the way through patching the behavior before I ran out of time to spend on it. | 13:44:57 |
n4ch723hr3r | i've proxied DNS (for DoH & DoT) with only bind9 and nginx before so i know that you can use nginx to forward TCP streams | 13:45:47 |
jappie | ^ look for stream config in the documentation | 13:46:06 |
matthewcroughan | Yes, it's just quite different and I haven't found a way yet | 13:46:18 |
matthewcroughan | This doesn't work either. Because it's using TCP and HTTP on the same port (8000) | 13:46:41 |
matthewcroughan | and when you visit in the browser on http://foo.com:8000 it proxies http, not tcp | 13:46:55 |
matthewcroughan | so the tcp stream proxy doesn't even get hit | 13:47:07 |
jappie | is this even allowed? | 13:47:19 |
n4ch723hr3r | cant you change one of the ports in the icecast config? | 13:47:20 |
matthewcroughan | No, if you make a new listen socket it seems to just create another http endpoint you can hit that has the same problem of combining tcp and http | 13:47:51 |
matthewcroughan | You can't bifurcate it | 13:48:05 |
matthewcroughan | * You can't bifurcate/split it | 13:48:11 |
n4ch723hr3r | "is that legal?" | 13:48:28 |
jappie | it just sounds so cursed lol - HTTP is what, layer 7? | 13:49:32 |
n4ch723hr3r | https://gist.github.com/virtadpt/94eb781cba3ec9c56a4f39ef6bf760f3
i found this đŸ¤¡ | 13:49:36 |
n4ch723hr3r | subs_filter_types application/xspf+xml audio/x-mpegurl audio/x-vclt text/css text/html text/xml;
subs_filter ':8000/' '/' gi;
subs_filter '@localhost' '@example.com' gi;
subs_filter 'localhost' $host gi;
subs_filter 'Mount Point ' $host gi;
| 13:49:57 |
matthewcroughan | I also found that, and couldn't get it working. | 13:50:06 |
matthewcroughan | Do you now see my predicament? | 13:50:12 |
matthewcroughan | The solution is to grow balls, get an IP, and run it on the internet. | 13:50:24 |
emily | you should probably just be using HLS or MPEG-DASH… | 13:50:27 |
matthewcroughan | Which is now what I've done | 13:50:28 |
matthewcroughan | Me, or icecast? | 13:50:47 |
n4ch723hr3r | ssh port forward :3 | 13:50:50 |
n4ch723hr3r | yes | 13:50:55 |
emily | or WHIP or SRT or RIST or really just anything other than Icecast | 13:51:05 |
n4ch723hr3r | you could also write a small nginx njs module to distinguish the two | 13:51:32 |