Using ffmpeg to (re)stream camera feed to RTMP server
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 videos on Youtube
Haxor
Updated on September 18, 2022Comments
-
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 over 4 yearsJust added the full output
-
-
Haxor over 4 yearsCurrently 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 over 4 yearsjust posted the new log file, really appreciate your help!
-
Haxor over 4 yearsThanks 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 over 4 yearsJust 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 over 4 years@Haxor Where do you see 4 fps?
-
Haxor over 4 yearsWhen 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