Здравствуйте. Встала задача записывать видео из браузера и передавать на rtmp сервер. В этой задаче используется промежуточное проксирование на node.js сервер, который с помощью программы ffmpeg производит транскодирование в flv формат, и затем отправляет на rtmp сервер.
В качестве основы был найден пример на гитхаб
До сервера передача осуществляется посредством soket.io.
socket.on('start',function(m){
if(ffmpeg_process || feedStream){
socket.emit('fatal','stream already started.');
return;
}
if(!socket._rtmpDestination){
socket.emit('fatal','no destination given.');
return;
}
var ops=[
'-vcodec', socket._vcodec,'-i','-',
'-c:v', 'libx264', '-preset', 'veryfast', '-tune', 'zerolatency',
'-an', //TODO: give up audio for now...
//'-async', '1',
//'-filter_complex', 'aresample=44100', //necessary for trunked streaming?
//'-strict', 'experimental', '-c:a', 'aac', '-b:a', '128k',
'-bufsize', '1000',
'-f', 'flv', socket._rtmpDestination
];
ffmpeg_process=spawn('ffmpeg', ops);
feedStream=function(data){
ffmpeg_process.stdin.write(data);
//write exception cannot be caught here.
}
ffmpeg_process.stderr.on('data',function(d){
socket.emit('ffmpeg_stderr',''+d);
});
ffmpeg_process.on('error',function(e){
console.log('child process error'+e);
socket.emit('fatal','ffmpeg error!'+e);
feedStream=false;
socket.disconnect();
});
ffmpeg_process.on('exit',function(e){
console.log('child process exit'+e);
socket.emit('fatal','ffmpeg exit!'+e);
socket.disconnect();
});
});
socket.on('binarystream',function(m){
if(!feedStream){
socket.emit('fatal','rtmp not set yet.');
return;
}
feedStream(m);
});
, но на этапе выполнения транскодирования вываливаются ошибки.
SERVER:Hello from mediarecorder-to-rtmp server!
SERVER:Please set rtmp destination before start streaming.
SERVER:rtmp destination set to:rtmp://media.artinvest52.ru:1935/live
FFMPEG:ffmpeg version 2.8.11-0ubuntu0.16.04.1 Copyright (c) 2000-2017 the FFmpeg developers
built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.4) 20160609
configuration: --prefix=/usr --extra-version=0ubuntu0.16.04.1 --build-suffix=-ffmpeg --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --cc=cc --cxx=g++ --enable-gpl --enable-shared --disable-stripping --disable-decoder=libopenjpeg --disable-decoder=libschroedinger --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librtmp --enable-libschroedinger --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzvbi --enable-openal --enable-opengl --enable-x11grab --enable-libdc1394 --enable-libiec61883 --enable-libzmq --enable-frei0r --enable-libx264 --enable-libopencv
FFMPEG: libavutil 54. 31.100 / 54. 31.100
libavcodec 56. 60.100 / 56. 60.100
libavformat 56. 40.101 / 56. 40.101
libavdevice 56. 4.100 / 56. 4.100
libavfilter 5. 40.101 / 5. 40.101
libavresample 2. 1. 0 / 2. 1. 0
libswscale 3. 1.101 / 3. 1.101
libswresample 1. 2.101 / 1. 2.101
libpostproc 53. 3.100 / 53. 3.100
FFMPEG:[libvpx @ 0x1b0e8e0] v1.5.0
FFMPEG:[libvpx @ 0x1b0e8e0] Failed to decode frame: Bitstream not supported by this decoder
FFMPEG: Last message repeated 77 times
[matroska,webm @ 0x1b0c4a0] decoding for stream 1 failed
[matroska,webm @ 0x1b0c4a0] Could not find codec parameters for stream 1 (Video: vp8, none, 640x480): unspecified pixel format
Consider increasing the value for the 'analyzeduration' and 'probesize' options
FFMPEG:Input #0, matroska,webm, from 'pipe:':
Metadata:
encoder : Chrome
Duration: N/A, start: 0.000000, bitrate: N/A
Stream #0:0(eng): Audio: opus, 48000 Hz, mono, fltp (default)
Stream #0:1(eng): Video: vp8, none, 640x480, SAR 1:1 DAR 4:3, 16.67 tbr, 1k tbn, 1k tbc (default)
FFMPEG:[buffer @ 0x1b6d720] Unable to parse option value "-1" as pixel format
FFMPEG: Last message repeated 1 times
[buffer @ 0x1b6d720] Error setting option pix_fmt to value -1.
[graph 0 input from stream 0:1 @ 0x1bbf860] Error applying options to the filter.
Error opening filters!
ERROR: unexpected:ffmpeg exit!1
ERROR: server disconnected!
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
JS у них во всех сервисах обфусцирован, поэтому я даже не пытался разобратьсяТак же могут использоваться и какие либо сложные серверные технологии
Нужно построить автомобильный и пешеходный маршруты через google maps по двум точкамЕсть два поля ввода (от и до), и две кнопки (автомобильный маршрут...
Помогите решить проблему с выводом ошибки javascript в gulp при помощи плагинов, которые выводят ошибку в отдельном окне, как notyficationДля less настроил,...