Die HTML5-Audiodauer für MP3 ist immer unendlich

Ich spiele mit meinem Lieblingsprojekt und beim Experimentieren mit MP3 "Streaming" mit PHP bekomme ich immer die Audiodauer zurückInfinity. Ich habe versucht, an vielen Stellen zu suchen. Leider kann ich das Grundproblem nicht finden.

Beachten Sie, dass ich dieses Projekt für eine Weile beiseite legen musste und alles vorher gut funktioniert hat. Als ich mit der Arbeit an dem Projekt wieder anfing, habe ich einige Änderungen an der Benutzeroberfläche vorgenommen und etwas über diesen "Bug" herausgefunden. Kann jemand einen Fehler mit meinem Code feststellen?

Kontext: Dies ist in einer Controller-Aktion (ZF2), in der$media ist einPOPO Modell.

$file = $basePath . $media->getFileName();
$fileSize = filesize($file);
$fileHandle = fopen($file, 'r');

$etag = md5(serialize(fstat($fileHandle)));
$cacheExpires = new \DateTime();

// TODO : implement ranges...
if ( isset($_SERVER['HTTP_RANGE']) ) {

    // find the requested range
    // this might be too simplistic, apparently the client can request
    // multiple ranges, which can become pretty complex, so ignore it for now
    preg_match('/bytes=(\d+)-(\d+)?/', $_SERVER['HTTP_RANGE'], $matches);

    $rangeFrom = intval($matches[1]);
    $rangeTo = intval($matches[2]);

    $statusCode = 206;
} else {
    $rangeFrom = 0;
    $rangeTo = $fileSize;
    $statusCode = 200;
}

fseek($fileHandle, $rangeFrom);

set_time_limit(0); // try to disable time limit

$response = new Stream();
$response->setStream($fileHandle);
$response->setStatusCode($statusCode);
$response->setStreamName(basename($file));

$headers = new Headers();
$headers->addHeaders(array(
    'Pragma' => 'public',
    'Expires' => $cacheExpires->format('Y/m/d H:i:s'),
    'Cache-Control' => 'no-cache',
    'Accept-Ranges' => 'bytes',
    'Content-Description' => 'File Transfer',
    'Content-Transfer-Encoding' => 'binary',
    'Content-Disposition' => 'attachment; filename="' . basename($file) .'"',
    'Content-Type' => 'audio/mpeg, audio/x-mpeg, audio/x-mpeg-3, audio/mpeg3',  // $media->getFileType(),
    'Content-Range' => "bytes {$rangeFrom}-{$rangeTo}/{$fileSize}",
    'Content-Length' => $fileSize,
    'Etag' => $etag,
    'X-Pad' => 'avoid browser bug',
));
$response->setHeaders($headers);
return $response;

Ich habe versucht, mit fast allen HEADER-Feldern zu spielen (sogar die Bereiche zu entfernen), aber der Browser erhält immerisFinite(audio.duration) === false. Alles andere, einschließlich der Wiedergabe, scheint einwandfrei zu funktionieren.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage