这是一个SHOUTcast流,是的,这是可能的。它与ID3标签绝对无关。以前我写了一个脚本来做这个,但是找不到它。就在上个星期,我帮助了另一个有相当完整脚本的人做同样的事情,但是我不能把源代码发给它,因为它不是我的。不过,如果您在
brad@musatcha.com发电子邮件,我会与他联系。
无论如何,这里是如何自己做的:
您需要做的第一件事是直接连接到服务器。不要使用HTTP。那么你可能会使用cURL,但是它的价值可能会更加麻烦。你用fsockopen()(doc)连接到它。确保使用正确的端口。另请注意,许多Web主机将阻止大量端口,但通常可以使用端口80.幸运的是,所有AOL托管的SHOUTcast流都使用端口80。
现在,像你的客户一样提出你的要求。
GET /无论HTTP / 1.0
但是,在发送< CrLf>< CrLf>之前,请包括下一个标题!
冰爽元数据:1
这告诉服务器你想要元数据。现在,发送一对< CrLf> ;. 好的,服务器会响应一堆头文件,然后开始发送数据。那些标题将是一个冰冷的元素:8192或类似的。那8192是元间隔。这很重要,而且真正是您需要的唯一价值。通常是8192,但并不总是,所以一定要真正读取这个值! 基本上这意味着,您将获得8192字节的MP3数据,然后获得一大堆元数据,其次是8192字节的MP3数据,后跟一组元数据。 读取8192字节的数据(确保您不包括此计数中的标题),丢弃它们,然后读取下一个字节。该字节是元数据的第一个字节,表示元数据的时间长度。取该字节的值(具有ord()(doc)的实际字节),并将其乘以16.结果是要为元数据读取的字节数。将这些字节数字读入一个字符串变量中,以供使用。
接下来,修剪此变量的值。为什么?因为字符串在末尾用0x0填充(使其适合16个字节的倍数),而trim()(doc)则为我们照顾。
你会留下这样的东西:
StreamTitle =’Awesome Trance Mix – DI.fm’; StreamUrl =”
我会让你选择你的方法来解析这个。就我个人而言,我可能只是以2的限制分开,但要注意包含的标题。我不知道转义字符的方法是什么。一点实验应该帮助你。
完成后,别忘了断开服务器的连接!