Перепишите поток Shoutcast / Icecast, используя PHP - PullRequest
0 голосов
/ 14 января 2020

Мне нужно каким-то образом перезапустить поток Shoutcast / Icecast, используя PHP.

Почему?

Поскольку потоки Shoutcast / Icecast не являются https. И он отправляется не через порт 80, а через 443, а через несколько разных странных портов. И мне нужны https ссылки на нормальные / стандартные порты, такие как 80 или 443. Это самая большая причина, хотя я думаю, что есть некоторые более, но менее важные.

Эти ссылки похожи на http://hostname.com:5921/stream, и мне нужно ссылки вроде https://hostname.com/stream?user=x.

Я провел глубокое исследование и не нашел много.

Я нашел такие вещи:

Лучший код, который я собрал для теперь из всех ресурсов и моих собственных попыток:

$link = 'http://shoutStreame.streamland.com/proxy/radioGame?mp=/1'; //example link to a Shoutcast stream (not working, only example)

ob_start();
header("Content-Transfer-Encoding: binary");
header("Content-Type: audio/mpeg, audio/x-mpeg, audio/x-mpeg-3, audio/mpeg3");
header('Content-Disposition: attachment; filename="stream.mp3"');
header('X-Pad: avoid browser bug');
header('Cache-Control: no-cache');
$handle = fopen($link, 'r');

while (($data = fread($handle, 1024))) {
    echo $data;
    ob_flush();
    flush();
}

И этот код не кажется ... хорошим? отлично?

Мне просто кажется, что я делаю это неправильно с этим кодом, и это неэффективно и может привести к проблемам.

Мои основные проблемы:

  • эффективность, особенно по многим запросам
  • юридические проблемы? Есть ли какие-то реальные проблемы, когда делаешь таким образом? перераспределение с использованием php?
  • cra sh проблемы? как cra sh всего php, nginx или даже машины?
  • потеря соединения, как этот php сценарий будет продолжать умирать через некоторое время или что-то еще

А может быть, может быть и больше.

Мне действительно трудно найти больше ресурсов, данных и информации, касающихся этой конкретной темы c переадресации аудиопотока с использованием PHP.

Пока я действительно не знаю, что делать. Я просто исследую и думаю, но, как я уже сказал, действительно трудно найти что-то еще об этом топи c. И это единственный код, который у меня есть на данный момент, и я не знаю, стоит ли его использовать ...:)

1 Ответ

2 голосов
/ 15 января 2020

Поскольку потоки Shoutcast / Icecast не являются https.

False! Icecast поддерживает HTTPS просто отлично. Смотрите тег <ssl-certificate> в файле конфигурации. http://www.icecast.org/docs/icecast-2.4.1/config-file.html

И он отправляется не через порты 80 и 443, а через несколько разных странных портов.

Также false! И SHOUTcast, и Icecast могут быть настроены для работы на любом порту, который вы пожелаете. Большинство станций используют стандартные порты, и вы тоже можете.

Эти ссылки похожи на http://hostname.com: 5921 / stream , и мне нужны такие ссылки, как https://hostname.com/stream?user=x вместо.

Почему вам нужно это сделать? Вероятно, самое простое, что можно сделать, это перенаправить на URL-адрес потока из вашего сценария /stream. Это удовлетворит большинство потребностей.

Все ваши технические проблемы действительны. Я определенно не рекомендую ретрансляцию потока через PHP. С тем, что вы делаете, вы заставляете устанавливать восходящее соединение каждый раз, и на самом деле безрезультатно. Кроме того, в Icecast есть некоторые хаки совместимости для клиентов, которые вы теряете, если используете прокси-соединение.

...