Why ffmpeg stops streaming to RTMP endpoint?

I have the following Nodejs code that uses puppeteer and streams to an RTMP end point using ffmpeg :

const {launch, getStream} = require("puppeteer-stream")
const {exec} = require("child_process");
// Launch the browser
const browser = await launch({headless:true});
const page = await browser.newPage();
await page.goto("some url", {waitUntil: "load",});
const stream = await getStream(page, { audio: true, video: true});
const ffmpeg = exec('ffmpeg -re -i - -vf scale=852:480 -c:v libx264 -pix_fmt yuv420p -profile:v main -preset slow -x264opts "nal-hrd=cbr:no-scenecut" -g 60 -bufsize 3968k -c:a aac -b:a 160k -ac 2 -ar 44100 -filter:v fps=25 -f flv "' + Some RTMP URL + RTMP Key + '"');
ffmpeg.stderr.on("data", (chunk) => { if (ShowLogs == "1") {console.log(chunk.toString());}
});
// Stream to ffmpeg
stream.pipe(ffmpeg.stdin);

The code works fine, however it always stops after 17 minutes of streaming. I checked the following items :

  • There is no duration limitation at the RTMP endpoint. Tested with Facebook, AWS IVS...

Here are my ffmpeg logs :

ffmpeg version 4.2.4-1ubuntu0.1 Copyright (c) 2000-2020 the FFmpeg developers built with gcc 9 (Ubuntu 9.3.0-10ubuntu2) configuration: --prefix=/usr --extra-version=1ubuntu0.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-nvenc --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared libavutil 56. 31.100 / 56. 31.100 libavcodec 58. 54.100 / 58. 54.100 libavformat 58. 29.100 / 58. 29.100 libavdevice 58. 8.100 / 58. 8.100 libavfilter 7. 57.100 / 7. 57.100 libavresample 4. 0. 0 / 4. 0. 0 libswscale 5. 5.100 / 5. 5.100 libswresample 3. 5.100 / 3. 5.100 libpostproc 55. 5.100 / 55. 5.100
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, stereo, fltp (default) Stream #0:1(eng): Video: vp8, yuv420p(progressive), 852x480, SAR 1:1 DAR 71:40, 60 tbr, 1k tbn, 1k tbc (default) Metadata: alpha_mode : 1
Only '-vf fps=25' read, ignoring remaining -vf options: Use ',' to separate filters
Only '-af (null)' read, ignoring remaining -af options: Use ',' to separate filters
Stream mapping: Stream #0:1 -> #0:0 (vp8 (native) -> h264 (libx264)) Stream #0:0 -> #0:1 (opus (native) -> aac (native))
[libx264 @ 0x557570d7b380] VBV bufsize set but maxrate unspecified, ignored
[libx264 @ 0x557570d7b380] NAL HRD parameters require VBV parameters
[libx264 @ 0x557570d7b380] using SAR=1/1
[libx264 @ 0x557570d7b380]
using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 0x557570d7b380]
profile Main, level 3.0
[libx264 @ 0x557570d7b380]
264 - core 155 r2917 0a84d98 - H.264/MPEG-4 AVC codec - Copyleft 2003-2018 - - options: cabac=1 ref=5 deblock=1:0:0 analyse=0x1:0x111 me=hex subme=8 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=2 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=3 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=3 weightb=1 open_gop=0 weightp=2 keyint=60 keyint_min=6 scenecut=0 intra_refresh=0 rc_lookahead=50 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, flv, to 'rtmps://something': Metadata: encoder :
Lavf58.29.100 Stream #0:0
(eng)
: Video: h264 (libx264) ([7][0][0][0] / 0x0007), yuv420p, 852x480 [SAR 1:1 DAR 71:40], q=-1--1
25 fps,
1k tbn,
25 tbc (default) Metadata: alpha_mode : 1 encoder : Lavc58.54.100 libx264 Side data: cpb: bitrate max/min/avg: 0/0/0 buffer size: 39680000 vbv_delay: -1 Stream #0:1(eng): Audio: aac (LC) ([10][0][0][0] / 0x000A), 44100 Hz, stereo, fltp, 160 kb/s (default) Metadata: encoder : Lavc58.54.100 aac
frame= 9 fps=0.0 q=0.0 size= 0kB time=00:00:00.48 bitrate= 6.6kbits/s speed=0.967x
frame= 22 fps= 22 q=0.0 size= 0kB time=00:00:00.95 bitrate= 3.4kbits/s speed=0.943x
frame= 26 fps= 17 q=0.0 size= 0kB time=00:00:01.51 bitrate= 2.1kbits/s speed=0.995x
frame= 41 fps= 20 q=0.0 size= 0kB time=00:00:01.97 bitrate= 1.6kbits/s speed=0.977x
frame= 51 fps= 20 q=0.0 size= 0kB time=00:00:02.53 bitrate= 1.3kbits/s speed= 1x
frame= 61 fps= 20 q=28.0 size= 5kB time=00:00:02.94 bitrate= 13.9kbits/s speed=0.966x
frame= 81 fps= 23 q=28.0 size= 8kB time=00:00:03.55 bitrate= 19.0kbits/s speed=0.998x
frame= 93 fps= 23 q=28.0 size= 21kB time=00:00:04.01 bitrate= 43.4kbits/s speed=0.988x
frame= 99 fps= 22 q=28.0 size= 22kB time=00:00:04.55 bitrate= 39.7kbits/s speed=0.996x
frame= 121 fps= 24 q=28.0 size= 34kB time=00:00:04.99 bitrate= 55.3kbits/s speed=0.983x
frame= 126 fps= 23 q=28.0 size= 34kB time=00:00:05.57 bitrate= 50.3kbits/s speed=0.998x
frame= 146 fps= 24 q=28.0 size= 38kB time=00:00:06.06 bitrate= 50.8kbits/s speed=0.996x
frame= 151 fps= 23 q=28.0 size= 38kB time=00:00:06.54 bitrate= 47.6kbits/s speed=0.993x
frame= 169 fps= 24 q=28.0 size= 40kB time=00:00:07.08 bitrate= 45.9kbits/s speed=0.998x
frame= 178 fps= 23 q=28.0 size= 50kB time=00:00:07.56 bitrate= 54.0kbits/s speed=0.995x
frame= 188 fps= 23 q=28.0 size= 52kB time=00:00:08.11 bitrate= 52.3kbits/s speed= 1x
frame= 206 fps= 24 q=28.0 size= 53kB time=00:00:08.60 bitrate= 50.8kbits/s speed=0.998x
frame= 221 fps= 24 q=28.0 size= 56kB time=00:00:09.06 bitrate= 50.9kbits/s speed=0.994x
...
frame=25731 fps= 25 q=28.0 size= 7286kB time=00:17:09.77 bitrate= 58.0kbits/s speed= 1x
frame=25748 fps= 25 q=28.0 size= 7297kB time=00:17:10.32 bitrate= 58.0kbits/s speed= 1x
frame=25760 fps= 25 q=28.0 size= 7299kB time=00:17:10.79 bitrate= 58.0kbits/s speed= 1x
frame=25769 fps= 25 q=28.0 size= 7301kB time=00:17:11.28 bitrate= 58.0kbits/s speed= 1x
frame=25788 fps= 25 q=28.0 size= 7304kB time=00:17:11.81 bitrate= 58.0kbits/s speed= 1x
frame=25796 fps= 25 q=25.0 size= 7305kB time=00:17:12.30 bitrate= 58.0kbits/s speed= 1x
frame=25811 fps= 25 q=28.0 size= 7316kB time=00:17:12.83 bitrate= 58.0kbits/s speed= 1x
frame=25816 fps= 25 q=28.0 size= 7316kB time=00:17:13.32 bitrate= 58.0kbits/s speed= 1x
frame=25836 fps= 25 q=28.0 size= 7318kB time=00:17:13.82 bitrate= 58.0kbits/s speed= 1x
frame=25847 fps= 25 q=28.0 size= 7320kB time=00:17:14.28 bitrate= 58.0kbits/s speed= 1x

Does anyone know how can I find the cause of the problem why the streaming stops ? Is there any timeout that stops the streaming ?

Thanks, Cheers,

1 Reset to default

Know someone who can answer? Share a link to this question via email, Twitter, or Facebook.

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like