Я искал и гуглил довольно долго, но ничего не смог решить мою проблему.
У меня есть mp3-файл на моем сервере, который я должен предоставить своим конечным пользователям, чтобы они могли прослушать запись и убедиться, что она правильная. Проблема в том, что при прослушивании браузер (по крайней мере, Safari и Chrome) отключает последние 1-2 секунды записи. (что не очень полезно.
Материал, который я уже пробовал.
file
и это аудио / MPEG; кодировка = двоичнаяПерепутался с заголовками файла без везения.
header("Content-Type: audio/mpeg; charset=binary");
header("Content-Disposition: inline; filename=\"{$filename}\"");
header('Pragma: no-cache');
header("Content-Length: ". filesize($file_path));
readfile($file_path);
Я в значительной степени сузил проблему до того, что происходит от вызова файла на моем сервере до переноса его в мой браузер. То, что я пробовал, не очень помогло. Одно из моих требований заключается в том, что я должен иметь эту защиту и вне общедоступного каталога, поэтому я должен обслуживать ее через PHP, поскольку пользователь должен пройти аутентификацию, прежде чем он сможет воспроизвести файл. Любые мысли будут с благодарностью.
Вот несколько версий, если это поможет.
CentOS 7.4.1708
Apache 2.4.6
PHP 5.6.30
Chrome Version 60.0.3112.113
Safari Version 10.1.2 (12603.3.8)
Обновить
The data from the main wav file I'm receiving is the following
Duration: 00:09
Audio Channels: 1
Sample Rate: 8,000
Bits Per Sample: 16
Многие аудиоплееры, особенно с MP3, довольно глючные. Они будут использовать такие вещи, как буферы фиксированного размера. Кроме того, вы должны знать, что с MP3 невозможно точно установить точки поиска без декодирования всего файла. Есть много хаков / хитростей по поводу длины файла, смещения байтов и предположений, но это все. По сути, вы никогда не сможете ожидать, что синхронизация будет правильной с аудио с кодированием с потерями, которое не имеет контейнера или формата битового потока, указывающего, сколько сейчас времени. Я думаю, что разумно, чтобы ваш файл проигрывался полностью.
Вы также должны знать, что ваша частота дискретизации очень Низкий, как ваш битрейт, особенно для использования стереозвука.
Возможно, где-то есть буфер фиксированного размера, ожидающий, скажем, 8 КБ данных, и он получает небольшую долю этого из-за низкой частоты дискретизации и битрейта. Это будет ошибка игрока, и если не считать сообщения об ошибке, вы ничего не можете с этим поделать напрямую.
Рассмотреть опус? Вы получите намного более высокое качество, и оно вполне совместимо. В противном случае, рассмотрите возможность использования PCM.
Других решений пока нет …