您自己的网络广播

我们许多人喜欢早上听广播。 然后一个晴朗的早晨,我意识到我不想听当地的调频广播电台。 没兴趣。 但事实证明这个习惯是有害的。 我决定用互联网接收器取代 FM 接收器。 我很快在速卖通上购买了零件并组装了一个互联网接收器。

关于互联网接收器。 接收器的核心是 ESP32 微控制器。 来自 KA-radio 的固件。 这些零件花了我 12 美元。 组装的简便性使我能够在几天内组装它。 工作良好且稳定。 在 10 个月的工作中,它只冻结了几次,而且只是因为我的实验。 方便且经过深思熟虑的界面使您可以通过智能手机和计算机进行控制。 总之,这是一个很棒的互联网接收器。

一切都好。 但有一天清晨,我得出的结论是,尽管可以访问数以万计的广播电台,但没有有趣的电台。 我对广告和主持人的愚蠢笑话感到恼火。 不断地从一个站跳到另一个站。 我喜欢 Spotify 和 Yandex.Music。 但可悲的是,他们在我的国家不起作用。 我想通过互联网接收器收听他们的声音。

我想起了我的童年。 我有一台录音机和两打磁带。 我和朋友交换了磁带。 这太棒了。 我决定只需要将音频档案传输到互联网接收器。 当然,您可以选择将音频播放器或 iPod 连接到扬声器,无需担心。 但这不是我们的方式! 我讨厌连接器)

我开始寻找现成的解决方案。 市场上有一个来自 Radio-Tochka.com 的服务,可以创建您自己的网络广播。 我测试了5天。 我的网络接收器一切正常。 但价格对我来说没有吸引力。 我拒绝了这个选项。

我已付费托管 10 GB。 我决定编写一个脚本来传输我的 mp3 文件的音频流。 我决定用 PHP 编写它。 我很快就写好了并启动了它。 一切顺利。 这很酷! 但几天后我收到了主办当局的一封信。 它表示超出了处理器分钟数的限制,需要升级到更高的资费。 必须删除该脚本并放弃此选项。

它是怎么发生的? 没有收音机我就活不下去。 如果他们不允许您在其他人的主机上运行脚本,那么您需要自己的服务器。 在那里我会做我灵魂所渴望的事情。

我有一台没有电池的老式上网本(CPU - 900 MHz,RAM - 512 Mb)。 老人已经11岁了。 适合做服务器。 我安装的是 Ubuntu 12.04。 然后我安装 Apache2 和 php 5.3、samba。 我的服务器已经准备好了。

我决定尝试一下 Icecast。 我读了很多关于它的法力。 但我发现这很难。 我决定返回到使用 PHP 脚本的选项。 我们花了几天时间调试这个脚本。 一切都很好。 然后我还写了一个播放播客的脚本。 我非常喜欢它,所以我决定做一个小项目。 称之为 IWScast。 发布在 github 上.

您自己的网络广播

一切都很简单。 我将 mp3 文件和 index.php 文件复制到 Apache 根文件夹 /var/www/ 中,它们会随机播放。 大约 300 首歌曲大约足够一整天。
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

添加评论