Нежелательные паузы потоковой передачи при воспроизведении звука HTTP_RANGE - PullRequest
0 голосов
/ 16 июня 2020
• 1000 4 секунды) задержка перед продолжением звука. (Обратите внимание, эта задержка возникает / заметна только при развертывании кода, а не при запуске localhost).

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

HTML читает

<audio src='xxxxx' controls='controls' preload='auto'></audio>   

Потоковый код PHP читает:

.
.
.
<some security stuff>
.
.
.

$fragmentSize=1*1024*1024;
$offset=0;
$length=$fragmentSize;
if ( $length>$filesize ) $length=$filesize;

if (isset($_SERVER['HTTP_RANGE'])) {

    $httpRange = str_replace("bytes=", "", $_SERVER['HTTP_RANGE']); // HTTP_RANGE tells us to return from a seek point
    $parts     = explode("-",$httpRange);
    $offset    = intval($parts[0]);
    if ( strcmp($parts[1],"")==0 ) $end=$filesize-1;
    else $end=intval($parts[1]);


    $length = $end + 1 - $offset;
    if ( $length>$fragmentSize ) {
         $end=$end-$length+$fragmentSize;
         $length=$fragmentSize;
    }

    // output the right headers for partial content
    if($offset>0 or $end<$filesize) header('HTTP/1.0 206 Partial Content');
    else header('HTTP/1.0 200 OK');

    header("Content-Range: bytes $offset-$end/$filesize");
}

$media=$this->doGetMediaFragment($fileNm, $offset, $length);
$filesize=strlen($media);
header('Content-Type: audio/mpeg');
header('Content-Length: ' . $length);
header('Content-Disposition: inline; filename="' . $title . '"');
header('Accept-Ranges: bytes'); // Tells the protocol to stream the file
echo $media;
exit;

Спасибо, Эйб

...