Using ffmpeg to (re)stream camera feed to RTMP server

6,890
ffmpeg \
    -i "http://admin:@192.168.0.65/media/?action=stream" \
    -re -f lavfi -i anullsrc \
    -c:v libx264 -vf format=yuv420p -b:v 4000k -bufsize 8000k -maxrate 4000k -g 50 \
    -c:a aac \
    -f flv "rtmp://a.rtmp.youtube.com/live2/[streamkey]"
  • YouTube requires an audio stream to be present, so add silent audio with the anullsrc filter.
  • YouTube may not accept yuvj420p pixel format (I did not verify this), so change it to yuv420p.
  • -f h264 can't be used with audio, so use -f flv.
  • You probably don't need the -f mjpeg input option.
  • Declare bitrate and VBV options for streaming, and make -g value to be frame rate x 2.
Share:
6,890

Related videos on Youtube

Haxor
Author by

Haxor

Updated on September 18, 2022

Comments

  • Haxor
    Haxor over 1 year

    Here's the deal, I have multiple cheap chinese WiFi cameras that i'm trying to livestream.

    The camera's have a web interface and (for my knowledge) lack an RTSP stream. The camera's output a MJPEG encoded stream on http://admin:@[camip]/media/?action=stream and connects successfully using VLC.

    I can use OBS to add a VLC source and than use OBS to stream directly to Youtube and that works fine but isn't ideal as i want to stream multiple cameras to their own stream.

    Using OBS I have the following streaming settings and everything works

    Video bitrate: 750 Kbps
    Encoder: Software (x264) 
    Audio bitrate: 160
    

    I'm able to connect to the stream using using ffmpeg and it shows the input stream

    Input #0, mjpeg, from 'http://admin:@192.168.0.65/media/?action=stream';
      Duration: N/A, bitrate: N/A
        Stream #0:0 Video: mjpeg, yuvj420p(pc, bt470bg/unknown/unknown), 1280x720 [SAR 1:1 DAR 16:9], 25 tbr, 1200k tbn, 25 tbc 
    

    Now my next step would be to take that input stream and restream it to Youtube Live (or actually a private YouPHPTube server but it's the same configuration).

    I've tried loads of things but keep running into strange issues like the speed of the output being really slow (or at least I think that's what's indicated and Youtube wont pick up the stream)...

    ffmpeg \
        -f mjpeg \
        -i "http://admin:@192.168.0.65/media/?action=stream" \
        -f h264 "rtmp://a.rtmp.youtube.com/live2/[streamkey]"
    
    Output #0, h264, to 'rtmp://a.rtmp.youtube.com/live2/[streamkey]':
      Metadata:
        encoder         : Lavf57.83.100
        Stream #0:0: Video: mpeg2video (Main), yuv420p, 720x480 [SAR 32:27 DAR 16:9], q=2-31, 200 kb/s, 25 fps, 25 tbn, 25 tbc
        Metadata:
          encoder         : Lavc57.107.100 mpeg2video
        Side data:
          cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -1
    frame=  577 fps=4.2 q=24.8 Lsize=     994kB time=00:00:23.04 bitrate= 353.6kbits/s speed=0.167x  
    

    Can anyone help me out, tell me what I'm doing wrong and advice me how to get ffmpeg to restream with the same output settings as in my OBS setup or anything that does work?

    Thanks in advance!

    EDIT: Full log added

    ffmpeg version 3.4.6-0ubuntu0.18.04.1 Copyright (c) 2000-2019 the FFmpeg developers
      built with gcc 7 (Ubuntu 7.3.0-16ubuntu3)
      configuration: --prefix=/usr --extra-version=0ubuntu0.18.04.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-stripping --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-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-librsvg --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-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared
      libavutil      55. 78.100 / 55. 78.100
      libavcodec     57.107.100 / 57.107.100
      libavformat    57. 83.100 / 57. 83.100
      libavdevice    57. 10.100 / 57. 10.100
      libavfilter     6.107.100 /  6.107.100
      libavresample   3.  7.  0 /  3.  7.  0
      libswscale      4.  8.100 /  4.  8.100
      libswresample   2.  9.100 /  2.  9.100
      libpostproc    54.  7.100 / 54.  7.100
    Input #0, mjpeg, from 'http://admin:@192.168.0.65/media/?action=stream':
      Duration: N/A, bitrate: N/A
        Stream #0:0: Video: mjpeg, yuvj420p(pc, bt470bg/unknown/unknown), 1280x720 [SAR 1:1 DAR 16:9], 25 tbr, 1200k tbn, 25 tbc
    Stream mapping:
      Stream #0:0 -> #0:0 (mjpeg (native) -> h264 (libx264))
    Press [q] to stop, [?] for help
    [libx264 @ 0x55e716cbe200] using SAR=1/1
    [libx264 @ 0x55e716cbe200] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
    [libx264 @ 0x55e716cbe200] profile High, level 3.1
    Output #0, h264, to 'rtmp://xxx/xxx/xxx':
      Metadata:
        encoder         : Lavf57.83.100
        Stream #0:0: Video: h264 (libx264), yuvj420p(pc), 1280x720 [SAR 1:1 DAR 16:9], q=-1--1, 25 fps, 25 tbn, 25 tbc
        Metadata:
          encoder         : Lavc57.107.100 libx264
        Side data:
          cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
    frame=   80 fps=4.2 q=-1.0 Lsize=     673kB time=00:00:03.12 bitrate=1766.8kbits/s speed=0.163x    
    
    
    video:673kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000000%
    [libx264 @ 0x55e716cbe200] frame I:1     Avg QP:24.70  size: 70939
    [libx264 @ 0x55e716cbe200] frame P:20    Avg QP:24.70  size: 21910
    [libx264 @ 0x55e716cbe200] frame B:59    Avg QP:26.67  size:  3049
    [libx264 @ 0x55e716cbe200] consecutive B-frames:  1.2%  0.0%  3.8% 95.0%
    [libx264 @ 0x55e716cbe200] mb I  I16..4:  1.9% 93.4%  4.6%
    [libx264 @ 0x55e716cbe200] mb P  I16..4:  0.0%  1.7%  0.0%  P16..4: 51.7% 15.9% 12.4%  0.0%  0.0%    skip:18.4%
    [libx264 @ 0x55e716cbe200] mb B  I16..4:  0.0%  0.0%  0.0%  B16..8: 36.6%  0.6%  0.0%  direct: 0.5%  skip:62.3%  L0:51.5% L1:47.8% BI: 0.7%
    [libx264 @ 0x55e716cbe200] 8x8 transform intra:95.1% inter:82.3%
    [libx264 @ 0x55e716cbe200] coded y,uvDC,uvAC intra: 92.8% 72.8% 26.8% inter: 14.3% 18.8% 0.2%
    [libx264 @ 0x55e716cbe200] i16 v,h,dc,p: 11%  4%  0% 85%
    [libx264 @ 0x55e716cbe200] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 15% 11% 18%  6%  9% 15%  7%  6% 12%
    [libx264 @ 0x55e716cbe200] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 24% 10%  9%  7% 12% 18%  7%  6%  7%
    [libx264 @ 0x55e716cbe200] i8c dc,h,v,p: 54% 19% 21%  6%
    [libx264 @ 0x55e716cbe200] Weighted P-Frames: Y:0.0% UV:0.0%
    [libx264 @ 0x55e716cbe200] ref P L0: 35.0% 11.4% 41.4% 12.2%
    [libx264 @ 0x55e716cbe200] ref B L0: 66.4% 25.9%  7.6%
    [libx264 @ 0x55e716cbe200] ref B L1: 91.3%  8.7%
    [libx264 @ 0x55e716cbe200] kb/s:1722.60
    Exiting normally, received signal 2.
    

    Second edit: new output log Tried with the new parameters but still fails

    ffmpeg \
        -i "http://admin:@192.168.0.65/media/?action=stream" \
        -re -f lavfi -i anullsrc \
        -c:v libx264 -vf format=yuv420p -b:v 4000k -bufsize 8000k -maxrate 4000k -g 50 \
        -c:a aac \
        -f flv "rtmp://a.rtmp.youtube.com/live2/[streamkey]"
    

    Same result, Youtube reports YouTube is not receiving enough video to maintain smooth streaming. As such, viewers will experience buffering. but never picks up the stream and our private streaming server also fails to pickup the stream.

    What seems to be hapening is that the output stream is around 4 fps causing our private RTSP server to refuse the stream and youtube to play 3 seconds of video after buffering for about a minute (played back on 10x speed).

    ffmpeg output

    $ ffmpeg -i 'http://admin:@192.168.0.65/media/?action=stream' -re -f lavfi -i anullsrc -c:v libx264 -vf format=yuv420p -b:v 4000k -bufsize 8000k -maxrate 4000k -g 50 -c:a aac -f flv 'rtmp://x.rtmp.youtube.com/live2/[stream-key-deducted]'
    
    ffmpeg version 3.4.6-0ubuntu0.18.04.1 Copyright (c) 2000-2019 the FFmpeg developers
      built with gcc 7 (Ubuntu 7.3.0-16ubuntu3)
      configuration: --prefix=/usr --extra-version=0ubuntu0.18.04.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-stripping --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-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-librsvg --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-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared
      libavutil      55. 78.100 / 55. 78.100
      libavcodec     57.107.100 / 57.107.100
      libavformat    57. 83.100 / 57. 83.100
      libavdevice    57. 10.100 / 57. 10.100
      libavfilter     6.107.100 /  6.107.100
      libavresample   3.  7.  0 /  3.  7.  0
      libswscale      4.  8.100 /  4.  8.100
      libswresample   2.  9.100 /  2.  9.100
      libpostproc    54.  7.100 / 54.  7.100
    Input #0, mpjpeg, from 'http://admin:@192.168.0.65/media/?action=stream':
      Duration: N/A, bitrate: N/A
        Stream #0:0: Video: mjpeg, yuvj420p(pc, bt470bg/unknown/unknown), 1280x720 [SAR 1:1 DAR 16:9], 25 tbr, 25 tbn, 25 tbc
    Input #1, lavfi, from 'anullsrc':
      Duration: N/A, start: 0.000000, bitrate: 705 kb/s
        Stream #1:0: Audio: pcm_u8, 44100 Hz, stereo, u8, 705 kb/s
    Stream mapping:
      Stream #0:0 -> #0:0 (mjpeg (native) -> h264 (libx264))
      Stream #1:0 -> #0:1 (pcm_u8 (native) -> aac (native))
    Press [q] to stop, [?] for help
    [swscaler @ 0x55b35ec1a920] deprecated pixel format used, make sure you did set range correctly
    [libx264 @ 0x55b35ebcd3e0] using SAR=1/1
    [libx264 @ 0x55b35ebcd3e0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
    [libx264 @ 0x55b35ebcd3e0] profile High, level 3.1
    [libx264 @ 0x55b35ebcd3e0] 264 - core 152 r2854 e9a5903 - H.264/MPEG-4 AVC codec - Copyleft 2003-2017 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 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=1 weightb=1 open_gop=0 weightp=2 keyint=50 keyint_min=5 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=cbr mbtree=1 bitrate=4000 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 vbv_maxrate=4000 vbv_bufsize=8000 nal_hrd=none filler=0 ip_ratio=1.40 aq=1:1.00
    Output #0, flv, to 'rtmp://x.rtmp.youtube.com/live2/[stream-key-deducted]':
      Metadata:
        encoder         : Lavf57.83.100
        Stream #0:0: Video: h264 (libx264) ([7][0][0][0] / 0x0007), yuv420p(progressive), 1280x720 [SAR 1:1 DAR 16:9], q=-1--1, 4000 kb/s, 25 fps, 1k tbn, 25 tbc
        Metadata:
          encoder         : Lavc57.107.100 libx264
        Side data:
          cpb: bitrate max/min/avg: 4000000/0/4000000 buffer size: 8000000 vbv_delay: -1
        Stream #0:1: Audio: aac (LC) ([10][0][0][0] / 0x000A), 44100 Hz, stereo, fltp, 128 kb/s
        Metadata:
          encoder         : Lavc57.107.100 aac
    [flv @ 0x55b35ebcbe00] Failed to update header with correct duration.053.5kbits/s speed=0.168x          
    [flv @ 0x55b35ebcbe00] Failed to update header with correct filesize.
    frame= 1537 fps=4.3 q=-1.0 Lsize=   30371kB time=00:01:01.36 bitrate=4054.7kbits/s speed=0.172x    
    
    video:30283kB audio:15kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.240946%
    [libx264 @ 0x55b35ebcd3e0] frame I:31    Avg QP:18.65  size:123400
    [libx264 @ 0x55b35ebcd3e0] frame P:399   Avg QP:21.77  size: 44957
    [libx264 @ 0x55b35ebcd3e0] frame B:1107  Avg QP:23.79  size:  8352
    [libx264 @ 0x55b35ebcd3e0] consecutive B-frames:  4.0%  0.0%  0.0% 96.0%
    [libx264 @ 0x55b35ebcd3e0] mb I  I16..4:  0.4% 98.7%  1.0%
    [libx264 @ 0x55b35ebcd3e0] mb P  I16..4:  0.0%  3.5%  0.0%  P16..4: 43.6% 28.2% 20.5%  0.0%  0.0%    skip: 4.2%
    [libx264 @ 0x55b35ebcd3e0] mb B  I16..4:  0.0%  0.2%  0.0%  B16..8: 35.2%  3.0%  0.7%  direct: 5.1%  skip:55.8%  L0:51.7% L1:42.9% BI: 5.3%
    [libx264 @ 0x55b35ebcd3e0] 8x8 transform intra:99.0% inter:75.4%
    [libx264 @ 0x55b35ebcd3e0] coded y,uvDC,uvAC intra: 99.1% 93.6% 54.1% inter: 28.1% 35.6% 1.1%
    [libx264 @ 0x55b35ebcd3e0] i16 v,h,dc,p: 87%  1%  2% 10%
    [libx264 @ 0x55b35ebcd3e0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 14% 11% 19%  5% 10% 15%  7%  7% 12%
    [libx264 @ 0x55b35ebcd3e0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 25%  9%  9%  6% 11% 18%  8%  7%  8%
    [libx264 @ 0x55b35ebcd3e0] i8c dc,h,v,p: 57% 17% 18%  8%
    [libx264 @ 0x55b35ebcd3e0] Weighted P-Frames: Y:0.0% UV:0.0%
    [libx264 @ 0x55b35ebcd3e0] ref P L0: 30.6%  8.3% 48.4% 12.6%
    [libx264 @ 0x55b35ebcd3e0] ref B L0: 63.2% 29.2%  7.6%
    [libx264 @ 0x55b35ebcd3e0] ref B L1: 93.5%  6.5%
    [libx264 @ 0x55b35ebcd3e0] kb/s:4034.99
    [aac @ 0x55b35ebd0ec0] Qavg: 65536.000
    Exiting normally, received signal 2.
    

    Edit 3: updated ffmpeg to 4.2.1, synthetic test and restream test

    After updating to v4.2.1. the issue remains the same, however the synthetic video test runs fluidly...

    Synthetic output

    $ ffmpeg -re -f lavfi -i testsrc2=d=600:s=1280x720 -re -f lavfi -i anullsrc -c:v libx264 -vf format=yuv420p -b:v 4000k -bufsize 8000k -maxrate 4000k -g 50 -c:a aac -flags +global_header -f flv 'rtmp://192.168.0.91/live?p=[streamid]/[streamkey]'
    
    ffmpeg version 4.2.1-0york0~18.04.1 Copyright (c) 2000-2019 the FFmpeg developers
      built with gcc 7 (Ubuntu 7.4.0-1ubuntu1~18.04.1)
      configuration: --prefix=/usr --extra-version='0york0~18.04.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-opengl --enable-sdl2 --enable-nonfree --enable-libfdk-aac --enable-libdc1394 --enable-libdrm --enable-libiec61883 --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, lavfi, from 'testsrc2=d=600:s=1280x720':
      Duration: N/A, start: 0.000000, bitrate: N/A
        Stream #0:0: Video: rawvideo (I420 / 0x30323449), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 25 tbr, 25 tbn, 25 tbc
    Input #1, lavfi, from 'anullsrc':
      Duration: N/A, start: 0.000000, bitrate: 705 kb/s
        Stream #1:0: Audio: pcm_u8, 44100 Hz, stereo, u8, 705 kb/s
    Stream mapping:
      Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (libx264))
      Stream #1:0 -> #0:1 (pcm_u8 (native) -> aac (native))
    Press [q] to stop, [?] for help
    [libx264 @ 0x564c9da28540] using SAR=1/1
    [libx264 @ 0x564c9da28540] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
    [libx264 @ 0x564c9da28540] profile High, level 3.1
    [libx264 @ 0x564c9da28540] 264 - core 155 r2917 0a84d98 - H.264/MPEG-4 AVC codec - Copyleft 2003-2018 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 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=1 weightb=1 open_gop=0 weightp=2 keyint=50 keyint_min=5 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=cbr mbtree=1 bitrate=4000 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 vbv_maxrate=4000 vbv_bufsize=8000 nal_hrd=none filler=0 ip_ratio=1.40 aq=1:1.00
    Output #0, flv, to 'rtmp://192.168.0.91/live?p=[streamid]/[streamkey]':
      Metadata:
        encoder         : Lavf58.29.100
        Stream #0:0: Video: h264 (libx264) ([7][0][0][0] / 0x0007), yuv420p(progressive), 1280x720 [SAR 1:1 DAR 16:9], q=-1--1, 4000 kb/s, 25 fps, 1k tbn, 25 tbc
        Metadata:
          encoder         : Lavc58.54.100 libx264
        Side data:
          cpb: bitrate max/min/avg: 4000000/0/4000000 buffer size: 8000000 vbv_delay: -1
        Stream #0:1: Audio: aac (LC) ([10][0][0][0] / 0x000A), 44100 Hz, stereo, fltp, 128 kb/s
        Metadata:
          encoder         : Lavc58.54.100 aac
    [flv @ 0x564c9da270c0] Failed to update header with correct duration.123.1kbits/s speed=0.936x     
    [flv @ 0x564c9da270c0] Failed to update header with correct filesize.
    frame=  779 fps= 25 q=-1.0 Lsize=   15601kB time=00:00:31.04 bitrate=4117.3kbits/s speed=0.979x    
    video:15557kB audio:7kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.234822%
    [libx264 @ 0x564c9da28540] frame I:16    Avg QP: 7.28  size: 39981
    [libx264 @ 0x564c9da28540] frame P:361   Avg QP:20.22  size: 22060
    [libx264 @ 0x564c9da28540] frame B:402   Avg QP:24.90  size: 18225
    [libx264 @ 0x564c9da28540] consecutive B-frames:  8.7% 65.2%  6.5% 19.5%
    [libx264 @ 0x564c9da28540] mb I  I16..4: 66.1% 23.9% 10.0%
    [libx264 @ 0x564c9da28540] mb P  I16..4:  1.5%  3.1%  0.5%  P16..4:  5.7%  4.7%  3.1%  0.0%  0.0%    skip:81.4%
    [libx264 @ 0x564c9da28540] mb B  I16..4:  0.2%  0.4%  1.8%  B16..8:  8.5%  3.1%  0.8%  direct: 0.8%  skip:84.4%  L0:47.4% L1:39.8% BI:12.8%
    [libx264 @ 0x564c9da28540] 8x8 transform intra:37.6% inter:26.4%
    [libx264 @ 0x564c9da28540] coded y,uvDC,uvAC intra: 24.7% 29.3% 28.8% inter: 4.0% 7.1% 6.1%
    [libx264 @ 0x564c9da28540] i16 v,h,dc,p: 94%  6%  1%  0%
    [libx264 @ 0x564c9da28540] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 14%  7% 75%  1%  0%  0%  0%  1%  0%
    [libx264 @ 0x564c9da28540] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 15% 17% 29% 10%  5%  6%  7%  7%  5%
    [libx264 @ 0x564c9da28540] i8c dc,h,v,p: 83%  5% 11%  1%
    [libx264 @ 0x564c9da28540] Weighted P-Frames: Y:0.0% UV:0.0%
    [libx264 @ 0x564c9da28540] ref P L0: 52.8%  7.6% 24.0% 15.6%
    [libx264 @ 0x564c9da28540] ref B L0: 72.2% 25.3%  2.4%
    [libx264 @ 0x564c9da28540] ref B L1: 97.3%  2.7%
    [libx264 @ 0x564c9da28540] kb/s:4089.76
    [aac @ 0x564c9da29bc0] Qavg: 65536.000
    

    MJPEG camera restream output

    $ ffmpeg -i 'http://admin:@192.168.0.65/media/?action=stream' -re -f lavfi -i anullsrc -c:v libx264 -vf format=yuv420p -b:v 4000k -bufsize 8000k -maxrate 4000k -g 50 -c:a aac -flags +global_header -f flv 'rtmp://192.168.0.91/live?p=[streamid]/[streamkey]'
    
    ffmpeg version 4.2.1-0york0~18.04.1 Copyright (c) 2000-2019 the FFmpeg developers
      built with gcc 7 (Ubuntu 7.4.0-1ubuntu1~18.04.1)
      configuration: --prefix=/usr --extra-version='0york0~18.04.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-opengl --enable-sdl2 --enable-nonfree --enable-libfdk-aac --enable-libdc1394 --enable-libdrm --enable-libiec61883 --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, mpjpeg, from 'http://admin:@192.168.0.65/media/?action=stream':
      Duration: N/A, bitrate: N/A
        Stream #0:0: Video: mjpeg (Baseline), yuvj420p(pc, bt470bg/unknown/unknown), 1280x720 [SAR 1:1 DAR 16:9], 25 tbr, 25 tbn, 25 tbc
    Input #1, lavfi, from 'anullsrc':
      Duration: N/A, start: 0.000000, bitrate: 705 kb/s
        Stream #1:0: Audio: pcm_u8, 44100 Hz, stereo, u8, 705 kb/s
    Stream mapping:
      Stream #0:0 -> #0:0 (mjpeg (native) -> h264 (libx264))
      Stream #1:0 -> #0:1 (pcm_u8 (native) -> aac (native))
    Press [q] to stop, [?] for help
    [swscaler @ 0x55b731e022c0] deprecated pixel format used, make sure you did set range correctly
    [libx264 @ 0x55b731db6400] using SAR=1/1
    [libx264 @ 0x55b731db6400] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
    [libx264 @ 0x55b731db6400] profile High, level 3.1
    [libx264 @ 0x55b731db6400] 264 - core 155 r2917 0a84d98 - H.264/MPEG-4 AVC codec - Copyleft 2003-2018 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 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=1 weightb=1 open_gop=0 weightp=2 keyint=50 keyint_min=5 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=cbr mbtree=1 bitrate=4000 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 vbv_maxrate=4000 vbv_bufsize=8000 nal_hrd=none filler=0 ip_ratio=1.40 aq=1:1.00
    Output #0, flv, to 'rtmp://192.168.0.91/live?p=618a569164672a82c0303495387593f0/5db8eeea4be0b':
      Metadata:
        encoder         : Lavf58.29.100
        Stream #0:0: Video: h264 (libx264) ([7][0][0][0] / 0x0007), yuv420p(progressive), 1280x720 [SAR 1:1 DAR 16:9], q=-1--1, 4000 kb/s, 25 fps, 1k tbn, 25 tbc
        Metadata:
          encoder         : Lavc58.54.100 libx264
        Side data:
          cpb: bitrate max/min/avg: 4000000/0/4000000 buffer size: 8000000 vbv_delay: -1
        Stream #0:1: Audio: aac (LC) ([10][0][0][0] / 0x000A), 44100 Hz, stereo, fltp, 128 kb/s
        Metadata:
          encoder         : Lavc58.54.100 aac
    [flv @ 0x55b731db51c0] Failed to update header with correct duration.404.3kbits/s speed=0.119x          
    [flv @ 0x55b731db51c0] Failed to update header with correct filesize.
    frame=  157 fps=4.2 q=-1.0 Lsize=    3178kB time=00:00:06.16 bitrate=4225.8kbits/s speed=0.163x    
    video:3170kB audio:1kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.207686%
    [libx264 @ 0x55b731db6400] frame I:4     Avg QP:18.14  size:125881
    [libx264 @ 0x55b731db6400] frame P:41    Avg QP:21.52  size: 43972
    [libx264 @ 0x55b731db6400] frame B:112   Avg QP:23.61  size:  8388
    [libx264 @ 0x55b731db6400] consecutive B-frames:  4.5%  1.3%  0.0% 94.3%
    [libx264 @ 0x55b731db6400] mb I  I16..4:  0.3% 98.2%  1.5%
    [libx264 @ 0x55b731db6400] mb P  I16..4:  0.1%  3.8%  0.0%  P16..4: 42.6% 27.2% 20.2%  0.0%  0.0%    skip: 6.1%
    [libx264 @ 0x55b731db6400] mb B  I16..4:  0.0%  0.4%  0.0%  B16..8: 34.2%  3.0%  0.7%  direct: 5.4%  skip:56.2%  L0:52.0% L1:42.1% BI: 5.8%
    [libx264 @ 0x55b731db6400] 8x8 transform intra:98.2% inter:75.5%
    [libx264 @ 0x55b731db6400] coded y,uvDC,uvAC intra: 93.0% 90.0% 55.7% inter: 27.5% 35.0% 1.5%
    [libx264 @ 0x55b731db6400] i16 v,h,dc,p: 94%  0%  2%  4%
    [libx264 @ 0x55b731db6400] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 20% 11% 18%  5%  9% 14%  6%  6% 12%
    [libx264 @ 0x55b731db6400] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 35%  9%  8%  5%  9% 15%  6%  5%  9%
    [libx264 @ 0x55b731db6400] i8c dc,h,v,p: 56% 17% 20%  7%
    [libx264 @ 0x55b731db6400] Weighted P-Frames: Y:0.0% UV:0.0%
    [libx264 @ 0x55b731db6400] ref P L0: 32.1%  8.0% 47.4% 12.5%
    [libx264 @ 0x55b731db6400] ref B L0: 63.3% 29.5%  7.3%
    [libx264 @ 0x55b731db6400] ref B L1: 93.6%  6.4%
    [libx264 @ 0x55b731db6400] kb/s:4134.76
    [aac @ 0x55b731db87c0] Qavg: 65536.000
    Exiting normally, received signal 2.
    

    Edit 4: sort of working command I've managed to get things sort of stable with the following command, maybe someone could explain why this would actually work...

    ffmpeg \
     -y -r 4.2 \
     -i "http://admin:@192.168.0.$1/media/?action=stream" \
     -re -f lavfi -i anullsrc \
     -c:v libx264 -vf format=yuv420p -b:v 4000k -bufsize 8000k -maxrate 4000k -g 50 \
     -c:a aac \
     -filter:v fps=fps=25 \
     -f flv "rtmp://a.rtmp.youtube.com/live2/[streamkey]" 
    

    when running this command the output stream is actually running at 24fps instead of 4fps

    frame= 577 fps=4.2 q=24.8 Lsize= 994kB time=00:00:23.04 bitrate= 353.6kbits/s speed=0.167x

    vs

    frame= 406 fps= 24 q=-1.0 Lsize= 7967kB time=00:00:16.12 bitrate=4048.5kbits/s speed=0.951x

    • Haxor
      Haxor over 4 years
      Just added the full output
  • Haxor
    Haxor over 4 years
    Currently running a test with your parameters (had to make a small change to get it running *-re -f lavfi -i anullsrc * ) however seems to be giving the same results... Will post the new output in a little.
  • Haxor
    Haxor over 4 years
    just posted the new log file, really appreciate your help!
  • Haxor
    Haxor over 4 years
    Thanks for the tip, didn't notice I was running an older version but that has been updated now. The issue still remains the same in version 4.2.1. Also tried with a synthetic video and that works just fine, so I guess the issue seems to be on the source side of the parameters (or the transcoding of MJPEG?).
  • Haxor
    Haxor over 4 years
    Just did some more testing and it appears it's definitely on the input side of things. When I test to output to an mp4 file I'm getting the same results 4fps and everything. Any clue to what might be causing this?
  • Elisa Cha Cha
    Elisa Cha Cha over 4 years
    @Haxor Where do you see 4 fps?
  • Haxor
    Haxor over 4 years
    When running the line states frame= 157 fps=4.2 q=-1.0 Lsize= 3178kB time=00:00:06.16 bitrate=4225.8kbits/s speed=0.163x. This made me think that it was on the input side of things... after running some test i figured out a command that actually runs stable(ish). however my knowledge of ffmpeg isn't good enough to explain why this is actually working... Maybe you could explain? i've edited the post with the new command