
Recherche avancée
Autres articles (13)
-
Publier sur MédiaSpip
13 juin 2013Puis-je poster des contenus à partir d’une tablette Ipad ?
Oui, si votre Médiaspip installé est à la version 0.2 ou supérieure. Contacter au besoin l’administrateur de votre MédiaSpip pour le savoir -
Emballe médias : à quoi cela sert ?
4 février 2011, parCe plugin vise à gérer des sites de mise en ligne de documents de tous types.
Il crée des "médias", à savoir : un "média" est un article au sens SPIP créé automatiquement lors du téléversement d’un document qu’il soit audio, vidéo, image ou textuel ; un seul document ne peut être lié à un article dit "média" ; -
Les autorisations surchargées par les plugins
27 avril 2010, parMediaspip core
autoriser_auteur_modifier() afin que les visiteurs soient capables de modifier leurs informations sur la page d’auteurs
Sur d’autres sites (4254)
-
FFmpeg throws exception while process the commands
4 juin 2014, par Arslan AhmadI am executing commands through process but it always throw this error anyone help me ?
FFMPEGCommand :
String[] ffmpegCommand = {"/data/data/com.example.app/ffmpeg", "-r", ""+VIDEO_FRAME_RATE, "-b", "1000", "-vcodec", "mjpeg", "-i", Environment.getExternalStorageDirectory().getPath() + "/com.example.app/frame_%05d.jpg", Environment.getExternalStorageDirectory().getPath() + "/video.mov"};
ffmpegProcess = new ProcessBuilder(ffmpegCommand).redirectErrorStream(true).start();
W/System.err(29844): java.io.IOException: Error running exec(). Command: [/data/data/com.example.app/ffmpeg, -r, 18, -b, 1000, -vcodec, mjpeg, -i, /storage/emulated/0/com.example.app/frame_%05d.jpg, /storage/emulated/0/video.mov] Working Directory: null Environment: [ANDROID_ROOT=/system, EMULATED_STORAGE_SOURCE=/mnt/shell/emulated, LOOP_MOUNTPOINT=/mnt/obb, EMULATED_STORAGE_TARGET=/storage/emulated, ANDROID_BOOTLOGO=1, LD_LIBRARY_PATH=/vendor/lib:/system/lib, EXTERNAL_STORAGE=/storage/emulated/legacy, ANDROID_SOCKET_zygote=11, ANDROID_DATA=/data, PATH=/sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin, ANDROID_ASSETS=/system/app, ASEC_MOUNTPOINT=/mnt/asec, BOOTCLASSPATH=/system/framework/core.jar:/system/framework/conscrypt.jar:/system/framework/okhttp.jar:/system/framework/core-junit.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/framework2.jar:/system/framework/telephony-common.jar:/system/framework/voip-common.jar:/system/framework/mms-common.jar:/system/framework/android.policy.jar:/system/framework/services.jar:/system/framework/apache-xml.jar:/system/framework/webviewchromium.jar:/system/framework/oem-services.jar:/system/framework/qcmediaplayer.jar, ANDROID_PROPERTY_WORKSPACE=9,0, ANDROID_STORAGE=/storage]
06-02 12:21:36.660: W/System.err(29844): at java.lang.ProcessManager.exec(ProcessManager.java:211)
06-02 12:21:36.660: W/System.err(29844): at java.lang.ProcessBuilder.start(ProcessBuilder.java:195)
06-02 12:21:36.662: W/System.err(29844): at com.example.app.FFMPEGRecorderActivity$ProcessVideo.doInBackground(FFMPEGRecorderActivity.java:1448)
06-02 12:21:36.662: W/System.err(29844): at com.example.app.FFMPEGRecorderActivity$ProcessVideo.doInBackground(FFMPEGRecorderActivity.java:1)
06-02 12:21:36.662: W/System.err(29844): at android.os.AsyncTask$2.call(AsyncTask.java:288)
06-02 12:21:36.663: W/System.err(29844): at java.util.concurrent.FutureTask.run(FutureTask.java:237)
06-02 12:21:36.663: W/System.err(29844): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
06-02 12:21:36.663: W/System.err(29844): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
06-02 12:21:36.663: W/System.err(29844): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
06-02 12:21:36.663: W/System.err(29844): at java.lang.Thread.run(Thread.java:841)
06-02 12:21:36.664: W/System.err(29844): Caused by: java.io.IOException: No such file or directory
06-02 12:21:36.665: W/System.err(29844): at java.lang.ProcessManager.exec(Native Method)
06-02 12:21:36.666: W/System.err(29844): at java.lang.ProcessManager.exec(ProcessManager.java:209)
06-02 12:21:36.667: W/System.err(29844): ... 9 more -
Batch concatenate pairs of videos
19 février 2021, par dellyiceI have a directory with 1000+ video files. I'd like to concatenate them two-by-two.


An alphabetical ordering of the files give the desired pairs, e.g., the input files


filename_1.mp4
 filename_2.mp4
 filename_3.mp4
 filename_4.mp4
 ...



should result in output files


filename_1-2.mp4
 filename_3-4.mp4
 ...



They input files all have the same dimensions and formats.


How can I write a batch script invoking
ffmpeg
to achieve this ?

-
FFmpeg stream stops after a certain time
7 avril 2021, par AnarnoWe have a little Nodejs app, which starts a stream process, with a
child_process.spawn
. On the client-side, we have an HTML5-canvas element, which records the video datanew MediaRecorder(canvas.captureStream(30), config)
, then this client sends its data to our Nodejs server over a WebSocket connection. We using FFmpeg for video encoding and decoding, then we send the data to our 3-rd party service (MUX), which accepts the stream and broadcasts them. Sadly the process continuously loses its fps, and after in general 1 minute, stops with an interesting error code. (when we save the video result locally instead of streaming viartmps
, it works perfectly.

*The whole system is in docker.


The error :


stderr: [tls @ 0x7f998e7bca40] Error in the pull function.
Our_app_logs: | av_interleaved_write_frame(): I/O error 
Our_app_logs: | [flv @ 0x7f998eeb1680] Failed to update header with correct duration.
Our_app_logs: | [flv @ 0x7f998eeb1680] Failed to update header with correct filesize.
Our_app_logs: | Error writing trailer of rtmps://global-live.mux.com/app/94e85197-78a3-f092-3437-03d93aba74e0: I/O error
Our_app_logs: | <buffer 5b="5b" 74="74" 6c="6c" 73="73" 20="20" 40="40" 30="30" 78="78" 37="37" 66="66" 39="39" 38="38" 65="65" 62="62" 63="63" 61="61" 34="34" 5d="5d" 45="45" 72="72" 6f="6f" 69="69" 6e="6e" 68="68" 70="70" 75="75" 2e="2e">
Our_app_logs: | stderr: frame= 1478 fps= 25 q=23.0 Lsize= 
 402kB time=00:01:02.89 bitrate= 52.4kbits/s speed=1.05x
Our_app_logs: | video:369kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 9.034639%
Our_app_logs: | <buffer 66="66" 72="72" 61="61" 6d="6d" 65="65" 3d="3d" 20="20" 31="31" 34="34" 37="37" 38="38" 70="70" 73="73" 32="32" 35="35" 71="71" 33="33" 2e="2e" 30="30" 4c="4c" 69="69" 7a="7a" 6b="6b" 42="42" 74="74">
Our_app_logs: | stderr: [tls @ 0x7f998e7bca40] <buffer 5b="5b" 6c="6c" 73="73" 20="20" 40="40" 30="30" 78="78" 37="37" 66="66" 39="39" 38="38" 65="65" 62="62" 63="63" 61="61" 34="34" 5d="5d"> 
Our_app_logs: | stderr: The specified session has been invalidated for some reason.
Our_app_logs: | <buffer 54="54" 68="68" 65="65" 20="20" 73="73" 70="70" 63="63" 69="69" 66="66" 64="64" 6f="6f" 6e="6e" 61="61" 62="62" 76="76" 6c="6c" 74="74" 72="72" 6d="6d">
Our_app_logs: | stderr: Last message repeated 1 times 
Our_app_logs: | <buffer 20="20" 4c="4c" 61="61" 73="73" 74="74" 6d="6d" 65="65" 67="67" 72="72" 70="70" 64="64" 31="31" 69="69" 0a="0a"> 
Our_app_logs: | stderr: [libx264 @ 0x7f998e790080] <buffer 5b="5b" 6c="6c" 69="69" 62="62" 78="78" 32="32" 36="36" 34="34" 20="20" 40="40" 30="30" 37="37" 66="66" 39="39" 38="38" 65="65" 5d="5d">
Our_app_logs: | stderr: frame I:13 Avg QP: 5.39 size: 
2478
Our_app_logs: | <buffer 66="66" 72="72" 61="61" 6d="6d" 65="65" 20="20" 49="49" 3a="3a" 31="31" 33="33" 41="41" 76="76" 67="67" 51="51" 50="50" 35="35" 2e="2e" 39="39" 73="73" 69="69" 7a="7a" 32="32" 34="34" 37="37" 38="38" 0a="0a">
Our_app_logs: | stderr: [libx264 @ 0x7f998e790080] <buffer 5b="5b" 6c="6c" 69="69" 62="62" 78="78" 32="32" 36="36" 34="34" 20="20" 40="40" 30="30" 37="37" 66="66" 39="39" 38="38" 65="65" 5d="5d">
Our_app_logs: | stderr: frame P:1465 Avg QP:13.51 size: 
 235
Our_app_logs: | <buffer 66="66" 72="72" 61="61" 6d="6d" 65="65" 20="20" 50="50" 3a="3a" 31="31" 34="34" 36="36" 35="35" 41="41" 76="76" 67="67" 51="51" 33="33" 2e="2e" 73="73" 69="69" 7a="7a" 32="32" 0a="0a">
Our_app_logs: | stderr: [libx264 @ 0x7f998e790080] <buffer 5b="5b" 6c="6c" 69="69" 62="62" 78="78" 32="32" 36="36" 34="34" 20="20" 40="40" 30="30" 37="37" 66="66" 39="39" 38="38" 65="65" 5d="5d">
Our_app_logs: | stderr: mb I I16..4: 99.2% 0.1% 0.7% 
Our_app_logs: | <buffer 6d="6d" 62="62" 20="20" 49="49" 31="31" 36="36" 2e="2e" 34="34" 3a="3a" 39="39" 32="32" 25="25" 30="30" 37="37" 0a="0a"> 
Our_app_logs: | stderr: [libx264 @ 0x7f998e790080] <buffer 5b="5b" 6c="6c" 69="69" 62="62" 78="78" 32="32" 36="36" 34="34" 20="20" 40="40" 30="30" 37="37" 66="66" 39="39" 38="38" 65="65" 5d="5d">
Our_app_logs: | stderr: mb P I16..4: 0.3% 0.0% 0.0% P16..4: 0.1% 0.0% 0.0% 0.0% 0.0% skip:99.6%
Our_app_logs: | <buffer 6d="6d" 62="62" 20="20" 50="50" 49="49" 31="31" 36="36" 2e="2e" 34="34" 3a="3a" 30="30" 33="33" 25="25">
Our_app_logs: | stderr: [libx264 @ 0x7f998e790080] <buffer 5b="5b" 6c="6c" 69="69" 62="62" 78="78" 32="32" 36="36" 34="34" 20="20" 40="40" 30="30" 37="37" 66="66" 39="39" 38="38" 65="65" 5d="5d">
Our_app_logs: | stderr: 8x8 transform intra:0.3% inter:17.3%
Our_app_logs: | <buffer 38="38" 78="78" 20="20" 74="74" 72="72" 61="61" 6e="6e" 73="73" 66="66" 6f="6f" 6d="6d" 69="69" 3a="3a" 30="30" 2e="2e" 33="33" 25="25" 65="65" 31="31" 37="37" 0a="0a">
Our_app_logs: | stderr: [libx264 @ 0x7f998e790080] <buffer 5b="5b" 6c="6c" 69="69" 62="62" 78="78" 32="32" 36="36" 34="34" 20="20" 40="40" 30="30" 37="37" 66="66" 39="39" 38="38" 65="65" 5d="5d">
Our_app_logs: | stderr: coded y,uvDC,uvAC intra: 1.4% 6.9% 
4.7% inter: 0.0% 0.0% 0.0%
Our_app_logs: | <buffer 63="63" 6f="6f" 64="64" 65="65" 20="20" 79="79" 2c="2c" 75="75" 76="76" 44="44" 43="43" 41="41" 69="69" 6e="6e" 74="74" 72="72" 61="61" 3a="3a" 31="31" 2e="2e" 34="34" 25="25" 36="36" 39="39" 37="37" 30="30">
Our_app_logs: | stderr: [libx264 @ 0x7f998e790080] <buffer 5b="5b" 6c="6c" 69="69" 62="62" 78="78" 32="32" 36="36" 34="34" 20="20" 40="40" 30="30" 37="37" 66="66" 39="39" 38="38" 65="65" 5d="5d">
Our_app_logs: | stderr: i16 v,h,dc,p: 90% 5% 5% 0%
Our_app_logs: | <buffer 69="69" 31="31" 36="36" 20="20" 76="76" 2c="2c" 68="68" 64="64" 63="63" 70="70" 3a="3a" 39="39" 30="30" 25="25" 35="35" 0a="0a">
Our_app_logs: | stderr: [libx264 @ 0x7f998e790080] <buffer 5b="5b" 6c="6c" 69="69" 62="62" 78="78" 32="32" 36="36" 34="34" 20="20" 40="40" 30="30" 37="37" 66="66" 39="39" 38="38" 65="65" 5d="5d">
Our_app_logs: | stderr: i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 23% 
18% 51% 6% 0% 0% 0% 0% 3%
Our_app_logs: | <buffer 69="69" 38="38" 20="20" 76="76" 2c="2c" 68="68" 64="64" 63="63" 6c="6c" 72="72" 75="75" 3a="3a" 32="32" 33="33" 25="25" 31="31" 35="35" 36="36" 30="30">
Our_app_logs: | stderr: [libx264 @ 0x7f998e790080] <buffer 5b="5b" 6c="6c" 69="69" 62="62" 78="78" 32="32" 36="36" 34="34" 20="20" 40="40" 30="30" 37="37" 66="66" 39="39" 38="38" 65="65" 5d="5d">
Our_app_logs: | stderr: i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 33% 
25% 40% 0% 0% 0% 0% 0% 0%
Our_app_logs: | <buffer 69="69" 34="34" 20="20" 76="76" 2c="2c" 68="68" 64="64" 63="63" 6c="6c" 72="72" 75="75" 3a="3a" 33="33" 25="25" 32="32" 35="35" 30="30">
Our_app_logs: | stderr: [libx264 @ 0x7f998e790080] <buffer 5b="5b" 6c="6c" 69="69" 62="62" 78="78" 32="32" 36="36" 34="34" 20="20" 40="40" 30="30" 37="37" 66="66" 39="39" 38="38" 65="65" 5d="5d">
Our_app_logs: | stderr: i8c dc,h,v,p: 86% 7% 6% 0%
Our_app_logs: | <buffer 69="69" 38="38" 63="63" 20="20" 64="64" 2c="2c" 68="68" 76="76" 70="70" 3a="3a" 36="36" 25="25" 37="37" 30="30" 0a="0a">
Our_app_logs: | stderr: [libx264 @ 0x7f998e790080] <buffer 5b="5b" 6c="6c" 69="69" 62="62" 78="78" 32="32" 36="36" 34="34" 20="20" 40="40" 30="30" 37="37" 66="66" 39="39" 38="38" 65="65" 5d="5d">
Our_app_logs: | stderr: Weighted P-Frames: Y:0.1% UV:0.1% 
Our_app_logs: | <buffer 57="57" 65="65" 69="69" 67="67" 68="68" 74="74" 64="64" 20="20" 50="50" 2d="2d" 46="46" 72="72" 61="61" 6d="6d" 73="73" 3a="3a" 59="59" 30="30" 2e="2e" 31="31" 25="25" 55="55" 56="56" 0a="0a"> 
Our_app_logs: | stderr: [libx264 @ 0x7f998e790080] <buffer 5b="5b" 6c="6c" 69="69" 62="62" 78="78" 32="32" 36="36" 34="34" 20="20" 40="40" 30="30" 37="37" 66="66" 39="39" 38="38" 65="65" 5d="5d">
Our_app_logs: | stderr: kb/s:2041.23
Our_app_logs: | <buffer 6b="6b" 62="62" 2f="2f" 73="73" 3a="3a" 32="32" 30="30" 34="34" 31="31" 2e="2e" 33="33" 0a="0a">
Our_app_logs: | stderr: Conversion failed!
Our_app_logs: | <buffer 43="43" 6f="6f" 6e="6e" 76="76" 65="65" 72="72" 73="73" 69="69" 20="20" 66="66" 61="61" 6c="6c" 64="64" 21="21" 0a="0a">
Our_app_logs: | close, code: 1, signal: null
Our_app_logs: | from react application: 14203
Our_app_logs: | Status ok...
Our_app_logs: | Data ok...
Our_app_logs: | FFmpeg ok...
Our_app_logs: | Writeable ok... <buffer c4="c4" 81="81" 0e="0e" 11="11" 00="00" 01="01" 61="61" c7="c7" 80="80" 5b="5b" b6="b6" 72="72" 03="03" bc="bc" b7="b7" de="de" 59="59" 7f="7f" 3c="3c" 27="27" b3="b3" 87="87" b2="b2" e6="e6" 84="84" d0="d0" f0="f0" 02="02" 2d="2d" c0="c0" 08="08" 70="70"> undefined
Our_app_logs: | stderr: ffmpeg version 4.2.4 Copyright (c) 
2000-2020 the FFmpeg developers
Our_app_logs: | built with gcc 9.2.0 (Alpine 9.2.0)
Our_app_logs: | configuration: --prefix=/usr --enable-avresample --enable-avfilter --enable-gnutls --enable-gpl --enable-libass --enable-libmp3lame --enable-libvorbis --enable-libvpx --enable-libxvid --enable-libx264 --enable-libx265 --enable-libtheora --enable-libv4l2 --enable-postproc --enable-pic --enable-pthreads --enable-shared --enable-libxcb --disable-stripping --disable-static --disable-librtmp --enable-vaapi --enable-vdpau --enable-libopus --disable-debug
Our_app_logs: | <buffer 66="66" 6d="6d" 70="70" 65="65" 67="67" 20="20" 76="76" 72="72" 73="73" 69="69" 6f="6f" 6e="6e" 34="34" 2e="2e" 32="32" 43="43" 79="79" 68="68" 74="74" 28="28" 63="63" 29="29" 30="30" 2d="2d" 46="46">
Our_app_logs: | stderr: libavutil 56. 31.100 / 56. 31.100
Our_app_logs: | libavcodec 58. 54.100 / 58. 54.100 
Our_app_logs: | libavformat 58. 29.100 / 58. 29.100
Our_app_logs: | libavdevice 58. 8.100 / 58. 8.100
Our_app_logs: | libavfilter 7. 57.100 / 7. 57.100
Our_app_logs: | libavresample 4. 0. 0 / 4. 0. 0 
Our_app_logs: | libswscale 5. 5.100 / 5. 5.100 
Our_app_logs: | libswresample 3. 5.100 / 3. 5.100 
Our_app_logs: | libpostproc 55. 5.100 / 55. 5.100 
Our_app_logs: | <buffer 20="20" 6c="6c" 69="69" 62="62" 61="61" 76="76" 75="75" 74="74" 35="35" 36="36" 2e="2e" 33="33" 31="31" 30="30" 2f="2f" 0a="0a" 63="63" 6f="6f">
Our_app_logs: | stderr: [h264 @ 0x7f299f44f600] non-existing PPS 14 referenced
Our_app_logs: | Last message repeated 4 times
Our_app_logs: | [h264 @ 0x7f299f44f600] decode_slice_header error
Our_app_logs: | [h264 @ 0x7f299f44f600] non-existing PPS 14 referenced
Our_app_logs: | [h264 @ 0x7f299f44f600] decode_slice_header error
Our_app_logs: | [h264 @ 0x7f299f44f600] no frame!
Our_app_logs: | [h264 @ 0x7f299f44f600] non-existing PPS 14 referenced
Our_app_logs: | [h264 @ 0x7f299f44f600] decode_slice_header error
Our_app_logs: | <buffer 5b="5b" 68="68" 32="32" 36="36" 34="34" 20="20" 40="40" 30="30" 78="78" 37="37" 66="66" 39="39" 5d="5d" 6e="6e" 6f="6f" 2d="2d" 65="65" 69="69" 73="73" 74="74" 67="67" 50="50" 53="53" 31="31" 72="72">
Our_app_logs: | stderr: [h264 @ 0x7f299f44f600] non-existing PPS 14 referenced
Our_app_logs: | [h264 @ 0x7f299f44f600] decode_slice_header error
Our_app_logs: | [h264 @ 0x7f299f44f600] no frame!
Our_app_logs: | [h264 @ 0x7f299f44f600] non-existing PPS 14 referenced
Our_app_logs: | [h264 @ 0x7f299f44f600] decode_slice_header error
Our_app_logs: | [h264 @ 0x7f299f44f600] non-existing PPS 14 referenced
Our_app_logs: | [h264 @ 0x7f299f44f600] decode_slice_header error
Our_app_logs: | [h264 @ 0x7f299f44f600] no frame!
Our_app_logs: | [h264 @ 0x7f299f44f600] non-existing PPS 14 referenced
Our_app_logs: | [h264 @ 0x7f299f44f600] decode_slice_header error
Our_app_logs: | [h264 @ 0x7f299f44f600] non-existing PPS 14 referenced
Our_app_logs: | [h264 @ 0x7f299f44f600] decode_slice_header error
Our_app_logs: | [h264 @ 0x7f299f44f600] no frame!
Our_app_logs: | [h264 @ 0x7f299f44f600] non-existing PPS 14 referenced
Our_app_logs: | Last message repeated 5 times
Our_app_logs: | [h264 @ 0x7f299f44f600] decode_slice_header error
Our_app_logs: | [h264 @ 0x7f299f44f600] non-existing PPS 14 referenced
Our_app_logs: | [h264 @ 0x7f299f44f600] decode_slice_header error
Our_app_logs: | [h264 @ 0x7f299f44f600] no frame!
Our_app_logs: | [h264 @ 0x7f299f44f600] non-existing PPS 14 referenced
Our_app_logs: | [h264 @ 0x7f299f44f600] decode_slice_header error
Our_app_logs: | [h264 @ 0x7f299f44f600] non-existing PPS 14 referenced
Our_app_logs: | [h264 @ 0x7f299f44f600] decode_slice_header error
Our_app_logs: | [h264 @ 0x7f299f44f600] no frame!
Our_app_logs: | [h264 @ 0x7f299f44f600] non-existing PPS 14 referenced
Our_app_logs: | [h264 @ 0x7f299f44f600] decode_slice_headerOur_app_logs: | [h264 @ 0x7f299f44f600] non-existing PPS 14 referenced
Our_app_logs: | [h264 @ 0x7f299f44f600] decode_slice_header error
Our_app_logs: | [h264 @ 0x7f299f44f600] no frame!
Our_app_logs: | [h264 @ 0x7f299f44f600] non-existing PPS 14 referenced
Our_app_logs: | [h264 @ 0x7f299f44f600] decode_slice_header error
Our_app_logs: | [h264 @ 0x7f299f44f600] non-existing PPS 14 referenced
Our_app_logs: | [h264 @ 0x7f299f44f600] decode_slice_header error
Our_app_logs: | [h264 @ 0x7f299f44f600] no frame!
Our_app_logs: | [h264 @ 0x7f299f44f600] non-existing PPS 14 referenced
Our_app_logs: | [h264 @ 0x7f299f44f600] decode_slice_header error
Our_app_logs: | [h264 @ 0x7f299f44f600] non-existing PPS 14 referenced
Our_app_logs: | [h264 @ 0x7f299f44f600] decode_slice_header error
Our_app_logs: | [h264 @ 0x7f299f44f600] no frame!

</buffer></buffer></buffer></buffer></buffer></buffer></buffer></buffer></buffer></buffer></buffer></buffer></buffer></buffer></buffer></buffer></buffer></buffer></buffer></buffer></buffer></buffer></buffer></buffer></buffer></buffer></buffer></buffer></buffer></buffer></buffer></buffer></buffer></buffer>


The FFmpeg config :


const FFMPEG_CONFIG = [
 '-i',
 '-',

 // video codec config: low latency, adaptive bitrate
 // '-vcodec',
 // 'copy',
 '-c:v',
 'libx264',
 '-preset',
 'veryfast',
 '-tune',
 'zerolatency',

 // audio codec config: sampling frequency (11025, 22050, 44100), bitrate 64 kbits
 '-c:a',
 'aac',
 '-ar',
 '44100',
 '-b:a',
 '64k',

 //force to overwrite
 '-y',

 // used for audio sync
 '-use_wallclock_as_timestamps',
 '1',
 '-async',
 '1',

 //'-filter_complex', 'aresample=44100', // resample audio to 44100Hz, needed if input is not 44100
 //'-strict', 'experimental',
 '-bufsize',
 '1000',
 '-f',
 'flv',
];



The process :


const process = child_process.spawn('ffmpeg', [
 ...FFMPEG_CONFIG,
 // 'local.bin',
 url,
 ]);
 
 process.stderr.on('data', data => {
 console.log(`stderr: ${data}`, data);
 });

 process.stdin.on('error', e => {
 console.log('FFmpeg STDIN Error', e);
 });

 process.on('error', err => console.log(err));

 process.on('close', (code, signal) => {
 console.log(`close, code: ${code}, signal: ${signal}`);
 });



The writing :


if (!Buffer.isBuffer(data)) return;
if (!process.stdin.writable) return;
process.stdin.write(data);