ОсновноеRadiotalkПользовательское
Общие вопросы по интернет радио вещанию
7   •   Посмотреть все темы

Автоматизация эфира: проигрывание свежих подкастов.

 

94
chedim @chedim
Этот пхп-скрипт выводит плейлист треков, которые необходимо поставить в начале СЛЕДУЮЩЕГО за текущим часом.
Для интеграции с сэмом можно использовать функции WebToFile и Queue.AddList.

Скрипт написан в основном с одной целью: ставить свежие подкасты в эфир.

  1. <?
  2. error_reporting(E_NONE);
  3. /*
  4. скрипт возвращает список адресов, которые необходимо поставить после часовой отбивки.
  5. Адреса хранятся в MySQL-таблице:
  6. DROP TABLE IF EXISTS `local`.`timer`;
  7. CREATE TABLE `local`.`timer` (
  8. `time` int(10) unsigned NOT NULL default '0',
  9. `name` varchar(512) NOT NULL,
  10. `day` varchar(3) NOT NULL default '0',
  11. `id` int(10) unsigned NOT NULL auto_increment,
  12. `type` int(10) unsigned NOT NULL,
  13. PRIMARY KEY (`id`)
  14. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
  15. поле time: порядковый номер часа (1-24), в который необходимо поставить файл
  16. поле name: адрес файла (url или локальный)
  17. поле day: трехбуквенное обозначения дня недели, в который ставить файл (или ALL, если каждый день)
  18. поле id: номер записи :)
  19. поле type: тип файла (0 - звуковой файл, 1 - rss-файл подкаста)
  20. */
  21. mysql_connect('host', 'user', 'pass');
  22. mysql_select_db('database');
  23. $day = date('D');
  24. $time = date('G')+1;
  25. $query = "SELECT * FROM `timer` WHERE (`time` = '$time' OR `time` = 0) AND (`day` = '$day' or `day` = 'ALL')";
  26. $res = mysql_query($query) or die(mysql_error());
  27. $ret = '';
  28. while ($ln = mysql_fetch_array($res)) {
  29. if ($ln['type'] == 1) {
  30. $i = 0;
  31. $rss = simplexml_load_file($ln['name']);
  32. $urls = $rss->xpath('//enclosure');
  33. $addr = (is_array($urls[$i]['url'])) ? $urls[$i++]['url'][0] : $urls[$i]['url'];
  34. $i++;
  35. while(($i < count($urls)) && (($url = checkUrl("$addr")) === false)) {
  36. $addr = (is_array($urls[$i]['url'])) ? $urls[$i++]['url'][0] : $urls[$i]['url'];
  37. $i++;
  38. };
  39. if ($url) {
  40. if ($ret) $ret .= "\r\n".$url;
  41. else $ret = $url;
  42. }
  43. } else {
  44. if ($ln['name']) {
  45. if ($ret) $ret .= "\r\n".$ln['name'];
  46. else $ret = $ln['name'];
  47. }
  48. }
  49. }
  50. function checkUrl($url) {
  51. if (stristr($url, '.mp3?')) $adr = array_shift(explode('.mp3?', $url)).'.mp3';
  52. elseif(is_array($url)) $adr = $url[0];
  53. else $adr = $url;
  54. $headers = get_headers($adr, 1);
  55. if (@isset($headers['Location'])) {
  56. return checkUrl($headers['Location']);
  57. }
  58. if (@isset($headers['Content-Length']) && ($headers['Content-Length'] == 0)) return false;
  59. if (@isset($headers['Content-Type']) && (!strstr($headers['Content-Type'], 'audio'))) return false;
  60. return $adr;
  61. }
  62. echo $ret;
  63. ?>

0
94
chedim @chedim
Кстати, мысль: при помощи данного скрипта можно автоматически выводить в эфир диджеев по расписанию. Для этого достаточно в поле name в таблице указать ссылку на аудиопоток диджея (именно на поток, а не на плейлист!!! для IceCast эта ссылка выглядит так: ********** - БЕЗ .m3u!!!). Сэм сможет подключиться к этому потоку и начать его проигрывать.
Плюсы данного метода вывода диджеев в эфир:
- диджеи выходят по расписанию
- диджеи выводятся без артефактов в виде резкого переключения музыки.
- перед выходом диджея в эфир можно поставить джингл, открывающий его программу (для этого нужно немного изменить sql-запрос в скрипте, дописав к нему " ORDER BY `id`").
- если диджея не оказалось в эфире, то сэм это учтет и сразу начнет проигрывать следующий трек.

0
2605
Александр @AlexIT
Спасибо, будет время - потестим.

0





Согласие на обработку данных на нашем сайте

Продолжая просматривать страницу, вы соглашаетесь с использованием файлов «Cookie» и с Политикой конфиденциальности «Privacy».
Наверху или внизу страницы вы можете изменить валюту и язык по умолчанию. Английская версия сайта ещё находится в доработке и доступна не полностью.