自己的网络收音机

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

关于Internet接收器。 接收器的核心是ESP32微控制器。 KA-radio的固件。 零件成本使我花了12美元。 易于组装使我可以在几天之内完成组装。 它运作良好且稳定。 经过10个月的工作,它只挂了几次,这仅仅是因为我的实验。 便捷周到的界面使您可以从智能手机和计算机进行控制。 简而言之,这是一个很棒的Internet接收器。

一切都很棒。 但是一个清晨,我得出的结论是,可以访问数以万计的广播电台的地方没有有趣的电台。 广告,愚蠢的笑话带给我很大的生气。 从一个站点不断跳到另一个站点。 我喜欢Spotify和Yandex.Music。 但是可悲的是他们在我国没有工作。 我想通过互联网接收器收听它们。

我记得我的童年。 我有一个录音机和两个打卡带。 盒式磁带和朋友一起换了。 这真是太好了。 我决定只需要将音频档案流式传输到Internet接收器。 当然,可以选择将音频播放器或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: en\r\n" ) ) ); //Save to log $fl = $filePath; $log = date('Ymd 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脚本。 它具有记忆的播客曲目。 下次打开Internet接收器时,将播放下一个播客曲目。 还有复制的曲目的日志。
您可以在counter.dat文件中指定轨道号,然后从该文件开始播客广播。

编写了用于自动下载播客的解析器。 他从RSS提取了最后4首曲目并下载了它们。 所有这些都可以在智能手机,IPTV机顶盒和浏览器中很好地工作。

最近早上,我想到记住轨道上的播放位置真是太好了。 但是我还不知道如何用PHP做到这一点。

该脚本可以下载github.com/iwsys/IWScast

Source: https://habr.com/ru/post/zh-CN471954/


All Articles