栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用PHP从音频流中提取轨道信息

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用PHP从音频流中提取轨道信息

这是一个SHOUTcast流,是的,它是可能的。它与ID3标签完全无关。我不久前写了一个脚本来做到这一点,但现在找不到了。就在上周,我帮助另一个拥有相当完整的脚本的人做同样的事情,但是我不能只是将源发布到它,因为它不是我的。但是,如果您发送电子邮件至brad@musatcha.com,我将与您保持联系。

无论如何,这是您自己的操作方法:

您需要做的第一件事是直接连接到服务器。不要使用HTTP。好吧,您可能会使用cURL,但是它可能比它的价值更麻烦。您使用

fsockopen()
doc连接到它。确保使用正确的端口。还要注意,许多Web主机将阻止很多端口,但是通常可以使用端口80。幸运的是,所有AOL托管的SHOUTcast流都使用端口80。

现在,就像您的客户一样提出您的请求。

GET /whatever HTTP/1.0

但是,在发送之前

<CrLf><CrLf>
,请包含下一个标头!

Icy-metadata:1

这告诉服务器您需要元数据。现在,发送一对

<CrLf>

好的,服务器将用一堆头响应,然后开始向您发送数据。在这些标题中,将为

icy-metaint:8192
或相似。那8192是 meta区间
。这很重要,实际上是您唯一需要的价值。通常为8192,但并非总是如此,因此请确保实际读取此值!

基本上,这意味着您将获得8192字节的MP3数据,然后是一块meta,然后是8192字节的MP3数据,然后是一块meta。

读取8192字节的数据(确保在此计数中不包括标题),将其丢弃,然后读取下一个字节。该字节是元数据的第一个字节,并指示元数据有多长时间。取该字节的值(带

ord()
(doc的实际字节),然后乘以16。结果是要读取的元数据字节数。将这些字节数读入字符串变量中以供使用。

接下来,修剪此变量的值。为什么?因为该字符串

0x0
的末尾被填充(以使其均匀地适合16字节的倍数),并且
trim()
doc为我们处理了该问题。

您将看到类似以下的内容:

StreamTitle='Awesome Trance Mix - DI.fm';StreamUrl=''

我将让您选择解析方法的选择方法。就我个人而言,我可能只拆分了2个

;
,但要提防包含的标题
;
。我不确定转义字符方法是什么。进行一些实验可以为您提供帮助。

使用完服务器后,请不要忘记断开与服务器的连接!



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/402880.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号