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

是否可以使用PHP从音频流中提取轨道信息?我已经进行了一些挖掘,可以找到的最接近的函数是stream_get_transports,但是我的主机不支持通过fsockopen()进行http传输,因此,我将不得不做更多的工作来看看该函数还会返回什么。

目前,我正在尝试从AOL流中提取艺术家并跟踪元数据。

回答:

这是一个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个;,但要提防包含的标题;。我不确定转义字符方法是什么。进行一些实验可以为您提供帮助。

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

以上是 使用PHP从音频流中提取轨道信息 的全部内容, 来源链接: utcz.com/qa/412339.html

回到顶部