PHP Ogg metadata test
File listing\n\n";
echo "\n";
while (false !== ($file = readdir($dir))) {
if (stristr($file, ".ogg") && is_readable($file)) {
echo " - ";
echo "$file";
$f = fopen($file,"rb");
$header = fread($f, 512);
$page['magic'] = substr($header, 0, 4);
$page['serial'] = substr($header, 14, 4);
$page['segments'] = ord($header[26]);
$page['packet_length'] = 0;
for ($i = 0; $i < $page['segments']; $i++) {
$page['packet_length'] += ord($header[27+i]);
}
$page['packet_magic'] = substr($header,27+$page['segments'],8);
if (0 == strncmp($page['packet_magic'],"\x01vorbis",7)) {
$page['subtype'] = "audio/x-vorbis";
} elseif (0 == strncmp($page['packet_magic'],"\x80theora",7)) {
$page['subtype'] = "video/x-theora";
} else {
$page['subtype'] = "unknown";
}
echo " ".$page['subtype']."";
if ($page['subtype'] == "audio/x-vorbis") {
$page['channels'] = ord($header[27+$page['segments']+11]);
$page['rate'] = ord($header[27+$page['segments']+15]);
$page['rate'] = ($page['rate'] << 8) | ord($header[27+$page['segments']+14]);
$page['rate'] = ($page['rate'] << 8) | ord($header[27+$page['segments']+13]);
$page['rate'] = ($page['rate'] << 8) | ord($header[27+$page['segments']+12]);
echo " ".$page['channels']." channel ".$page['rate']."Hz";
} elseif ($page['subtype'] == "video/x-theora") {
$page['width'] = ord($header[27+$page['segments']+14]);
$page['width'] = ($page['width'] << 8) | ord($header[27+$page['segments']+15]);
$page['width'] = ($page['width'] << 8) | ord($header[27+$page['segments']+16]);
$page['height'] = ord($header[27+$page['segments']+17]);
$page['height'] = ($page['height'] << 8) | ord($header[27+$page['segments']+18]);
$page['height'] = ($page['height'] << 8) | ord($header[27+$page['segments']+19]);
$num = ord($header[27+$page['segments']+22]);
$num = ($num << 8) | ord($header[27+$page['segments']+23]);
$num = ($num << 8) | ord($header[27+$page['segments']+24]);
$num = ($num << 8) | ord($header[27+$page['segments']+25]);
$den = ord($header[27+$page['segments']+26]);
$den = ($den << 8) | ord($header[27+$page['segments']+27]);
$den = ($den << 8) | ord($header[27+$page['segments']+28]);
$den = ($den << 8) | ord($header[27+$page['segments']+29]);
if ($den == 0 || $num == 0) {
$page['rate'] = "unknown";
} else {
$page['rate'] = $num/$den;
}
echo " ".$page['width']."x".$page['height'];
echo " ".$page['rate']." fps";
}
fseek($f, -6000, SEEK_END);
$end = fread($f, 6000);
$tail = strstr($end, "OggS");
if ($tail) {
$serial = substr($tail, 14, 4);
if ($serial == $page['serial']) {
$granulepos = ord($tail[6]);
$granulepos = $granulepos | (ord($tail[7]) << 8);
$granulepos = $granulepos | (ord($tail[8]) << 16);
$granulepos = $granulepos | (ord($tail[9]) << 24);
$granulepos = $granulepos | (ord($tail[10]) << 32);
$granulepos = $granulepos | (ord($tail[11]) << 40);
$granulepos = $granulepos | (ord($tail[12]) << 48);
$granulepos = $granulepos | (ord($tail[13]) << 56);
$duration = $granulepos/$page['rate'];
echo " ".floor($duration)."s";
}
}
echo " (".filesize($file)." bytes)";
fclose($f);
echo "
\n";
}
}
echo "
\n";
}
?>
Your user agent is ""
Source for this script.
See also getid3.org.