رادیو اینترنتی خودتان

بسیاری از ما دوست داریم صبح ها به رادیو گوش کنیم. و سپس یک روز صبح خوب متوجه شدم که نمی‌خواهم به ایستگاه‌های رادیویی FM محلی گوش دهم. علاقه مند نیست. اما معلوم شد این عادت مضر است. و تصمیم گرفتم گیرنده اف ام را با گیرنده اینترنتی جایگزین کنم. من به سرعت قطعات را در Aliexpress خریدم و یک گیرنده اینترنتی مونتاژ کردم.

درباره گیرنده اینترنت قلب گیرنده میکروکنترلر ESP32 است. سیستم عامل از KA-radio. قیمت قطعات برای من 12 دلار است. سهولت مونتاژ به من اجازه داد تا آن را در چند روز جمع آوری کنم. خوب و پایدار کار می کند. در 10 ماه کار، فقط چند بار یخ زد، و سپس فقط به دلیل آزمایشات من. یک رابط راحت و فکر شده به شما امکان می دهد از طریق تلفن هوشمند و رایانه کنترل کنید. در یک کلام، این یک گیرنده اینترنتی فوق العاده است.

همه چیز خوب است. اما یک روز صبح زود به این نتیجه رسیدم که با وجود دسترسی به ده ها هزار ایستگاه رادیویی، هیچ ایستگاه جالبی وجود ندارد. از تبلیغات و شوخی های احمقانه مجری ها اذیت شدم. پریدن مداوم از یک ایستگاه به ایستگاه دیگر. من Spotify و Yandex.Music را دوست دارم. اما نکته غم انگیز این است که آنها در کشور من کار نمی کنند. و من دوست دارم از طریق گیرنده اینترنتی به آنها گوش دهم.

یاد دوران کودکی ام افتادم. یک ضبط صوت و دو ده کاست داشتم. با دوستان کاست رد و بدل کردم. و فوق العاده بود تصمیم گرفتم که آرشیوهای صوتی خود را فقط روی یک گیرنده اینترنتی پخش کنم. البته گزینه ای برای اتصال پخش کننده صوتی یا آی پاد به بلندگوها وجود دارد و نگران نباشید. اما این راه ما نیست! من از اتصال کانکتور متنفرم)

شروع کردم به دنبال راه حل های آماده. پیشنهادی در بازار برای ایجاد رادیو اینترنتی خود از Radio-Tochka.com وجود دارد. من 5 روز تست کردم. همه چیز با گیرنده اینترنت من خوب کار می کرد. ولی قیمتش برام جذاب نبود. من این گزینه را رد کردم.

هاست 10 گیگ پرداخت کرده ام. تصمیم گرفتم یک اسکریپت روی چیزی بنویسم که جریان صوتی فایل های mp3 من را پخش کند. تصمیم گرفتم آن را با PHP بنویسم. سریع نوشتم و راه اندازیش کردم. همه چیز کار کرد. باحال بود! اما چند روز بعد نامه ای از اداره میزبانی دریافت کردم. گفت که از محدودیت دقیقه پردازنده فراتر رفته و نیاز به ارتقاء به تعرفه بالاتر است. اسکریپت باید حذف می شد و این گزینه کنار گذاشته می شد.

چگونه اتفاق افتاد؟ من نمی توانم بدون رادیو زندگی کنم. اگر آنها به شما اجازه نمی دهند اسکریپت را روی هاست شخص دیگری اجرا کنید، به سرور خود نیاز دارید. جایی که من آنچه را که روحم می خواهد انجام خواهم داد.

من یک نت بوک قدیمی بدون باتری دارم (CPU - 900 MHz، RAM - 512 Mb). پیرمرد قبلاً 11 سال دارد. مناسب برای سرور من اوبونتو 12.04 را نصب کردم. سپس Apache2 و php 5.3, samba را نصب می کنم. سرور من آماده است.

تصمیم گرفتم Icecast را امتحان کنم. من مانا زیادی روی آن خواندم. اما به نظرم سخت بود. و من تصمیم گرفتم با یک اسکریپت PHP به گزینه برگردم. چند روز برای رفع اشکال این اسکریپت صرف شد. و همه چیز عالی کار کرد. سپس یک فیلمنامه برای پخش پادکست نیز نوشتم. و آنقدر از آن خوشم آمد که تصمیم گرفتم یک پروژه کوچک انجام دهم. آن را IWScast نامیدند. ارسال شده در github.

رادیو اینترنتی خودتان

همه چیز بسیار ساده است. من فایل های mp3 و فایل index.php را در پوشه ریشه آپاچی /var/www/ کپی می کنم و به صورت تصادفی پخش می شوند. حدود 300 آهنگ تقریباً برای کل روز کافی است.
فایل index.php خود اسکریپت است. اسکریپت تمام نام فایل های MP3 را در یک دایرکتوری در یک آرایه می خواند. یک جریان صوتی ایجاد می کند و نام فایل های MP3 را جایگزین می کند. مواقعی پیش می آید که به آهنگی گوش می دهید و آن را دوست دارید. به نظر شما چه کسی آواز می خواند؟ برای چنین موردی، نام آهنگ های شنیده شده در log log.txt ضبط شده است.
کد اسکریپت کامل

<?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);
}
?>

اگر می‌خواهید آهنگ‌ها به ترتیب پخش شوند، باید خط را در index.php نظر دهید

shuffle($files); //Random on

برای پادکست ها از /var/www/podcast/ استفاده می کنم اسکریپت دیگری index.php وجود دارد. دارای قابلیت حفظ آهنگ پادکست است. دفعه بعد که گیرنده اینترنت را روشن می کنید، آهنگ پادکست بعدی پخش می شود. همچنین گزارشی از آهنگ های پخش شده وجود دارد.
در فایل counter.dat می توانید شماره آهنگ را مشخص کنید و پخش پادکست از آن شروع می شود.

تجزیه کننده هایی برای دانلود خودکار پادکست ها نوشت. آخرین 4 آهنگ را از RSS می گیرد و آنها را دانلود می کند. همه اینها روی گوشی هوشمند، ستاپ باکس IPTV یا مرورگر عالی کار می کند.

صبح روز دیگر به ذهنم رسید که یادآوری موقعیت پخش در یک آهنگ عالی است. اما من هنوز نمی دانم چگونه این کار را در PHP انجام دهم.

اسکریپت قابل دانلود است github.com/iwsys/IWScast

منبع: www.habr.com

اضافه کردن نظر