あなただけのインターネットラジオ

私たちの多くは朝ラジオを聞くのが好きです。 そしてある晴れた朝、私は地元の FM ラジオ局を聞きたくないと気づきました。 興味がありません。 しかし、その習慣は有害であることが判明しました。 そして、FM受信機をインターネット受信機に置き換えることにしました。 早速、Aliexpressで部品を購入し、インターネット受信機を組み立てました。

インターネット受信機について。 受信機の心臓部は ESP32 マイクロコントローラーです。 KA-radio のファームウェア。 部品代は12ドルでした。 組み立てが簡単だったので、数日で組み立てることができました。 うまく安定して動作します。 10 か月の作業中、フリーズしたのは数回だけで、それは私の実験のせいでした。 便利で考え抜かれたインターフェイスにより、スマートフォンやコンピューターから制御できます。 一言で言えば、これは素晴らしいインターネット受信機です。

すべて大丈夫です。 しかし、ある早朝、私は何万ものラジオ局にアクセスできるにもかかわらず、興味深い局が存在しないという結論に達しました。 私は広告とプレゼンターのくだらないジョークにイライラしました。 常にある駅から別の駅に飛び移っています。 私はSpotifyとYandex.Musicが好きです。 しかし、悲しいことに、それらは私の国では機能しないということです。 そしてインターネット受信機で聞きたいと思っています。

私は子供時代を思い出しました。 私はテープレコーダーとXNUMX本のカセットを持っていました。 友達とカセットを交換しました。 そしてそれは素晴らしかったです。 私は、オーディオ アーカイブをインターネット レシーバーにのみストリーミングする必要があると判断しました。 もちろん、オーディオプレーヤーやiPodをスピーカーに接続するオプションもありますのでご安心ください。 しかし、これは私たちのやり方ではありません! コネクタを接続するのが嫌いです)

私は既製のソリューションを探し始めました。 Radio-Tochka.com から独自のインターネット ラジオを作成するオファーが市場に出ています。 5日間テストしてみました。 私のインターネット受信機ではすべて問題なく動作しました。 しかし、その価格は私にとって魅力的ではありませんでした。 私はこのオプションを拒否しました。

ホスティング 10 GB を支払いました。 私は、mp3 ファイルのオーディオ ストリームをストリーミングするスクリプトを作成することにしました。 PHPで書くことにしました。 早速書いて起動しました。 すべてがうまくいきました。 かっこよかったです! しかし数日後、主催側から手紙を受け取りました。 プロセッサーの分数の制限を超えたため、より高い料金にアップグレードする必要があると述べた。 スクリプトを削除する必要があり、このオプションは放棄されました。

どうやってそうなった? 私はラジオなしでは生きていけません。 他の人のホスティングでスクリプトを実行することが許可されていない場合は、独自のサーバーが必要です。 私の魂が望むことをする場所。

私はバッテリーのない古いネットブック (CPU - 900 MHz、RAM - 512 Mb) を持っています。 その老人はもう11歳です。 サーバーに適しています。 Ubuntu 12.04をインストールします。 次に、Apache2 と php 5.3、samba をインストールします。 サーバーの準備ができました。

アイスキャストを試してみることにしました。 私はそれについてたくさんのマナを読みました。 しかし、それは難しいと思いました。 そして、PHP スクリプトを使用するオプションに戻ることにしました。 このスクリプトのデバッグには数日かかりました。 そしてすべてがうまくいきました。 次に、ポッドキャストを再生するためのスクリプトも書きました。 そしてそれがとても気に入ったので、小さなプロジェクトを行うことにしました。 それをIWSキャストと呼びました。 githubに投稿.

あなただけのインターネットラジオ

すべてがとてもシンプルです。 mp3 ファイルとindex.php ファイルを Apache ルート フォルダー /var/www/ にコピーすると、ランダムに再生されます。 約 300 曲あれば、ほぼ XNUMX 日を過ごすのに十分です。
Index.php ファイルはスクリプトそのものです。 このスクリプトは、ディレクトリ内の MP3 ファイルの名前をすべて配列に読み取ります。 オーディオ ストリームを作成し、MP3 ファイルの名前を置き換えます。 曲を聴いて気に入った時もあります。 誰が歌っていると思いますか? このような場合に備えて、ログ 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 ファイルでトラック番号を指定すると、その番号からポッドキャストの再生が開始されます。

ポッドキャストを自動ダウンロードするためのパーサーを作成しました。 RSS から最新の 4 トラックを取得してダウンロードします。 これらはすべて、スマートフォン、IPTV セットトップ ボックス、またはブラウザーでうまく機能します。

先日の朝、トラックの再生位置を覚えていられたらいいのにと思いつきました。 しかし、PHP でこれを行う方法はまだわかりません。

スクリプトはダウンロードできます github.com/iwsys/IWScast

出所: habr.com

コメントを追加します