Prośba o streamy 3 stacji radiowych z konwersją w tle

0

Piszę tą wiadomość ponieważ chciałbym poprosić o wykonanie w ramach swojego serwera streamów niniejszych stacji radiowych:
Studenckie Radio Żak: http://lodz.radio.pionier.net.pl:8000/radiozak.ogg
WP Radio: http://stream.open.fm/367 (tu chodzi o naprawę reakcji na useragenta przez którego to zamiast stacji słyszę generowany szum)
Polskie Radio dla Ukrainy: https://stream85.polskieradio.pl/radio_ukraina/ukraina.stream/playlist.m3u8
Niniejsze streamy byłyby skonwerterowane do mp3 i z linkiem zawierającym http:// na początku adresu.
W razie potrzeby dysponuje swoimi serwerami na 4stream.pl.
Byłbym wdzięczny za pomoc.

1

No ten streaming może być upierdliwy, raczej by było go trzeba streamować z apache lub nginx, tam trzeba trochę w konfiguracji pogrzebać na co mi się nie chcę za dużo bym musiał w dokumentacji grzebać.

Ja mam kawałek PoC, który napisałem i ogólnie jest bind do ffmpeg pod pythonem, ale zrobiłem stream shellem do pliku i w pythonie na szybko serwuję dane do clienta http.

Pobieramy zewnętrzny stream, streamujemy go pipem do ffmpeg, tam konwertujemy odpowiednio i streamuje output do pliku/wielu plików w partach lub do następnego stream pipe:1 ewentualnie fifo pliku.

wget -O - http://stream.open.fm/367 | ffmpeg -i pipe:0 -listen 1 -acodec libmp3lame out/song.mp3

W pythonie jako client możemy otworzyć ten plik i streamować go od początku lub od najnowszej części np. końca streamu, żeby użytkownik miał najnowsze dane, nie słuchał od początku.
Zapis całego streama do pliku nie jest chyba najlepszy, ale można dać go jako stream od razu, ale potem trzeba splitować stream na użytkowników dołączonych tu jest trochę kombinowania każdy user musi mieć widok na swój stream.

A najprościej i wiadomo nie najlepiej, ale za to na szybko taki skrawek kodu rzucę.

Plik powiedzmy main.py

from fastapi import FastAPI
from fastapi.responses import StreamingResponse

app = FastAPI()

def stream():
  with open("out/song.mp3", 'rb') as file:
    file.seek(0, 2)
    while True:
      yield file.read()

@app.get("/stream.mp3")
async def main():
  return StreamingResponse(stream(), media_type="audio/mp3")

Odpalasz to komendą

uvicorn main:app
0

A umiałby może ktoś ogarnąć tą sprawę? Ja niestety z poziomu jedynie smartfona zbytnio nie podziałam :(

1 użytkowników online, w tym zalogowanych: 0, gości: 1