PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Наколленый скрипт
DeepVarvar Супермодератор
Отправлено: 07 Июля, 2015 - 12:18:48
Post Id



Активный участник


Покинул форум
Сообщений всего: 10421
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Собственно, в здании, где дислоцируется наш офис, во всю идут ремонтные работы.
А с интернетом то проблемы.
Шеф приобрел какой-то свисток, но он не спасает, на всех его не хватит.

Так вот.
Я, обязательно буду сидеть с нахлобучеными наушниками.
Мне это помогает абстрагироваться и спокойно работать.
Причем жанр музыки совершенно не важен.
Остальным, как оказалось -- тоже.

Вобщем, чтобы не тратить драгоценные мегабайты на аудиострим извне, мы слили музло у кого какое было в одно место.
А я запилил наколенный скрипт, который всю эту кухню обслуживает:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. $speed = 20; // kbps
  4. $path = realpath('../../Music/streamer') . '/';
  5.  
  6. if (!array_key_exists('HTTP_ICY_METADATA', $_SERVER)) {
  7.     exit('You must open this URL with audio player!');
  8. }
  9.  
  10. header('ICY 200 OK');
  11. header('Icy-Notice2: Stream server via PHP v-0.1-alpha');
  12. header('Icy-Name: Local radio');
  13. header('Icy-Genre: misc');
  14. header('Icy-Url: ' . $_SERVER['HTTP_HOST']);
  15. header('Icy-Pub: 0');
  16.  
  17. $chunkSize = $speed * 1024 * 8;
  18. $tracks = glob($path . '*.mp3');
  19. if (!$tracks) {
  20.     $tracks = array();
  21. }
  22.  
  23. while (1) {
  24.     // shuffle all tracks
  25.     shuffle($tracks);
  26.     // each track by track
  27.     foreach ($tracks as $track) {
  28.         $fp = @ fopen($track, 'rb');
  29.         if ($fp) {
  30.             // play (streaming) track
  31.             while (1) {
  32.                 $data = fread($fp, $chunkSize);
  33.                 print $data;
  34.                 flush();
  35.                 if (strlen($data) < $chunkSize) {
  36.                     break;
  37.                 } else {
  38.                     sleep(1);
  39.                 }
  40.             }
  41.         }
  42.     }
  43. }


Достаточно указать откуда тащить аудио и скорость отдачи.
Собственно 20 кбпс достаточно.

Открываете ссылку с любого плеера, и вуаля!
Но для каждого приконнектившегося листенера будет играть свой набор треков.
А реализация одного общего эфира не влезла бы в эти 44 строки ))

Однако, рекурсивный поиск треков в подкаталогах оно не поддерживает.
Т.е. тащит все из одной единственной директории.
Для тех, кому рекурсивная шляпа понадобится -- реализуйте сами.
Я лишь показал сам принцип аудиостриминга.

Кароче, кому надо -- забирайте.
 
 Top
caballero
Отправлено: 07 Июля, 2015 - 14:09:29
Post Id


Активный участник


Покинул форум
Сообщений всего: 5985
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




ну, Fm радио в мабилке решает проблему и без PHP


-----
Open Source учетная система http://zippy[dot]com[dot]ua/
 
 Top
DeepVarvar Супермодератор
Отправлено: 07 Июля, 2015 - 14:29:42
Post Id



Активный участник


Покинул форум
Сообщений всего: 10421
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Ага, с рекламой каждые 5 минут, новостями ниачом, "высокоинтеллектуальными" изречениями говорунов, и заезженым плейлистом времён Ильича.
 
 Top
Мелкий Супермодератор
Отправлено: 07 Июля, 2015 - 14:42:38
Post Id



Активный участник


Покинул форум
Сообщений всего: 11478
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 554 раз(а)




Ну почему не FM догадался даже такой консерватор как я.
А вот почему не локальный проигрыватель?


-----
Если вы не знаете, почему это работает, вероятно, оно и не работает на самом деле. (С.Макконнелл)...
 
 Top
esterio
Отправлено: 07 Июля, 2015 - 15:06:24
Post Id



Активный участник


Покинул форум
Сообщений всего: 5022
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




Мелкий пишет:
А вот почему не локальный проигрыватель?

Согласен. VLC умеет стримить без особых проблем и есть под *nix-ы и окна
Хотя за код +1 в копилку
 
 Top
DeepVarvar Супермодератор
Отправлено: 07 Июля, 2015 - 16:52:26
Post Id



Активный участник


Покинул форум
Сообщений всего: 10421
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




ВЛЦ часто падает на стриме, уже проверено ))
(Добавление)
Ах, да -- еще так и хотелось чтобы все слушали разное, но из одной копилки.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Наработки по собственным проектам »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB