Ffmpeg: битовый поток не поддерживается этим декодером - PullRequest
0 голосов
/ 22 декабря 2018

Я пытаюсь создать прямую трансляцию веб-приложения с использованием 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);
    }
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...