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

ffmpegstreamingvideo streamingvlc-media-player

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

Best Answer

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.
Related Question