1

2 FFMPEG process

(1) generating a ffmpeg x11grab to a .mp4 (2) take the .mp4 and restream it simultaneously to multiple rtmp endpoints

ISSUE the generated file in (1) have this error "moov atom not found"

This is the command that generate (1) :

ffmpeg -re -y -f x11grab -draw_mouse 0 -framerate 30 
-video_size $RESOLUTION -i :$DISPLAY_NUM -c:a aac -c:v libx264 
-movflags +faststart -preset ultrafast -crf 28 -refs 4 -qmin 4 
-pix_fmt yuv420p -filter:v fps=30 file.mp4

in the (2) => when I try to ffmpeg -i file.mp4 output somewhere: I get "moov atom not found" so the (2) can't read or open (1).

What I'm I missing

in (1) -movflags +faststart doesn't seem to fix the issue

••••••• EDIT : more details on the context ••••••

I'm using openvidu : webrtc with kurento and coturn.

The record feature creates a .mp4 on the fly as the chat is going on.

To start the recording, there is an API call i can make to my server and it automatically stops when all users leaves the chatroom OR do an other api call to stop. see composed video in this link https://docs.openvidu.io/en/2.17.0/advanced-features/recording/

openvidu have also webhooks.

My problem is not how to stop ffmpeg, but getting FFMPEG to encode while the mp4 or other is being generated "on the fly".

There is 2 options :

OPTION 1: individual => 1 .webm per camare => this .webm ffmpeg can restream as hls or RTMP => it's working.

OPTION 2: ** but the issue is with "Composed" video => it's using ffmpeg to x11grab the session... but it's mp4 without moov ato, so ffmpeg don't do anything with this.

see the composed.sh script here https://github.com/OpenVidu/openvidu/blob/master/openvidu-server/docker/openvidu-recording/scripts/composed.sh

***************** EDIT 3 *************

in the .sh this is the part that is creating the mp4

ffmpeg -y -f alsa -i pulse -f x11grab -draw_mouse 0 -framerate $FRAMERATE -video_size $RESOLUTION -i :$DISPLAY_NUM -c:a aac -c:v libx264 -preset ultrafast -crf 28 -refs 4 -qmin 4 -pix_fmt yuv420p -filter:v fps=$FRAMERATE "/recordings/$VIDEO_ID/$VIDEO_NAME.$VIDEO_FORMAT"

How can I modify this to have better result example VP8 or VP9 with good quality .webm so that the ffpmeg second command(2) can encode it live...

**** EDIT 4 ********

I tried this it worked for 30 seconds and suddenly stopped

    <./stop ffmpeg -y -f alsa -i pulse -f 
x11grab -draw_mouse 0 -framerate $FRAMERATE 
-video_size $RESOLUTION -i :$DISPLAY_NUM 
-c:v libx264 -b:v 1396k -b:a 128k -ar 44100 -maxrate 1369k 
-pix_fmt yuv420p -preset veryfast -tune zerolatency 
-c:a aac -ac 2 -profile:v main -flags -global_header 
-bufsize 969k -hls_time 1 -hls_list_size 0 -g 30 
-start_number 0 -streaming 1 -hls_playlist 1 
-lhls 1 -hls_playlist_type event -f hls "/recordings/$VIDEO_ID/$VIDEO_NAME".m3u8


N: [pulseaudio] main.c: Running in system mode, forcibly disabling SHM mode.
N: [pulseaudio] main.c: Running in system mode, forcibly disabling exit idle time.
Display in use -> :99
----------------------------------------
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
Guessed Channel Layout for Input Stream #0.0 : stereo
Input #0, alsa, from 'pulse':
  Duration: N/A, start: 1617150428.783763, bitrate: 1536 kb/s
    Stream #0:0: Audio: pcm_s16le, 48000 Hz, stereo, s16, 1536 kb/s
[x11grab @ 0x55e88a4e8780] Stream #0: not enough frames to estimate rate; consider increasing probesize
Input #1, x11grab, from ':99':
  Duration: N/A, start: 1617150428.837799, bitrate: N/A
    Stream #1:0: Video: rawvideo (BGR[0] / 0x524742), bgr0, 1920x1080, 30 fps, 1000k tbr, 1000k tbn, 1000k tbc
Stream mapping:
  Stream #1:0 -> #0:0 (rawvideo (native) -> h264 (libx264))
  Stream #0:0 -> #0:1 (pcm_s16le (native) -> aac (native))
Press [q] to stop, [?] for help
[libx264 @ 0x55e88a4f70c0] max bitrate less than average bitrate, assuming CBR
[libx264 @ 0x55e88a4f70c0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2 AVX512
[libx264 @ 0x55e88a4f70c0] profile Main, level 4.0
[alsa @ 0x55e88a4c2e40] Thread message queue blocking; consider raising the thread_queue_size option (current value: 8)
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec133903625619940.ts' for writing
Output #0, hls, to '/recordings/13391978436095-2/rec13390362561994.m3u8':
  Metadata:
    encoder         : Lavf58.29.100
    Stream #0:0: Video: h264 (libx264), yuv420p(progressive), 1920x1080, q=-1--1, 1396 kb/s, 30 fps, 90k tbn, 30 tbc
    Metadata:
      encoder         : Lavc58.54.100 libx264
    Side data:
      cpb: bitrate max/min/avg: 1369000/0/1396000 buffer size: 969000 vbv_delay: -1
    Stream #0:1: Audio: aac (LC), 44100 Hz, stereo, fltp, 128 kb/s
    Metadata:
      encoder         : Lavc58.54.100 aac
frame=   16 fps=0.0 q=21.0 size=N/A time=00:00:00.53 bitrate=N/A speed=1.06x    
frame=   31 fps= 31 q=16.0 size=N/A time=00:00:01.03 bitrate=N/A speed=1.02x    
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec13390362561994.m3u8.tmp' for writing
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec133903625619941.ts' for writing
frame=   47 fps= 31 q=21.0 size=N/A time=00:00:01.56 bitrate=N/A speed=1.03x    
frame=   62 fps= 30 q=22.0 size=N/A time=00:00:02.06 bitrate=N/A speed=1.02x    
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec13390362561994.m3u8.tmp' for writing
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec133903625619942.ts' for writing
frame=   77 fps= 30 q=24.0 size=N/A time=00:00:02.56 bitrate=N/A speed=1.01x    
frame=   92 fps= 30 q=22.0 size=N/A time=00:00:03.06 bitrate=N/A speed=0.999x    
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec13390362561994.m3u8.tmp' for writing
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec133903625619943.ts' for writing
frame=  108 fps= 30 q=29.0 size=N/A time=00:00:03.60 bitrate=N/A speed=   1x    
frame=  124 fps= 30 q=21.0 size=N/A time=00:00:04.13 bitrate=N/A speed=1.01x    
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec13390362561994.m3u8.tmp' for writing
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec133903625619944.ts' for writing
frame=  139 fps= 30 q=20.0 size=N/A time=00:00:04.63 bitrate=N/A speed=1.01x    
frame=  154 fps= 30 q=18.0 size=N/A time=00:00:05.13 bitrate=N/A speed=   1x    
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec13390362561994.m3u8.tmp' for writing
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec133903625619945.ts' for writing
frame=  169 fps= 30 q=19.0 size=N/A time=00:00:05.63 bitrate=N/A speed=   1x    
frame=  185 fps= 30 q=19.0 size=N/A time=00:00:06.16 bitrate=N/A speed=1.01x    
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec13390362561994.m3u8.tmp' for writing
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec133903625619946.ts' for writing
frame=  199 fps= 30 q=20.0 size=N/A time=00:00:06.63 bitrate=N/A speed=   1x    
frame=  215 fps= 30 q=19.0 size=N/A time=00:00:07.16 bitrate=N/A speed=   1x    
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec13390362561994.m3u8.tmp' for writing
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec133903625619947.ts' for writing
frame=  230 fps= 30 q=19.0 size=N/A time=00:00:07.66 bitrate=N/A speed=   1x    
frame=  242 fps= 30 q=18.0 size=N/A time=00:00:08.06 bitrate=N/A speed=0.99x    
frame=  254 fps= 29 q=17.0 size=N/A time=00:00:08.46 bitrate=N/A speed=0.979x    
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec13390362561994.m3u8.tmp' for writing
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec133903625619948.ts' for writing
frame=  276 fps= 30 q=17.0 size=N/A time=00:00:09.20 bitrate=N/A speed=1.01x    
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec13390362561994.m3u8.tmp' for writing
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec133903625619949.ts' for writing
frame=  290 fps= 30 q=21.0 size=N/A time=00:00:09.66 bitrate=N/A speed=   1x    
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec13390362561994.m3u8.tmp' for writing
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec1339036256199410.ts' for writing
frame=  306 fps= 30 q=31.0 size=N/A time=00:00:10.20 bitrate=N/A speed=   1x    
frame=  322 fps= 30 q=21.0 size=N/A time=00:00:10.73 bitrate=N/A speed=   1x    
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec13390362561994.m3u8.tmp' for writing
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec1339036256199411.ts' for writing
frame=  337 fps= 30 q=21.0 size=N/A time=00:00:11.23 bitrate=N/A speed=   1x    
frame=  352 fps= 30 q=19.0 size=N/A time=00:00:11.73 bitrate=N/A speed=   1x    
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec13390362561994.m3u8.tmp' for writing
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec1339036256199412.ts' for writing
frame=  367 fps= 30 q=19.0 size=N/A time=00:00:12.23 bitrate=N/A speed=   1x    
frame=  382 fps= 30 q=18.0 size=N/A time=00:00:12.73 bitrate=N/A speed=   1x    
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec13390362561994.m3u8.tmp' for writing
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec1339036256199413.ts' for writing
frame=  397 fps= 30 q=18.0 size=N/A time=00:00:13.23 bitrate=N/A speed=   1x    
frame=  412 fps= 30 q=18.0 size=N/A time=00:00:13.73 bitrate=N/A speed=   1x    
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec13390362561994.m3u8.tmp' for writing
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec1339036256199414.ts' for writing
frame=  428 fps= 30 q=18.0 size=N/A time=00:00:14.26 bitrate=N/A speed=   1x    
frame=  443 fps= 30 q=17.0 size=N/A time=00:00:14.76 bitrate=N/A speed=   1x    
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec13390362561994.m3u8.tmp' for writing
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec1339036256199415.ts' for writing
frame=  458 fps= 30 q=18.0 size=N/A time=00:00:15.26 bitrate=N/A speed=   1x    
frame=  474 fps= 30 q=17.0 size=N/A time=00:00:15.80 bitrate=N/A speed=   1x    
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec13390362561994.m3u8.tmp' for writing
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec1339036256199416.ts' for writing
frame=  489 fps= 30 q=18.0 size=N/A time=00:00:16.30 bitrate=N/A speed=   1x    
frame=  504 fps= 30 q=17.0 size=N/A time=00:00:16.80 bitrate=N/A speed=   1x    
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec13390362561994.m3u8.tmp' for writing
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec1339036256199417.ts' for writing
frame=  520 fps= 30 q=20.0 size=N/A time=00:00:17.33 bitrate=N/A speed=   1x    
frame=  535 fps= 30 q=18.0 size=N/A time=00:00:17.83 bitrate=N/A speed=   1x    
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec13390362561994.m3u8.tmp' for writing
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec1339036256199418.ts' for writing
frame=  551 fps= 30 q=20.0 size=N/A time=00:00:18.36 bitrate=N/A speed=   1x    
frame=  566 fps= 30 q=19.0 size=N/A time=00:00:18.86 bitrate=N/A speed=   1x    
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec13390362561994.m3u8.tmp' for writing
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec1339036256199419.ts' for writing
frame=  581 fps= 30 q=20.0 size=N/A time=00:00:19.36 bitrate=N/A speed=   1x    
frame=  596 fps= 30 q=19.0 size=N/A time=00:00:19.86 bitrate=N/A speed=   1x    
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec13390362561994.m3u8.tmp' for writing
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec1339036256199420.ts' for writing
frame=  612 fps= 30 q=21.0 size=N/A time=00:00:20.40 bitrate=N/A speed=   1x    
frame=  626 fps= 30 q=20.0 size=N/A time=00:00:20.86 bitrate=N/A speed=   1x    
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec13390362561994.m3u8.tmp' for writing
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec1339036256199421.ts' for writing
frame=  641 fps= 30 q=21.0 size=N/A time=00:00:21.37 bitrate=N/A speed=   1x    
frame=  657 fps= 30 q=35.0 size=N/A time=00:00:21.90 bitrate=N/A speed=   1x    
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec13390362561994.m3u8.tmp' for writing
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec1339036256199422.ts' for writing
frame=  672 fps= 30 q=33.0 size=N/A time=00:00:22.40 bitrate=N/A speed=   1x    
frame=  687 fps= 30 q=23.0 size=N/A time=00:00:22.90 bitrate=N/A speed=   1x    
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec13390362561994.m3u8.tmp' for writing
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec1339036256199423.ts' for writing
frame=  703 fps= 30 q=23.0 size=N/A time=00:00:23.43 bitrate=N/A speed=   1x    
frame=  718 fps= 30 q=25.0 size=N/A time=00:00:23.93 bitrate=N/A speed=   1x    
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec13390362561994.m3u8.tmp' for writing
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec1339036256199424.ts' for writing
frame=  733 fps= 30 q=27.0 size=N/A time=00:00:24.44 bitrate=N/A speed=   1x    
frame=  749 fps= 30 q=26.0 size=N/A time=00:00:24.96 bitrate=N/A speed=   1x    
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec13390362561994.m3u8.tmp' for writing
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec1339036256199425.ts' for writing
frame=  764 fps= 30 q=28.0 size=N/A time=00:00:25.46 bitrate=N/A speed=   1x    
frame=  780 fps= 30 q=27.0 size=N/A time=00:00:26.00 bitrate=N/A speed=   1x    
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec13390362561994.m3u8.tmp' for writing
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec1339036256199426.ts' for writing
frame=  795 fps= 30 q=27.0 size=N/A time=00:00:26.50 bitrate=N/A speed=   1x    
frame=  810 fps= 30 q=26.0 size=N/A time=00:00:27.00 bitrate=N/A speed=   1x    
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec13390362561994.m3u8.tmp' for writing
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec1339036256199427.ts' for writing
frame=  825 fps= 30 q=29.0 size=N/A time=00:00:27.50 bitrate=N/A speed=   1x    
[hls @ 0x55e88a4f3040] Opening '/recordings/13391978436095-2/rec13390362561994.m3u8.tmp' for writing
frame=  840 fps= 30 q=30.0 Lsize=N/A time=00:00:28.01 bitrate=N/A speed=   1x    
video:4635kB audio:404kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
[libx264 @ 0x55e88a4f70c0] frame I:42    Avg QP:12.88  size: 28020
[libx264 @ 0x55e88a4f70c0] frame P:798   Avg QP:13.11  size:  4473
[libx264 @ 0x55e88a4f70c0] mb I  I16..4: 88.4%  0.0% 11.6%
[libx264 @ 0x55e88a4f70c0] mb P  I16..4:  6.6%  0.0%  0.4%  P16..4:  6.6%  1.9%  0.6%  0.0%  0.0%    skip:83.8%
[libx264 @ 0x55e88a4f70c0] coded y,uvDC,uvAC intra: 18.8% 20.1% 10.1% inter: 1.7% 2.4% 0.1%
[libx264 @ 0x55e88a4f70c0] i16 v,h,dc,p: 55% 30% 12%  4%
[libx264 @ 0x55e88a4f70c0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 29% 27% 31%  2%  3%  2%  2%  1%  2%
[libx264 @ 0x55e88a4f70c0] i8c dc,h,v,p: 77%  9% 12%  1%
[libx264 @ 0x55e88a4f70c0] Weighted P-Frames: Y:1.1% UV:0.1%
[libx264 @ 0x55e88a4f70c0] kb/s:1355.98
[aac @ 0x55e88a4f8440] Qavg: 40876.258
jq: error (at <stdin>:1): Cannot iterate over null (null)
jq: error (at <stdin>:1): Cannot iterate over null (null)
jq: error (at <stdin>:1): null (null) cannot be parsed as a number
jq: error (at <stdin>:1): null (null) cannot be parsed as a number
jq: error: syntax error, unexpected '|' (Unix shell quoting issues?) at <top-level>, line 1:
.hasAudio=false | .hasVideo=false | .duration= | .size= | .status="failed"                                               
jq: 1 compile error
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
Invalid duration specification for ss: -i

***** Edit 5 **********

no mather what format I choose, it stops after 20 to 30 secs. the same line with .webm .mov .264 when it's not .mp4 ffmpeg seems to drop

Jintor
  • 607
  • 8
  • 32
  • The **moov atom** is written when the grabbing process ends. In case FFmpeg process is not properly closed, the moov atom is not going to be written to the file. In case you know the time from advance, add `-t` argument. If you don't know the time from advance, don't use `mp4` container. – Rotem Mar 28 '21 at 20:01
  • @Rotem what container would be a better fit (that is in H264) mkv, webm or other? – Jintor Mar 28 '21 at 21:57
  • I would have used H.264 elementary stream, and add the container later (use `file.264`). There is probably a better solution - closing FFmpeg in a tight manner (I never looked for it...) – Rotem Mar 28 '21 at 22:50
  • @Rotem I'll do some testing ;) – Jintor Mar 28 '21 at 23:04
  • It looks like the solution is sending FFmpeg a **SIGINT** signal when stop grabbing. See [How to stop ffmpeg remotely?](https://stackoverflow.com/questions/9722624/how-to-stop-ffmpeg-remotely). And [How can I stop ffmpeg screen recording correctly?](https://stackoverflow.com/questions/58058263/how-can-i-stop-ffmpeg-screen-recording-correctly). Most [examples](https://trac.ffmpeg.org/wiki/Capture/Desktop) use MKV container. – Rotem Mar 29 '21 at 08:01
  • @Rotem the .mp4 is being generated during a video chat session recorded, the goal is to encode as it's being generated (not to wait until finish to be able to stream it) that's why the "-re" part that is reading a input source framerate – Jintor Mar 29 '21 at 13:50
  • I recommend using a standard MPEG2 Transport Stream (mpegts or mpegtsraw) output format. MPEG-TS is self synchronizing, so you can actually cut it at any aribitrary byte, yet a demuxer will always be able to latch on a MPEG-TS stream, as long as it's valid. – datenwolf Mar 29 '21 at 14:16
  • How are you stopping the ffmpeg process? – llogan Mar 29 '21 at 17:02
  • @llogan what do you mean by "stopping the ffmpeg process" ? Here; I start this ffmpeg command in a shell and the ffmpeg log says "moov atom not found" and no conversions is happening – Jintor Mar 30 '21 at 00:05
  • How are you stopping/quitting/exiting/closing ffmpeg when you are done recording the screen? As Rotem mentioned the problem is with how you are stopping ffmpeg. – llogan Mar 30 '21 at 01:48
  • @llogan see the edit : I added how the .mp4 is being generated, the context in much more details – Jintor Mar 30 '21 at 03:11
  • @llogan Hi, I added in the question ***edit 3 => I have access to change this composed.sh script. What codec would be better to use VP8 or VP9 or any better format than .mp4 or .mov that needs a atom.... – Jintor Mar 31 '21 at 00:13
  • @llogan Edit 4 : I tried to hls, but it stopped, what can I change in this line – Jintor Mar 31 '21 at 00:36
  • @llogan Edit 5 : when I change to .mov with the original ffmpeg command it stops, I retry with .mp4 it's stable and continues, is there a ffmpeg option to "force it" to stay alive and continues to convert ??? – Jintor Mar 31 '21 at 01:37
  • @llogan I found a working solution, see my answer – Jintor Apr 03 '21 at 00:00

1 Answers1

1

With those changes, I'm able to acheive 3 to 4 stable delay ;)

LINE 79 of

https://github.com/OpenVidu/openvidu/blob/master/openvidu-server/docker/openvidu-recording/scripts/composed.sh

I REPLACED

-c:a aac -c:v libx264 -preset ultrafast -crf 28 -refs 4 -qmin 4 -pix_fmt yuv420p

WITH

-c:a aac -c:v libx264 -movflags +dash 
-preset ultrafast -crf 28 -refs 4 -qmin 4 
-pix_fmt yuv420p -tune zerolatency -c:a aac -ac 2 
-profile:v main -flags -global_header 
-bufsize 969k -hls_time 2 -hls_list_size 0 -g 30 
-start_number 0 -streaming 1 -hls_playlist 1 
-lhls 1 -hls_playlist_type event -f hls

Notes

-movflags +dash => helped somehow (I don't have a full explication, but I noticed a mini difference that helped...)

-tune zerolatency => ffmpeg x264 preset made for streaming

-profile:v main => profile main is specialized for streaming too

-lhls 1 => enables Low Latency HLS

***** ALSO I HAD TO WAIT FOR THE MP4 TO APPEAR TO CREATE A SYMLINC IN M3U8 to be playable in safari

while [ ! -f __path_to.mp4 ] ; do sleep 1 ; done ; ln -s __path_to.mp4 __path_to.m3u8;

********** IMPORTANT NOTES in this special case : the ffmpeg final extension HAVE to remain .mp4 because if I change it to .m3u8 ===>> I really don't know why, but it stops after few seconds (maybe because of x11grab ???)

••••• FOR THE CODE OF THE PLAYER SEE THIS : hls.js starting a beginning with ANDROID mobile (chrome, webview also) and not live *** but works very nice in deskto, ios .. hls.js 1.0.0 2021-04-01

Jintor
  • 607
  • 8
  • 32
  • !! I corrected a few lines -- and the .mp4 was a openvidu script that was "watching" for a not empty .mp4 after 30 seconds... my modif : https://github.com/jintor/openvidu_hld_composer.sh/blob/main/composed.sh – Jintor Nov 23 '21 at 22:16