Запись аудио: нет длительности у файла
Добрый день!
Встала задача записать голосовой ответ человека, что-то похожее на аудио сообщения в месенджерах. Использую mediaRecorder, все работает, все скачивается. Но почему-то при воспроизведении не могу перемотать вперед (ни на страничке, ни на компе, после того как скачала). На компе длительность в проигрывателе стоит 435 часов, хотя запись около 10 секунд. В свойствах файла графа продолжительность пустая. Подскажите, пожалуйста, в какую сторону копать? Мне как-то надо самой свойство файла заполнить? Клиентская часть:
navigator.mediaDevices.getUserMedia({ audio: true})
.then(function(stream){
const mediaRecorder = new MediaRecorder(stream);
document.querySelector('#start').addEventListener('click', function(){
mediaRecorder.start();
});
let audioChunks = [];
mediaRecorder.addEventListener("dataavailable",function(event) {
audioChunks.push(event.data);
});
document.querySelector('#stop').addEventListener('click', function(){
mediaRecorder.stop();
});
mediaRecorder.addEventListener("stop", function() {
const audioBlob = new Blob(audioChunks, {
type: 'audio/wav'
});
let fd = new FormData();
fd.append('voice', audioBlob);
sendVoice(fd);
audioChunks = [];
});
});
async function sendVoice(form) {
let promise = await fetch(URL, {
method: 'POST',
body: form});
if (promise.ok) {
let response = await promise.json();
console.log(response.data);
let audio = document.createElement('audio');
audio.src = response.data;
audio.controls = true;
audio.autoplay = false;
document.querySelector('#messages').appendChild(audio);
}
};
На сервере:
$uploadDir = 'records/';
$typeFile = explode('/', $_FILES['voice']['type']);
$uploadFile = $uploadDir . $pass.'_'.$q.'_'.time().'.'.$typeFile[1];
if (move_uploaded_file($_FILES['voice']['tmp_name'], $uploadFile)) {
$response = ['result'=>'OK', 'data'=>'../voice_record/' . $uploadFile];
} else {
$response = ['result'=>'ERROR', 'data'=>''];
}
echo json_encode($response);
|
const mediaRecorder = new MediaRecorder(stream);
Вы не указываете второй параметр, определяющий mimetype. Вы уверены, что по умолчанию он будет записывать в audio/wav? Откуда приходит страница? MediaRecorder работает только, если страница приходит по https: или с localhost. |
voraa,
страница приходит с https. Спасибо за наводку про mimetype. Почитала, действительно браузер в другом формате записывает. Добавила проверку на поддерживаемые форматы, и выставила mimetype соответствующий. Хром записывает только в webm, видимо поэтому перемотка не работает, а другие форматы он не поддерживает. Проблему решает конвертация записи в любой другой формат. Спасибо Вам за помощь! |
| Часовой пояс GMT +3, время: 14:58. |