Kendi internet radyonuz

Birçoğumuz sabahları radyo dinlemeyi severiz. Ve güzel bir sabah, yerel FM radyo istasyonlarını dinlemek istemediğimi fark ettim. İlgilenmiyorum. Ancak bu alışkanlığın zararlı olduğu ortaya çıktı. Ve FM alıcısını bir İnternet alıcısıyla değiştirmeye karar verdim. Hızlı bir şekilde Aliexpress'den parça satın aldım ve bir İnternet alıcısı monte ettim.

İnternet alıcısı hakkında. Alıcının kalbi ESP32 mikro denetleyicisidir. KA-radyodan ürün yazılımı. Parçalar bana 12 dolara mal oldu. Montaj kolaylığı birkaç gün içinde monte etmeme izin verdi. İyi ve istikrarlı bir şekilde çalışıyor. 10 aylık çalışma sırasında yalnızca birkaç kez dondu ve o da yalnızca deneylerim nedeniyle. Kullanışlı ve iyi düşünülmüş bir arayüz, bir akıllı telefon ve bilgisayardan kontrol etmenizi sağlar. Tek kelimeyle, bu harika bir İnternet alıcısıdır.

Herşey tamam. Ancak bir sabah erkenden on binlerce radyo istasyonuna erişimim olmasına rağmen ilginç istasyonlar olmadığı sonucuna vardım. Sunucuların reklamlarından ve aptalca şakalarından rahatsız oldum. Sürekli bir istasyondan diğerine atlamak. Spotify ve Yandex.Müzik'i seviyorum. Ama üzücü olan şu ki, bunlar benim ülkemde çalışmıyor. Ve bunları internet alıcısı aracılığıyla dinlemek istiyorum.

Çocukluğumu hatırladım. Bir kayıt cihazım ve iki düzine kasetim vardı. Arkadaşlarımla kaset alışverişi yaptım. Ve harikaydı. Ses arşivlerimi yalnızca bir İnternet alıcısına aktarmam gerektiğine karar verdim. Elbette hoparlörlere bir müzik çalar veya iPod bağlama seçeneği de var ve endişelenmeyin. Ama bu bizim yolumuz değil! Konektörleri bağlamaktan nefret ediyorum)

Hazır çözümler aramaya başladım. Piyasada Radio-Tochka.com'dan kendi İnternet radyonuzu oluşturma teklifi var. 5 gün boyunca test ettim. İnternet alıcımda her şey yolunda gitti. Ancak fiyatı bana cazip gelmedi. Bu seçeneği reddettim.

10 GB hosting ödedim. Mp3 dosyalarımın ses akışını aktaracak bir şey üzerine bir senaryo yazmaya karar verdim. PHP'de yazmaya karar verdim. Hızlıca yazdım ve başlattım. Her şey işe yaradı. Çok iyiydi! Ancak birkaç gün sonra barındırma yönetiminden bir mektup aldım. İşlemci dakika sınırının aşıldığını ve daha yüksek bir tarifeye geçilmesi gerektiğini söyledi. Komut dosyasının silinmesi gerekiyordu ve bu seçenekten vazgeçildi.

Nasıl oldu? Radyo olmadan yaşayamam. Komut dosyasını başka birinin barındırmasında çalıştırmanıza izin vermiyorlarsa, kendi sunucunuza ihtiyacınız vardır. Ruhumun istediğini yapacağım yer.

Pilsiz eski bir netbook'um var (CPU - 900 MHz, RAM - 512 Mb). Yaşlı adam zaten 11 yaşında. Sunucu için uygundur. Ubuntu 12.04'ü yükledim. Daha sonra Apache2 ve php 5.3, samba'yı kuruyorum. Sunucum hazır.

Icecast'i denemeye karar verdim. Üzerinde çok fazla mana okudum. Ama bunu zor buldum. Ve bir PHP betiğiyle seçeneğe dönmeye karar verdim. Bu komut dosyasında hata ayıklamak için birkaç gün harcandı. Ve her şey harika çalıştı. Daha sonra podcast'leri oynatmak için bir senaryo da yazdım. Ve o kadar hoşuma gitti ki küçük bir proje yapmaya karar verdim. Buna IWScast adını verdik. github'da yayınlandı.

Kendi internet radyonuz

Her şey çok basit. Mp3 dosyalarını ve index.php dosyasını Apache kök klasörüne /var/www/ kopyalıyorum ve rastgele oynatılıyorlar. Yaklaşık 300 şarkı yaklaşık tüm gün için yeterlidir.
index.php dosyası betiğin kendisidir. Komut dosyası, bir dizindeki MP3 dosyalarının tüm adlarını bir diziye okur. Bir ses akışı oluşturur ve MP3 dosyalarının adlarını değiştirir. Bir şarkıyı dinlediğiniz ve hoşunuza gittiği zamanlar vardır. Sizce kim şarkı söylüyor? Böyle bir durumda log.txt dosyasında dinlenen parçaların adlarının kaydı bulunmaktadır.
Komut dosyası kodunu tamamla

<?php
set_time_limit(0);
header('Content-type: audio/mpeg');
header("Content-Transfer-Encoding: binary");
header("Pragma: no-cache");
header("icy-br: 128 ");
header("icy-name: your name");
header("icy-description: your description"); 
$files = glob("*.mp3");
shuffle($files); //Random on

for ($x=0; $x < count($files);) {
  $filePath =  $files[$x++];
  $bitrate = 128;
  $strContext=stream_context_create(
   array(
     'http'=>array(
       'method' =>'GET',
       'header' => 'Icy-MetaData: 1',
       'header' =>"Accept-language: enrn"
       )
     )
   );
//Save to log 
  $fl = $filePath; 
  $log = date('Y-m-d H:i:s') . ' Song - ' . $fl;
  file_put_contents('log.txt', $log . PHP_EOL, FILE_APPEND);
  $fpOrigin=fopen($filePath, 'rb', false, $strContext);
  while(!feof($fpOrigin)){
   $buffer=fread($fpOrigin, 4096);
   echo $buffer;
   flush();
 }
 fclose($fpOrigin);
}
?>

Parçaların sırayla çalınmasını istiyorsanız, index.php dosyasındaki satırı açıklamanız gerekir.

shuffle($files); //Random on

Podcast'ler için /var/www/podcast/ kullanıyorum. Başka bir script index.php var. Podcast parça ezberleme özelliğine sahiptir. İnternet alıcısını bir sonraki açışınızda bir sonraki podcast parçası çalınır. Ayrıca çalınan parçaların bir kaydı da bulunmaktadır.
Counter.dat dosyasında parça numarasını belirtebilirsiniz; podcast oynatma bundan başlayacaktır.

Podcast'lerin otomatik olarak indirilmesi için ayrıştırıcılar yazdı. RSS'den en son 4 parçayı alır ve indirir. Bütün bunlar bir akıllı telefonda, IPTV alıcı kutusunda veya bir tarayıcıda harika çalışıyor.

Geçen sabah bir parçanın çalma konumunu hatırlamanın harika olacağı aklıma geldi. Ancak bunu PHP'de nasıl yapacağımı henüz bilmiyorum.

Komut dosyası indirilebilir github.com/iwsys/IWScast

Kaynak: habr.com

Yorum ekle