Как создать пример файла webm из байтового массива - PullRequest
0 голосов
/ 23 декабря 2018

Я работаю над приложением захвата экрана и могу обработать событие ondataavailable и получить данные в виде фрагментов, которые я затем преобразую в виде большого двоичного объекта, но когда я отправляю тот же поток данных через websocket на сервер и сохраняюПотоковая передача в виде файла webm на диск, а затем воспроизведение файла, файл ничего не воспроизводит.Я думаю, что файл нуждается в некоторой метаинформации, в которой я не уверен.

Есть предложения?

Вот мой код JavaScript:

socket.emit('message', new Blob([event.data], {type: 'video/webm'}));

Код сохранения сервера:

fs.writeFile("d://test.webm", data, "binary", function(err) { });

1 Ответ

0 голосов
/ 23 декабря 2018

Событие dataavailable возвращает фрагмент - часть записи - и запускается несколько раз.В одном событии вряд ли будет содержаться вся запись.

Объедините данные из нескольких событий в массив chunks, затем, после того как вы остановили запись, объедините весь массив в новый Blob.Это производит файл, который работает для меня:

const rec = new MediaRecorder(stream), chunks = [];
rec.ondataavailable = e => chunks.push(e.data);
rec.start();
await new Promise(r => setTimeout(r, 10000)); // wait 10 seconds
rec.stop();
await new Promise(r => rec.onstop = r);
const blob = new Blob(chunks);
link.href = URL.createObjectURL(blob);

Рабочая демонстрация: https://jsfiddle.net/jib1/pkc16k9r/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...