Прочитать информацию об удаленном mp3-файле, используя php - PullRequest
2 голосов
/ 09 января 2012

Я работаю над сайтом, который будет извлекать подробности mp3 с удаленного URL. Мне нужно написать задание cron, чтобы оно получало всю информацию о песне, такую ​​как имя файла, путь, исполнитель, жанр, битрейт, время воспроизведения и т. Д., И помещало ее в таблицу базы данных.

Я пробовал пакет getid3, но он очень медленный при получении более одного URL за раз, и я получаю максимальную ошибку выполнения.

Пример:

<code>require_once('getid/getid3/getid3.php');

    $urls = array ('http://stackoverflow.com/test1.mp3','http://stackoverflow.com/test2.mp3''http://stackoverflow.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).'
'; } $ bitrate = $ bitrate? битрейт $: 0; $ ret = array (); $ ret ['playtime'] = $ playtime_string; $ ret ['filesize'] = $ filesize; $ ret ['bitrate'] = $ bitrate; вернуть $ ret; } }

Ответы [ 2 ]

1 голос
/ 09 января 2012

Вы можете помочь сократить время выполнения, используя сокетное соединение и считывая фрагменты файла за один раз, и постоянно пытаясь проанализировать файл.

Поскольку данные ID3 хранятся в начале mp3, нет смысла загружать все это. Самая большая проблема, которую я вижу сейчас, заключается в том, что функция анализа принимает только имя файла, а не двоичные данные (что у вас будет). Поэтому вам придется либо обновить код, либо создать аналогичную функцию для анализа, которая работает с вашими двоичными данными.

0 голосов
/ 09 января 2012

MP3-файлы идут вместе с некоторыми метаданными почти таким же образом, как и некоторые другие двоичные форматы файлов.Они есть в идентификационных тэгах.Существует много версий тегов ID, таких как ID3 или ID4.Теперь есть простой способ извлечь информацию тегов IDv3, поставляемую вместе с файлом MP3, через PHP.

Вам нужно загрузить некоторую библиотеку в PHP из sourceforge, например, getID3.Таким образом, вы можете извлечь имя исполнителя, жанр, продолжительность, длину, размер и т. Д. Информацию из mp3-файла.IDv4 содержит дополнительную информацию, например обложку альбома.

...