illuspas / Node-Media-Server

A Node.js implementation of RTMP/HTTP-FLV/WS-FLV/HLS/DASH/MP4 Media Server
https://www.npmjs.com/package/node-media-server
MIT License
5.89k stars 1.51k forks source link

wrong ffmpeg version in ffmpeg version 6.0 #590

Closed primemb closed 4 months ago

primemb commented 1 year ago

in last version of ffmpeg the description of -version command is increased so the buffer sends data twice like this :

{
data: 'ffmpeg version 6.0 Copyright (c) 2000-2023 the FFmpeg developers\n' +
'built with gcc 12.2.1 (Alpine 12.2.1_git20220924-r10) 20220924\n' +
'configuration: --prefix=/usr --disable-librtmp --disable-lzma --disable-static --disable-stripping --enable-avfilter --enable-gnutls --enable-gpl --enable-libaom --enable-libass --enable-libbluray --enable-libdav1d --enable-libdrm --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libmp3lame --enable-libopenmpt --enable-libopus --enable-libplacebo --enable-libpulse --enable-librist --enable-libsoxr --enable-libsrt --enable-libssh --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-lto --enable-pic --enable-postproc --enable-pthreads --enable-shared --enable-vaapi --enable-vdpau --enable-vulkan --optflags=-O3 --enable-libjxl --enable-libsvtav1 --enable-libvpl\n' +
'libavutil      58.  2.100 / 58.  2.100\n' +
'libavcodec     60.  3.100 / 60.  3.100\n' +
'libavformat   '
}
{
data: ' 60.  3.100 / 60.  3.100\n' +
'libavdevice    60.  1.100 / 60.  1.100\n' +
'libavfilter     9.  3.100 /  9.  3.100\n' +
'libswscale      7.  1.100 /  7.  1.100\n' +
'libswresample   5.  0.100 /  5.  0.100\n' +
'libpostproc    57.  1.100 / 57.  1.100\n'
avinvas_full-avinvas_live-1          | 
}

as you can see, data is logged twice in the console. This the current getFFmpegVersion function :

function getFFmpegVersion(ffpath) {
  return new Promise((resolve, reject) => {
    let ffmpeg_exec = spawn(ffpath, ["-version"]);
    let version = "";
    ffmpeg_exec.on("error", (e) => {
      reject(e);
    });
    ffmpeg_exec.stdout.on("data", (data) => {
      try {
        version = data
          .toString()
          .split(/(?:\r\n|\r|\n)/g)[0]
          .split(" ")[2];
      } catch (e) {}
    });
    ffmpeg_exec.on("close", (code) => {
      resolve(version);
    });
  });
}

in this function, you set the version variable to the last data you get on the stdout result, and that because it not work, the solution is simple we can wait until you get all data and then parse it i will send a pull request for it