Como Criar Uma Rádio Online Com Shoutcast E PHP

Há alguns anos atrás, se você falasse em montar uma rádio online, sendo um programador inexperiente, seus amigos certamente diríam que você perdería tempo, por causa da dificuldade não em elaborar o sistema, mas por falta de informação.

Hoje qualquer empresa ou rádio de pequeno porte, tem sua versão na Internet, onde seus usuãrios podem ouvir a qualquer momento.

Se você ainda não trabalhou com aplicação de shoutcast, hoje você terá a oportunidade de saber mais sobre este assunto.

Como encontro um Servidor?

Antes de pensar em criar uma aplicação, precisamos ter idéia de como trabalhar com este tipo de aplicação, já que 20% dele funciona no script e 80% Servidor.

Se você nunca trabalhou com este tipo de solução, te aconselho a visitar o site da ShoutCast.

Clique em “Sign In / Register” e efetue seu cadastro.

OBS.: Se você já for cadastrado na AOL, Yahoo, Google ou Facebook, faça seu acesso e o sistema lhe dará permissão automática.

Após a autenticação devida, você será direcionado para seu Profile (conforme imagem a seguir).

Clique em “My Stations” para visualizar as estações já criadas.

Caso ainda não tenha, clique em “Add New Station” (conforme imagem a seguir).

Abrirá a tela a seguir, onde será necessário preencher um pequeno formulário.

Preenchido o formulário, clique em “submit” (conforme imagem a seguir).

Após preencher o cadastro, você será redirecionado para a tela a seguir, onde poderá efetuar o download das configurações (conforme imagem a seguir).

Com as informações de acesso em mãos, efetue as configurações devidas em seu Script para rodar shoutcast.

Configurando Sua Rádio

Após configurar as informações em seu Servidor (seja do shoutcast.com ou outro de sua preferência), tendo as informações de configuração em mãos, vamos ao próximo passo:

Acesse o ficheiro “config.php” e altere as informações de configuração (conforme ficheiro a seguir):


<?php
// CONFIGURAÇÕES

$scdef    = "NOME DA ESTAÇÃO";         // Nome da Estação de Rádio
$scip     = "IP OU URL DO SERVIDOR SHOUTCAST";    // IP ou URL do Servidor Shoutcast
$scport   = "PORTA DO SERVIDOR SHOUTCAST";        // PORTA do Servidor Shoutcast
$scpass   = "SENHA PARA O SERVIDOR SHOUTCAST";    // SENHA de acesso ao Servidor Shoutcast
$ircsite  = "IRC SERVER PARA O HOST DE LISTNERS"; // IRC SERVER
$file     = "shout.xml";            // Arquivo para guardar o conteudo da rádio. OBS.: Deve ter permissão chmod 777
$cache_tolerance = "120";         // Quantos Segundos de CACHE

// ############################################################################################
// ##############  PARE !!! SÓ EDITE SE VOCÊ TIVER CERTEZA DO QUE ESTA FAZENDO  ###############
// ############################################################################################

//error_reporting(E_ALL);
//error_reporting(E_ALL & ~E_NOTICE);

// Shoutcast Server Stats
// Parses shoutcasts xml to make an effective stats thing for any website
if (!isset ($_REQUEST['do'])) {
//If not isset provide a dummy value here
  $_REQUEST['do'] = "";
}
// Check if Cache needs an update
if (file_exists($file)) {
  clearstatcache();
// filemtime info gets cached so we must ensure that the cache is empty
  $time_difference = time() - filemtime($file);
//   echo "$file was last modified: " . date ("F d Y H:i:s.", filemtime($file)) . "( " . $time_difference . " seconds ago) <br>" . "The cache is set to update every " . $cache_tolerance . " seconds.<br>";
}
else {
  $time_difference = $cache_tolerance;
// force update
}
// Parses shoutcasts xml to make an effective stats thing for any website
$scfp = fsockopen($scip, $scport, $errno, $errstr, 1);
// Connect to the server
if ($scfp) {
  if ($time_difference >= $cache_tolerance) {
// update the cache if need be
// Get XML feed from server
    if (empty ($scsuccs)) {
      fputs($scfp, "GET /admin.cgi?pass=$scpass&mode=viewxml HTTP/1.0\r\nUser-Agent: SHOUTcast Song Status (Mozilla Compatible)\r\n\r\n");
      while (!feof($scfp)) {
        $xmlfeed = fgets($scfp, 8192);
      }
      fclose($scfp);
    }
// Output to cache file
    $tmpfile = fopen($file, "w+");
    $fp = fwrite($tmpfile, $xmlfeed);
    fclose($tmpfile);
    flush();
// Outputs the cached file after new data
    $xmlcache = fopen($file, "r");
    $page = '';
    if ($xmlcache) {
      while (!feof($xmlcache)) {
        $page .= fread($xmlcache, 8192);
      }
      fclose($xmlcache);
    }
  }
  else {
// outputs the cached file
    $xmlcache = fopen($file, "r");
    $page = '';
    if ($xmlcache) {
      while (!feof($xmlcache)) {
        $page .= fread($xmlcache, 8192);
      }
      fclose($xmlcache);
    }
  }
  $loop = array("AVERAGETIME", "CURRENTLISTENERS", "PEAKLISTENERS", "MAXLISTENERS", "SERVERGENRE", "SERVERURL", "SERVERTITLE", "SONGTITLE", "SONGURL", "IRC", "ICQ", "AIM", "WEBHITS", "STREAMHITS", "LISTEN", "STREAMSTATUS", "BITRATE", "CONTENT");
//define all the variables to get (delte any ones you don't want)
  $y = '0';
  while (!empty ($loop[$y])) {
    $pageed = ereg_replace(".*<$loop[$y]>", "", $page);
    $scphp = strtolower($loop[$y]);
    $$scphp = ereg_replace("</$loop[$y]>.*", "", $pageed);
    if ($loop[$y] == 'SERVERGENRE' || $loop[$y] == 'SERVERTITLE' || $loop[$y] == 'SONGTITLE' || $loop[$y] == 'SERVERTITLE')
      $$scphp = urldecode($$scphp);
    ;
    $y++;
  }
//end intro xml elements
//get song info and history
  $pageed = ereg_replace(".*<SONGHISTORY>", "", $page);
  $pageed = ereg_replace("<SONGHISTORY>.*", "", $pageed);
  $songatime = explode("<SONG>", $pageed);
  $r = 1;
  while (!empty ($songatime[$r])) {
    $t = $r - 1;
    $playedat[$t] = ereg_replace(".*<PLAYEDAT>", "", $songatime[$r]);
    $playedat[$t] = ereg_replace("</PLAYEDAT>.*", "", $playedat[$t]);
    $song[$t] = ereg_replace(".*<TITLE>", "", $songatime[$r]);
    $song[$t] = ereg_replace("</TITLE>.*", "", $song[$t]);
    $song[$t] = urldecode($song[$t]);
    $dj[$t] = ereg_replace(".*<SERVERTITLE>", "", $page);
    $dj[$t] = ereg_replace("</SERVERTITLE>.*", "", $pageed);
    $r++;
  }
//end song info
  $averagemin = "";
  $hours = intval(intval($averagetime) / 3600);
  $averagemin .= ($hours) ? str_pad($hours, 2, "0", STR_PAD_LEFT) : $hours . 'h&nbsp;';
  $minutes = intval(($averagetime / 60) % 60);
  $averagemin .= str_pad($minutes, 2, "0", STR_PAD_LEFT) . 'm&nbsp;';
  $seconds = intval($averagetime % 60) . 's';
  $averagemin .= str_pad($seconds, 2, "0", STR_PAD_LEFT);

  $irclink = 'irc://' . $ircsite . '/' . $irc . '';
  $listenamp = 'http://' . $scip . ':' . $scport . '/listen.pls';
  $listenlnk = 'http://' . $scip . ':' . $scport . '';
}
?>

Feitas as configurações, se todos os dados tiverem corretos, você terá a possibilidade de rodar imediatamente sua rádio.

Não Sei Configurar, Mas Quero Uma Rádio Online

Se você não sabe configurar e não quer ter dor de cabeça com configuração de script, não se preocupe.

Disponibilizamos uma segunda opção, onde você poderá pegar o conteúdo de uma rádio de sua preferência (conforme configurações dos ficheiros a seguir).

RADIO.PHP:



<?php

class radio { //web embedded radio player
  var $attribs;
  function __construct($src) {
    //$this->attrib('pluginspage','http://www.microsoft.com/Windows/MediaPlayer/');
    //uncomment line above when really needed
    $this->attrib('type','application/x-mplayer2');
    $this->attrib('width','200');
    $this->attrib('height','45');
    $this->attrib('loop','False');
    $this->attrib('autostart','True');
    $this->attrib('showstatusbar','false');
    $this->attrib('volume','30');
    $this->attrib('src',$src);
  }
  
  function attrib($name, $value) {
    $this->attribs[$name] = $value;
  }
  
  function __toString() {
    foreach($this->attribs as $name => $value) {
      $tmp .= " $name='$value'";
    }
    return "<embed$tmp></embed>";
  }
}

?>

No ficheiro acima, temos um aplicativo básico com as opções básicas que responderão ao ficheiro a seguir:

PLAYER.PHP:


<?php

require_once 'radio.php';
//$radio = new radio('other2.asx');
$radio = new radio('http://radiodoblenueve.com:9900/');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>
  <title>:: WEBMASTER.PT :: Shoutcast + PHP ::</title>
  <meta http-equiv="content-type" content="text/html;charset=utf-8" />
  <meta name="generator" content="Geany 0.14" />
</head>

<body>
  <?= $radio; ?>
</body>
</html>

No ficheiro acima temos 2 opções:

Pegar o conteúdo do ficheiro “other2.asx” (onde ficarão gravadas todas as músicas) ou o conteúdo puxado diretamente do link da rádio (com a porta devida).

Ele é prático, não tem muito o que você mexer. Basta colocar o endereço correto.

Bem… Disponibilizei os ficheiros em anexo. É só você baixar, configurar e ouvir sua rádio predileta.

Download do código usado neste tutorial > Como Criar Uma Rádio Online Com Shoutcast E PHP

Be Sociable, Share!

5 Comentários

  1. como assim? é só eu por o endereço das musicas e pega? O-O'

  2. Alexandre

    ola, eu fiz meu cadastro no shoucast. e sinceramente nao sei o que fazer com a authentication key e o arquivo de configuração Sample_Sc_Serv.conf que baixei lá. pode me ajudar?

  3. Olá Muskitom,

    Para funcionar, você precisa ter acesso a um Servidor Shoutcast.

    Acredito que você verificando com o sitio que tu disponibiliza seu web site, eles lhe ajudarão neste sentido, passando as informações para que tu possa usar o sistema.

    Abraço,

    Quemuel Aquino

  4. Felipe

    Para criação de rádio online,disponibilizei o seguinte tutorial super explicado com imagens e com downloads!

    lembrando a todos: é gratuito? É! mas não tem como auxiliar,porque ja postei o tutorial que está DESENHADO ENTão nao tem erro:
    Coloquei a link do 4shared em compactadores, pq o link é grande)
    Link 1: http://migre.me/5Aj33 (download do tutorial pelo 4shared)
    link 2: http://lc4.in/697C (alternativo se o 1º nao der, tem o segundo

    deixarei meu email para dúvidas: ife_lipe@hotmail.com – só duvidas nao me mande e-mail pedindo para fazer rádio para você, ok?

    espero ter ajudado

Participa! Comenta...