【问题标题】:getid3: download the full mp3 data from remote servergetid3:从远程服务器下载完整的 mp3 数据
【发布时间】:2017-11-27 02:53:04
【问题描述】:

我正在使用getid3 从远程 URL 获取文件大小和持续时间。 getid3 不适用于远程 URL,因此解决方法是将 mp3 下载到临时位置,读取数据然后将其删除。

代码:

<?php $filename = tempnam('/tmp','getid3');
if (file_put_contents($filename,file_get_contents('http://feeds.soundcloud.com/stream/336401044-scott-johnson-27-tms-1314-pm.mp3', false, null, 0, 32768))) {
if (require_once('id3/getid3.php')) {
$getID3 = new getID3;
$ThisFileInfo = $getID3->analyze($filename);
echo '<pre>'.print_r($ThisFileInfo, true).'</pre>';
}
unlink($filename);
};?>

我的问题是它只下载了 mp3 文件的前 32768kb,并且没有显示正确的文件大小(显示为最大 32768)或文件的正确持续时间。如果我增加最大尺寸,代码会崩溃。

有没有办法下载完整的 mp3 或找到一种方法来获得适当的标题大小而无需下载完整的文件?

【问题讨论】:

  • 您要获取哪个版本的 ID3?您可能需要超过 32KB,但不会更多。为什么您的代码崩溃超过 32K?我会在 file_get_contents 上使用 cURL,您可以从表现良好的服务器发出范围请求。
  • 最新版本 (1.9.5) 我必须使用 20 mb 才能获得正确的文件大小和持续时间。我对 cURL 不熟悉,你能举个例子吗?
  • 我的问题是我的 vagrant 设置的 MB 设置较低。我在我的服务器上进行了尝试,它能够检测到一个 45MB 的文件并提供完整的数据,如文件大小和正确的持续时间。在我的 vagrant 上,它只能下载 10MB 并提供不完整的数据。
  • 您将所有内容都保存在内存中,做您正在做的事情。如果您使用 cURL 并将结果流式传输到磁盘(或仅请求您需要的字节),您将节省内存。

标签: php mp3 getid3


【解决方案1】:

ID3v1 标记位于文件的末尾,而不是开头。因此,在您下载文件末尾的一部分(使用 cURL 完成范围请求)或下载整个文件之前,您将无法读取它们。

如果你想要 ID3v2,那些将在文件的开头。

【讨论】:

  • 没有简单的方法来检测 mp3 使用的是哪个 ID3 版本?
  • @GregorySchultz 当然有...尝试检测 ID3v2,如果不支持,请尝试 ID3v1。
猜你喜欢
  • 2023-03-24
  • 2016-05-24
  • 1970-01-01
  • 2016-12-09
  • 2020-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多