IceStation - jednokrotne odtworzenie playlisty

zahoryzontem

Nowy użytkownik
Noobie
19 Marzec 2011
4
0
1
Witam...

Może banalne pytanie, ale nie moge znaleźć rozwiązania - czy da się 'puścić' przygotowaną listę, żeby nie leciała 'w kółko' tylko po odtworzeniu całości skończyć emisję?
 
No dobra, zrobiłem to troche dookoła, jeśli nie da się inaczej to może się komuś przyda :)

potrzeba kilka skryptów

1. icecast.savestart.php - zapisuje config dla startu rozglaszania
dla wszystkich zmiennych podstawiamy wartości z naszego konfigu, jedynie $ices0 musi być równe jeden.
PHP:
<?php
$File = "icecast.includes.php";
$Handle = fopen($File, 'w');
$Data = '<?php
$port = "8000";
$password = "hackme";
$ices0 = "1";
$randomize = "0";
$name = "Radio";
$genre = "test";
$description = "just test";
$URL = "http://your.radio.com";
$public = "0";
$reencode = "0";
$bitrate = "128";
$channels = "2";
?>';
  fwrite($Handle, $Data);
  fclose($Handle);
  $File = "icecast.ices.conf";
  $Handle = fopen($File, 'w');
  $Data = "1"; // 1 dla start, 0 dla stop
  fwrite($Handle, $Data);
  fclose($Handle);
?>

2. drugi skrypt prawie identyczny, tyle że $ices0 ma być równe zero, bo będziemy zatrzymywać rozgłaszanie,
Zwróć też uwagę na drugą zmienną $Data, pod koniec skryptu, wartości jak dla ices0.
Nazwa drugiego skryptu icecast.savestop.php

Można oczywiście dać jeden skrypt i przekazać 0 lub 1 przez parametr, może potem poprawie :)

Kolejny skrypt sprawdza co jest obecnie grane, za chwile wyjaśnie po co nam to :)

Nazwijmy go test.php - oczywiście podstawicie własne IP QNAP'a i opis dla braku transmisji...
PHP:
<?php
$tekst = @file_get_contents("http://192.168.13.1:8000/status.xsl");
preg_match_all("/<td class=\"streamdata\">.*?<\/td>/", $tekst, $song);
$csong = strip_tags($csong);

if ($csong == "")
{
$html = "<strong>opis dla braku nadawania</strong>";   
}
elseif ($csong == "icecast_stop")
{   
$html = $csong;   
}
else
{
$csong =  $song[0][9];   
$csong = preg_replace("/[0-9\-]/","",$csong);
$html = "<strong>Current Song:<br>". $csong . "<br>[" .$song[0][5]. "]</strong>";
}
echo $html;
?>

Główny plik troche większy niestety... nazwij go jak sobie chesz :)

Zwróć uwagę na jQuery - ułatwiamy sobie zycie :)
HTML:
<html>
<title>
Radio
</title>
<head>
<script src="jquery-1.4.4.min.js"></script>
</head>
<body  align="center" style="background-color: black; color: gold;">
<form name="f1" action="">
<table align="center" cellspacing="5" cellpadding="5" >
<tr align="center">
<td>
current time:<br />
<div id="zegar"></div>
</td>
<td>
start broadcast:<br />
<input type="text" name="czas" size="10" />
</td>
<td>
stop broadcast:<br />
<input type="text" name="czas_off" size="10" />
</td>
</tr>
</table>
</form>
<script type="text/javascript">
<!-- <![CDATA[
function icecast_restart() {
window.open("/.config/icestation/icecast.restart.php","icecast");
}
function icecast_stop() {
$.ajax({
  type: "POST",
  url: "/.config/icestation/icecast.savestop.php",
  cache: false,
  success: function(html) {
      icecast_restart();
}
});   
}
function icecast_start() {
$.ajax({
  type: "POST",
  url: "/.config/icestation/icecast.savestart.php",
  cache: false,
  success: function(html) {
      icecast_restart();     
}
});   
}
function play(){
$.ajax({
  type: "POST",
  url: "test.php",
  cache: false,
  success: function(html) {
     if (html == "icecast_stop")
      {
      icecast_stop();
        }
      else
      {
      $("#song").html(html);
      setTimeout("play()", 2000);
      }
}
});   
}
function zegar() {
  data = new Date();
  godzina = data.getHours();
  minuta = data.getMinutes();
  sekunda = data.getSeconds();
  teraz = ""+((godzina<10)?"0":"")+godzina+
  ((minuta<10)?":0":":")+minuta+
  ((sekunda<10)?":0":":")+sekunda;
  //document.f1.zegar.value=teraz;
  $("#zegar").html("<b>" + teraz + "</b>");
  if (document.f1.czas.value==teraz) icecast_start();
  if (document.f1.czas_off.value==teraz) icecast_stop();
  setTimeout("zegar()",1000);
}
$(function() {
    zegar();
    play();   
});
// ]]> -->
</script>
<div>
<br>
<span id="song"></span>
</div>
</body>
</html>


Jak to działa?
U mnie dwa pierwsze pliki siedzą tam gdzie config icestation, czyli dla TS409 Qweb/.config/icestation/ dwa ostatnie w Qweb

Odpalamy ten ostatni plik - jeśłi w pierwszym polu wpiszemy godzine startu, o tej godzinie wystartuje audycja (plus pare sekund na restart icecast). Zatrzymujemy transmisję na dwa sposoby - albo podajemy czas w drugim okienku - wtedy zatrzymamy emisje o tej godzinie, albo na końcu listy odtwarzania dodajemy 'song' icecast_stop.mp3 - obojętnie co tam będzie, nawet cisza, 30 sekund w zupełności wystarczy. Niestety, jeśli chcemy użyć icecast_stop.mp3 nie możemy użyć odtwarzania losowego - ten 'song' ma być jako ostatni, bo wyłącza on transmisję.

Wadą tego rozwiązania jest to, że nasz (ostatni) plik musi zostać otwarty w przeglądarce, sami możemy iść na ryby - zaletą.. cóż, zaletą chyba jest to że to działa :)