2017-11-27 6 views
0

getid3을 사용하여 원격 URL에서 파일 크기와 지속 시간을 가져옵니다. getid3은 원격 URL에서 작동하지 않으므로 임시 위치로 mp3을 다운로드하고 데이터를 읽은 다음 삭제하십시오.getid3 : 원격 서버에서 전체 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 파일의 첫 번째 32,768킬로바이트를 다운로드하고 또는 정확한 시간 기간 (최대 32768로 방송) 정확한 파일 크기를 표시하지 않는다는 것입니다 파일의 최대 크기를 늘리면 코드가 충돌합니다.

전체 mp3를 다운로드하거나 전체 파일을 다운로드하지 않고 적절한 헤더 크기를 얻는 방법을 찾을 수 있습니까?

+0

어떤 버전의 ID3을 얻으려고하십니까? 32KB 이상은 필요하지만 그 이상은 아닙니다. 코드가 32K 이상으로 충돌하는 이유는 무엇입니까? 나는'file_get_contents'에 대해 cURL을 사용할 것이고, 잘 작동하는 서버로부터 범위 요청을 할 수 있습니다. – Brad

+0

최신 버전 (1.9.5) 및 올바른 파일 크기 및 시간을 얻기 위해 20MB를 사용해야합니다. 나는 cURL에 익숙하지 않으므로 예제를 제공 할 수 있습니까? –

+0

http://php.net/manual/en/curl.examples-basic.php – Brad

답변

1

ID3v1 태그는 파일의 시작 부분이 아니라 끝 부분에 있습니다. 따라서 파일 끝에 청크를 다운로드하거나 (범위 요청이 cURL로 완료) 전체 파일을 다운로드해야만 해당 파일을 읽을 수 있습니다.

ID3v2를 원한다면 파일의 시작 부분에 있습니다.

+0

mp3에서 사용하는 ID3 버전을 쉽게 감지 할 수있는 방법은 없습니까? –

+0

@ GregorySchultz 물론 ... ID3v2를 감지 해보십시오. 지원되지 않는 경우 ID3v1을 시도하십시오. – Brad