Прочитать информацию об удаленном mp3 файле, используя php
Я работаю над сайтом, который будет извлекать подробности mp3 с удаленного URL. Мне нужно написать задание cron, чтобы оно получало всю информацию о песне, такую как имя файла, путь, исполнитель, жанр, битрейт, время воспроизведения и т. Д., И помещало ее в таблицу базы данных.
Я пробовал пакет getid3, но он очень медленный при получении более одного URL за раз, и я получаю максимальную ошибку выполнения.
Пример:
require_once('getid/getid3/getid3.php');
$urls = array ('http://stackru.com/test1.mp3','http://stackru.com/test2.mp3''http://stackru.com/test3.mp3');
foreach($urls as $ur){
$mp3_det = getMp3Info( $ur );
print_r ($mp3_det);
}
function getMp3Info ( $url ){
if($url){
/**********/
$filename = tempnam('/tmp','getid3');
if (file_put_contents($filename, file_get_contents($url, false, null, 0, 35000))) {
if (require_once('getid/getid3/getid3.php')) {
$getID3 = new getID3;
$ThisFileInfo = $getID3->analyze($filename);
unlink($filename);
$bitratez = $ThisFileInfo[audio][bitrate] ? $ThisFileInfo[audio][bitrate] : '';
$headers = get_headers($url, 1);
if ((!array_key_exists("Content-Length", $headers))) { return false; }
// print $headers["Content-Length"];
$filesize= round($headers["Content-Length"]/1000);
$contentLengthKBITS=$filesize*8;
if ( $bitratez ){
$bitrate= round ( $bitratez/1000 );
$seconds=$contentLengthKBITS/$bitrate;
$playtime_mins = floor($seconds/60);
$playtime_secs = $seconds % 60;
if(strlen($playtime_secs)=='1'){$zero='0';}
$playtime_secs = $zero.$playtime_secs;
$playtime_string=$playtime_mins.':'.$playtime_secs;
}
else $playtime_string='0:00';
// echo '<pre>'.print_r($ThisFileInfo, true).'</pre>';
}
$bitrate = $bitrate ? $bitrate : 0;
$ret = array();
$ret['playtime'] = $playtime_string;
$ret['filesize'] = $filesize;
$ret['bitrate'] = $bitrate;
return $ret;
}
}
2 ответа
Вы можете быть в состоянии помочь во время выполнения, используя сокетное соединение и считывая порции файла за один раз, и постоянно пытаясь проанализировать файл.
Поскольку данные ID3 хранятся в начале mp3, нет смысла загружать все это. Самая большая проблема, которую я вижу сейчас, заключается в том, что функция анализа принимает только имя файла, а не двоичные данные (что у вас будет). Таким образом, вам придется либо обновить код, либо создать аналогичную функцию для анализа, которая работает с вашими двоичными данными.
MP3-файлы идут вместе с некоторыми метаданными почти таким же образом, как и некоторые другие двоичные форматы файлов. Они в идентификационных тэгах. Существует много версий тегов ID, таких как ID3 или ID4. Теперь есть простой способ извлечь информацию тегов IDv3, предоставленную вместе с файлом MP3, через PHP.
Вам нужно скачать библиотеку на PHP из sourceforge, например, getID3. Таким образом, вы можете извлечь имя исполнителя, жанр, продолжительность, длину, размер и т. Д. Информацию из mp3-файла. IDv4 содержит дополнительную информацию, такую как обложка альбома.