Я пытаюсь создать приложение, в котором я могу отправлять видео с веб-камеры из браузера MediaRecorder через Websocket на сервер узлов, который будет хранить фрагментированные данные в памяти и обрабатывать их через обработчик конечных точек.
Iможет получать данные, создавать поток Passthrough и обслуживать конечную точку, но отображаемый видеопроигрыватель html5 ничего не отображает.Я не уверен, где я ошибся.
клиент:
serverVideoStreamConnection = new WebSocket('wss://' + window.location.hostname + ':8443/');
serverVideoStreamConnection.binaryType = "arraybuffer";
if (navigator.mediaDevices.getUserMedia) {
navigator.mediaDevices.getUserMedia(constraints).then(recordStream).catch(errorHandler);
} else {
alert('Your browser does not support getUserMedia API');
}
}
function recordStream(stream) {
console.log("Started recording")
mediaRecorder = new MediaRecorder(stream);
mediaRecorder.ondataavailable = handleDataAvailable;
mediaRecorder.start(10);
function handleDataAvailable(event) {
if (event.data.size > 0) {
serverVideoStreamConnection.send(event.data);
} else {
// ...
console.log("Data not available")
}
}
сервер:
let video = new PassThrough();
wss.on('connection', function (ws) {
ws.on('message', function (message) {
// Broadcast any received message to all clients
if (typeof message !== 'string') {
video.write(new Buffer.from(message));
} else {
wss.broadcast(message);
}
}
server.get('/video', handleVideo)
function handleVideo(request, response) {
const header = {
'Content-Type': 'video/mp4',
"Accept-Ranges": "bytes",
};
response.writeHead(206, header);
video.pipe(response);
}