Autor Zpráva
Chatík
Profil
Dobrý den,

prvně Vám sem hodím script který mám a pak popíši co dělá.
Script:
   //priklad pouziti funkce
    echo getMp3StreamTitle("http://streaming204.radionomy.com/A-Better-Country-Legends-Classics-Station?group=0", 19200);
  
    //samotna funkce
    function getMp3StreamTitle($streamingUrl, $interval, $offset = 0, $headers = true)
    {
        $needle = 'StreamTitle=';
        $ua = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36';

        $opts = array('http' => array(
                'method' => 'GET',
                'header' => 'Icy-MetaData: 1',
                'user_agent' => $ua
            )
        );

        if (($headers = get_headers($streamingUrl)))
            foreach ($headers as $h){
                $currentSection = explode(':', $h);
                if (strpos(strtolower($h), 'icy-metaint') !== false && ($interval = $currentSection[1]))
                    break;
            }
        $context = stream_context_create($opts);

        if ($stream = fopen($streamingUrl, 'r', false, $context))
        {
        $buffer = stream_get_contents($stream, $interval, $offset);
        fclose($stream);

        if (strpos($buffer, $needle) !== false)
        {
        $currentSectionTwo = explode($needle, $buffer);
        $title = $currentSectionTwo[1];
        return substr($title, 1, strpos($title, ';') - 2);
        }
        else
        return getMp3StreamTitle($streamingUrl, $interval, $offset + $interval, false);
        }
        else
        throw new Exception("Unable to open stream [{$streamingUrl}]");
        }

Takže dělá to že otevře adresu streamu a zobrazí jaký hraje interpret a jaká hraje skladba.
Funguje na jedničku.
Co bych potřebova nyní já, potřeboval bych přidat pár dalších streamů.
Adresa streamu je zde: echo getMp3StreamTitle("http://streaming204.radionomy.com/A-Better-Country-Legends-Classics-Station?group=0", 19200);

Potřeboval bych jestli extuje nějaká možnost přidat streamy aby to bylo například:
echo getMp3StreamTitle("stream_id_1");
echo getMp3StreamTitle("stream_id_2");
echo getMp3StreamTitle("stream_id_3");
echo getMp3StreamTitle("stream_id_4");
echo getMp3StreamTitle("stream_id_5");
.......

Samozřejmě že místo stream_id_1, stream_id_2, stream_id_3 atd., by byli správné adresy streamů.
Je nějaká možnost to takto udělat?
Jde mi o to aby každý stream měl nějaké svoje id abych to mohl potom nějak vrátit ajaxem(sice ještě nevím jak ale to se třeba potom zeptám)
Díky za každou radu ať pozitivní nebo negativní


Ještě přidám index.php kde pak ajaxem vypisuji ten script
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">

<head>
  <title>Untitled</title>
  <script type="text/javascript" src="jwplayer.js"></script>
</head>

<body>
 <script type="text/javascript" src="http://ajax.googleapis.com/ajax/
libs/jquery/1.3.0/jquery.min.js"></script>
<script type="text/javascript">
var auto_refresh = setInterval(
function ()
{
$('#load_tweets').load('record_count.php').fadeIn("slow");
}, 15000); // refresh every 10000 milliseconds

</script>
<div id="myElement">Loading the player...</div>
<script type="text/javascript">
    jwplayer("myElement").setup({
      playlist: [{
        sources: [{
          file: "http://streaming204.radionomy.com/A-Better-Country-Legends-Classics-Station?group=0",
          provider: "sound",
          type: "mp3"
        }],
        title: '<div>A Better Radio - Country Classics (USA) <marquee behavior=alternate><div id="load_tweets"></div>  </div> '
      },{
        sources: [{
          file: "http://7639.live.streamtheworld.com:80/977_COUNTRY_SC",
          provider: "sound",
          type: "mp3"
        }],
        title: '<div>Country radio<marquee behavior=alternate><div id="load_tweets"></div>  </div>'
      }],

    autostart: "false",
    listbar: { 
        position: "bottom",
        layout: "basic",
        size: 136
      },
    height: 164,
    width: 300
    });
</script>

</body>

</html>
Takže jde ptoom aby ze scriptu byl stream_id_1 u prvního radia, stream_id_2 u druhého radia atd.
Doufám že je tomu rozumět
Chatík
Profil
Takže jsem to vyřešil takto:
$data['fce1'] = getMp3StreamTitle('http://streaming204.radionomy.com/A-Better-Country-Legends-Classics-Station?group=0');
$data['fce2'] = getMp3StreamTitle('http://7639.live.streamtheworld.com:80/977_COUNTRY_SC');
echo json_encode($data); 

    function getMp3StreamTitle($steam_url)
    {
        $result = false;
        $icy_metaint = -1;
        $needle = 'StreamTitle=';
        $ua = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36';
 
        $opts = array(
            'http' => array(
                'method' => 'GET',
                'header' => 'Icy-MetaData: 1',
                'user_agent' => $ua
            )
        );
 
        $default = stream_context_set_default($opts);
 
        $stream = fopen($steam_url, 'r');
 
        if($stream && ($meta_data = stream_get_meta_data($stream)) && isset($meta_data['wrapper_data'])){
            foreach ($meta_data['wrapper_data'] as $header){
                if (strpos(strtolower($header), 'icy-metaint') !== false){
                    $tmp = explode(":", $header);
                    $icy_metaint = trim($tmp[1]);
                    break;
                }
            }
        }
 
        if($icy_metaint != -1)
        {
            $buffer = stream_get_contents($stream, 300, $icy_metaint);
 
            if(strpos($buffer, $needle) !== false)
            {
                $title = explode($needle, $buffer);
                $title = trim($title[1]);
                $result = substr($title, 1, strpos($title, ';') - 2);
            }
        }
 
        if($stream)
            fclose($stream);                
 
        return $result;
    }
 

Tím pádem mohu připsat streamů kolik chci.
Já vím že bych se měl ptát jinde, ale jak teď prosím vrátit ty data di ondex php?
Vím že ajaxem ale vůbec nevím jak a ani nemám představu jak by měl script vypadat.
Alphard
Profil
Vím že ajaxem ale vůbec nevím jak a ani nemám představu jak by měl script vypadat.
Kde přesně je problém? Ajax už se tam používá, je tam metoda jQuery.load, takže to můžete udělat stejně/podobně.
Script data vrací rovnou v json, takže na straně PHP snad ani nejsou třeba změny, možná jen přidat get parametr, který určí požadované streamy, aby to nebylo tak napevno.
V javscriptu lze použít metodu $.get, která na rozdíl od load nevkládá data do html bloku, ale zpracovává je callbackem.
Chatik
Profil *
Zkusil jsem toto,
<script type="text/javascript"> 
var auto_refresh = setInterval( 
function () 
{ 
$.get('record_count.php', function(data) { 
$('#1').html(data.fce1); 
$('#2').html(data.fce2); 
}); 
}, 3000); // refresh every 10000 milliseconds 

</script>
Ale je to asi špatně.


Nevratí to nic
Alphard
Profil
Měl jsem vám hned poradit metodu getJSON(), ale kouknout se dokumentace jste se mohl taky...
Chatík
Profil
Takto by to mělo být správně:
<script type="text/javascript">
      $(document).ready(function(){
      setInterval(function(){
        $.getJSON('record_count.php', function(data) {
            $('#1').html(data.fce1); 
            $('#2').html(data.fce2); 
        });
        },3000);
});
</script>

Už mi to vypisuje v index.php
Chatík
Profil
Ještě bych se zeptal na jednu otázku.
Je možné následující nějak zjednodušit?
Aby toho nebylo tolik řádků. Zatím jich je 18 ale bude jich asi +/- 34.
Ten script nyní trvá dost dlouho než se funkce zpracuje.
$data['fce1'] = getMp3StreamTitle('http://streaming204.radionomy.com/A-Better-Country-Legends-Classics-Station?group=0');
$data['fce2'] = getMp3StreamTitle('http://7639.live.streamtheworld.com:80/977_COUNTRY_SC');
$data['fce3'] = getMp3StreamTitle('http://mp3stream4.abradio.cz/country128.mp3');
$data['fce4'] = getMp3StreamTitle('http://mp3stream3.abradio.cz:8000/folk128.mp3');
$data['fce5'] = getMp3StreamTitle('http://mp3stream4.abradio.cz:8000/clickandcountry128.mp3');
$data['fce6'] = getMp3StreamTitle('http://relay1.181.fm:8134/;stream.nsv');
$data['fce7'] = getMp3StreamTitle('http://play.radiopetrov.com:8000/petrovFC');
$data['fce8'] = getMp3StreamTitle('http://streaming201.radionomy.com/a-better-country-station?group=0');
$data['fce9'] = getMp3StreamTitle('http://icy3.abacast.com/holstonvalley-wmevfmmp3-64');
$data['fce10'] = getMp3StreamTitle('http://out2.cmn.icy.abacast.com:80/wrbi-wrbifm-64');
$data['fce11'] = getMp3StreamTitle('http://crystalout.surfernetwork.com:8001/WBWI_MP3');
$data['fce12'] = getMp3StreamTitle('http://tier1.radiostreamlive.com:8012/radiocountrylive_mp3-high');
$data['fce13'] = getMp3StreamTitle('http://crystalin.surfernetwork.com:8000/KWWR_MP3');
$data['fce14'] = getMp3StreamTitle('http://crystalout.surfernetwork.com:8001/KSWG_MP3');
$data['fce15'] = getMp3StreamTitle('http://out2.cmn.icy.abacast.com:80/krwq-krwqfm-64');
$data['fce16'] = getMp3StreamTitle('http://streams.midutahradio.com/kmti.mp3');
$data['fce17'] = getMp3StreamTitle('http://kkbi.mccurtain.com:88/kkbi-med');
$data['fce18'] = getMp3StreamTitle('http://13.bteradio.com:9090/KGRT.mp3');


echo json_encode($data);
Jan Tvrdík
Profil
Chatík:
Je možné následující nějak zjednodušit?
Používáš slovo zjednodušit ve významu zjednodušit nebo zrychlit? Pokud jde o zjednodušení (tj. v podstatě zkrácené kódu), tak můžeš to celé provést v cyklu.

Ten script nyní trvá dost dlouho než se funkce zpracuje.
Můžeš to řešit paralelně, což by mělo celý proces radikálně zrychlit, nicméně počítej s tím, že pracovat v PHP paralelně se streamy je dost náročné a je k tomu mizerná dokumentace. Ale jde to =)
Chatík
Profil
Jan Tvrdík:
Ta druhá varianta se zdá velmi náročná, takže ji poštím k ledu.

U té první varinaty si neumím představit jak to projit cyklem.
Jan Tvrdík
Profil
Chatík:
U té první varinaty si neumím představit jak to projit cyklem.
$streams = [
    'fce2' => 'http://7639.live.streamtheworld.com:80/977_COUNTRY_SC',
    'fce3' => 'http://mp3stream4.abradio.cz/country128.mp3',
];

foreach ($streams as $name => $url) {
    $data[$name] = getMp3StreamTitle($url);
}
Chatík
Profil
Jan Tvrdík:
Děkuji.
Ještě se zeptám, to budu muset pak upravit i ten JS který mi to vraci do index.php?
Asi ano.
Nebudu už vím jak.
Ještě jednou díky

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: