Я пытаюсь создать прямую трансляцию веб-приложения с использованием NodeJS.Код, который у меня есть в настоящий момент, генерирует необработанный двоичный поток (в формате webm) с веб-камеры на клиенте с использованием сокета ввода-вывода, и сервер узла получает эти необработанные данные.Используя fluent-ffmpeg, я хочу закодировать этот двоичный поток в mpegts и отправить его на RTMP-сервер в режиме реального времени , не создавая никаких промежуточных файлов.Однако при попытке конвертировать большие двоичные объекты в ffmpeg я получаю следующую ошибку:
Error while decoding stream #0:1: Invalid data found when processing input
[NULL @ 000001b15e67bd80] Invalid sync code 61f192.
[libvpx @ 000001b15e6c5000] Failed to decode frame: Bitstream not supported by this decoder
Мой соответствующий код клиента внешнего интерфейса:
navigator.mediaDevices.getUserMedia(constraints).then(function(stream) {
video_show(stream);//only show locally, not remotely
socket.emit('config_rtmpDestination',url);
socket.emit('start','start');
var options = {mimeType: 'video/webm;codecs=h264'};
mediaRecorder = new MediaRecorder(stream, options);
mediaRecorder.start(2000);
mediaRecorder.onstop = function(e) {
stream.stop();
}
mediaRecorder.ondataavailable = function(e) {
//var arraybuffer = Uint8Array.from(e.data).buffer;
socket.emit("binarystream", blob);
//chunks.push(e.data);
}
}).catch(function(err) {
console.log('The following error occured: ' + err);
show_output('Local getUserMedia ERROR:'+err);
});
Соответствующий код сервера NodeJS:
socket.on('binarystream',function(m){
feedStream(m);
});
socket.on('start',function(m){
...
var ops=[
'-vcodec', socket._vcodec,'-i','-',
'-c:v', 'libx264', '-preset', 'veryfast', '-tune', 'zerolatency',
'-an', '-bufsize', '1000',
'-f', 'mpegts', socket._rtmpDestination
];
ffmpeg_process=spawn('ffmpeg', ops);
feedStream=function(data){
ffmpeg_process.stdin.write(data);
}
...
}