Я предоставляю своим пользователям аудиозапись в браузере, используя Javascript:
navigator.mediaDevices.getUserMedia(media.gUM).then(_stream =>
{
stream = _stream;
recorder = new MediaRecorder(stream);
recorder.ondataavailable = e =>
{
// push data to chunks
chunks.push(e.data);
// recording has been stopped
if(recorder.state == 'inactive')
{
blob = new Blob(chunks, {type: media.type });
blob_url = URL.createObjectURL(blob);
$('.rec_result_audio').attr({
'src': blob_url
});
// send data to server
// append file to object to be sent
var filedata = new FormData();
filedata.append('recfile', blob, blob_url);
// send by AJAX/POST
}
};
}
В PHP я получаю и сохраняю поток следующим образом:
if(!empty($_FILES))
{
$filename = $_FILES['recfile']['name'];
$file_locationtmp = $_FILES['recfile']['tmp_name'];
$filetype = $_FILES['recfile']['type'];
$filesize_bytes = $_FILES['recfile']['size'];
// add file extension to string
$_FILES['recfile']['name'] = $_FILES['recfile']['name'].'.ogg';
// save to filesystem
}
Теперь файл OGG (webm с кодеком opus) хранится на сервере. Однако все метаданные отсутствуют. Таким образом, панель воспроизведения не работает. См. Здесь для получения дополнительной информации: HTML5 Audio - Progressbar / Playbar не работает для аудиофайла OGG / Проблема с 206 частичным содержимым
Length
отсутствует. Также Bit rate
, Channels
и Audio sample rate
.
Очевидно, что прямого сохранения в файловую систему с помощью PHP недостаточно.
Чего не хватает в коде PHP, чтобы файл позже распознавался как файл OGG?
Нужно ли мне добавлять метаданные, и если да, то как?