From 5598bf99c4d4aaa61f8d05e38e38614f952bd21a Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Thu, 16 Jan 2025 10:52:19 +0100 Subject: [PATCH] [mirotalksfu] - autodetect default ffmpegPath for Rtmp streaming --- app/src/RtmpFile.js | 3 +- app/src/RtmpStreamer.js | 3 +- app/src/RtmpUrl.js | 3 +- app/src/Server.js | 2 +- app/src/config.template.js | 28 +++++++++++++++++-- package.json | 2 +- public/js/Room.js | 4 +-- public/js/RoomClient.js | 2 +- .../server/RtmpStreamer.js | 23 ++++++++++++++- .../server/RtmpStreamer.js | 23 ++++++++++++++- 10 files changed, 81 insertions(+), 12 deletions(-) diff --git a/app/src/RtmpFile.js b/app/src/RtmpFile.js index 1e16e1b9..d206c7ad 100644 --- a/app/src/RtmpFile.js +++ b/app/src/RtmpFile.js @@ -1,7 +1,8 @@ 'use strict'; const config = require('./config'); -const ffmpegPath = config.server.rtmp && config.server.rtmp.ffmpeg ? config.server.rtmp.ffmpeg : '/usr/bin/ffmpeg'; +const ffmpegPath = + config.server.rtmp && config.server.rtmp.ffmpegPath ? config.server.rtmp.ffmpegPath : '/usr/bin/ffmpeg'; const ffmpeg = require('fluent-ffmpeg'); ffmpeg.setFfmpegPath(ffmpegPath); diff --git a/app/src/RtmpStreamer.js b/app/src/RtmpStreamer.js index 681a964b..944dad4f 100644 --- a/app/src/RtmpStreamer.js +++ b/app/src/RtmpStreamer.js @@ -3,7 +3,8 @@ const config = require('./config'); const { PassThrough } = require('stream'); const ffmpeg = require('fluent-ffmpeg'); -const ffmpegPath = config.server.rtmp && config.server.rtmp.ffmpeg ? config.server.rtmp.ffmpeg : '/usr/bin/ffmpeg'; +const ffmpegPath = + config.server.rtmp && config.server.rtmp.ffmpegPath ? config.server.rtmp.ffmpegPath : '/usr/bin/ffmpeg'; ffmpeg.setFfmpegPath(ffmpegPath); const Logger = require('./Logger'); diff --git a/app/src/RtmpUrl.js b/app/src/RtmpUrl.js index bb9e9e8a..9e57994f 100644 --- a/app/src/RtmpUrl.js +++ b/app/src/RtmpUrl.js @@ -1,7 +1,8 @@ 'use strict'; const config = require('./config'); -const ffmpegPath = config.server.rtmp && config.server.rtmp.ffmpeg ? config.server.rtmp.ffmpeg : '/usr/bin/ffmpeg'; +const ffmpegPath = + config.server.rtmp && config.server.rtmp.ffmpegPath ? config.server.rtmp.ffmpegPath : '/usr/bin/ffmpeg'; const ffmpeg = require('fluent-ffmpeg'); ffmpeg.setFfmpegPath(ffmpegPath); diff --git a/app/src/Server.js b/app/src/Server.js index 978348b4..c7f882e1 100644 --- a/app/src/Server.js +++ b/app/src/Server.js @@ -55,7 +55,7 @@ dev dependencies: { * @license For commercial or closed source, contact us at license.mirotalk@gmail.com or purchase directly via CodeCanyon * @license CodeCanyon: https://codecanyon.net/item/mirotalk-sfu-webrtc-realtime-video-conferences/40769970 * @author Miroslav Pejic - miroslav.pejic.85@gmail.com - * @version 1.7.03 + * @version 1.7.04 * */ diff --git a/app/src/config.template.js b/app/src/config.template.js index ed99cf0d..6c1ca885 100644 --- a/app/src/config.template.js +++ b/app/src/config.template.js @@ -2,6 +2,28 @@ const os = require('os'); +// ############################# +// HELPERS +// ############################# + +const platform = os.platform(); + +let ffmpegPath; + +switch (platform) { + case 'darwin': + ffmpegPath = '/usr/local/bin/ffmpeg'; // macOS + break; + case 'linux': + ffmpegPath = '/usr/bin/ffmpeg'; // Linux + break; + case 'win32': + ffmpegPath = 'C:\\ffmpeg\\bin\\ffmpeg.exe'; // Windows + break; + default: + ffmpegPath = '/usr/bin/ffmpeg'; // Centos or others... +} + // https://api.ipify.org function getIPv4() { @@ -99,7 +121,8 @@ module.exports = { - apiSecret: The API secret for streaming WebRTC to RTMP through the MiroTalk API. - expirationHours: The number of hours before the RTMP URL expires. Default is 4 hours. - dir: Directory where your video files are stored to be streamed via RTMP. - - ffmpeg: Path of the ffmpeg installation on the system (which ffmpeg) + - ffmpegPath: Path of the ffmpeg installation on the system (which ffmpeg) + - platform: OS es darwin, linux, win32.... Important: Before proceeding, make sure your RTMP server is up and running. For more information, refer to the documentation here: https://docs.mirotalk.com/mirotalk-sfu/rtmp/. @@ -120,7 +143,8 @@ module.exports = { apiSecret: 'mirotalkRtmpApiSecret', expirationHours: 4, dir: 'rtmp', - ffmpeg: '/usr/bin/ffmpeg', + ffmpegPath: ffmpegPath, + platform: platform, }, }, middleware: { diff --git a/package.json b/package.json index c4687ff7..7283f6e2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mirotalksfu", - "version": "1.7.03", + "version": "1.7.04", "description": "WebRTC SFU browser-based video calls", "main": "Server.js", "scripts": { diff --git a/public/js/Room.js b/public/js/Room.js index 3d8df8ba..b408597a 100644 --- a/public/js/Room.js +++ b/public/js/Room.js @@ -11,7 +11,7 @@ if (location.href.substr(0, 5) !== 'https') location.href = 'https' + location.h * @license For commercial or closed source, contact us at license.mirotalk@gmail.com or purchase directly via CodeCanyon * @license CodeCanyon: https://codecanyon.net/item/mirotalk-sfu-webrtc-realtime-video-conferences/40769970 * @author Miroslav Pejic - miroslav.pejic.85@gmail.com - * @version 1.7.03 + * @version 1.7.04 * */ @@ -4904,7 +4904,7 @@ function showAbout() { imageUrl: image.about, customClass: { image: 'img-about' }, position: 'center', - title: 'WebRTC SFU v1.7.03', + title: 'WebRTC SFU v1.7.04', html: `
diff --git a/public/js/RoomClient.js b/public/js/RoomClient.js index a8cc83da..9d022fae 100644 --- a/public/js/RoomClient.js +++ b/public/js/RoomClient.js @@ -9,7 +9,7 @@ * @license For commercial or closed source, contact us at license.mirotalk@gmail.com or purchase directly via CodeCanyon * @license CodeCanyon: https://codecanyon.net/item/mirotalk-sfu-webrtc-realtime-video-conferences/40769970 * @author Miroslav Pejic - miroslav.pejic.85@gmail.com - * @version 1.7.03 + * @version 1.7.04 * */ diff --git a/rtmpServers/demo/client-server-axios/server/RtmpStreamer.js b/rtmpServers/demo/client-server-axios/server/RtmpStreamer.js index ea6a5036..66599cd3 100644 --- a/rtmpServers/demo/client-server-axios/server/RtmpStreamer.js +++ b/rtmpServers/demo/client-server-axios/server/RtmpStreamer.js @@ -2,9 +2,30 @@ const { PassThrough } = require('stream'); const ffmpeg = require('fluent-ffmpeg'); -const ffmpegPath = '/usr/local/bin/ffmpeg'; // /usr/bin/ffmpeg (Linux) | /usr/local/bin/ffmpeg (Mac) + +const os = require('os'); + +const platform = os.platform(); +let ffmpegPath; + +switch (platform) { + case 'darwin': + ffmpegPath = '/usr/local/bin/ffmpeg'; // macOS + break; + case 'linux': + ffmpegPath = '/usr/bin/ffmpeg'; // Linux + break; + case 'win32': + ffmpegPath = 'C:\\ffmpeg\\bin\\ffmpeg.exe'; // Windows + break; + default: + ffmpegPath = '/usr/bin/ffmpeg'; // Centos or others... +} + ffmpeg.setFfmpegPath(ffmpegPath); +console.log('FFmpeg', { platform, ffmpegPath }); + class RtmpStreamer { constructor(rtmpUrl, rtmpKey) { this.rtmpUrl = rtmpUrl; diff --git a/rtmpServers/demo/client-server-socket/server/RtmpStreamer.js b/rtmpServers/demo/client-server-socket/server/RtmpStreamer.js index b7488f50..060fa4e9 100644 --- a/rtmpServers/demo/client-server-socket/server/RtmpStreamer.js +++ b/rtmpServers/demo/client-server-socket/server/RtmpStreamer.js @@ -2,9 +2,30 @@ const { PassThrough } = require('stream'); const ffmpeg = require('fluent-ffmpeg'); -const ffmpegPath = '/usr/local/bin/ffmpeg'; // /usr/bin/ffmpeg (Linux) | /usr/local/bin/ffmpeg (Mac) + +const os = require('os'); + +const platform = os.platform(); +let ffmpegPath; + +switch (platform) { + case 'darwin': + ffmpegPath = '/usr/local/bin/ffmpeg'; // macOS + break; + case 'linux': + ffmpegPath = '/usr/bin/ffmpeg'; // Linux + break; + case 'win32': + ffmpegPath = 'C:\\ffmpeg\\bin\\ffmpeg.exe'; // Windows + break; + default: + ffmpegPath = '/usr/bin/ffmpeg'; // Centos or others... +} + ffmpeg.setFfmpegPath(ffmpegPath); +console.log('FFmpeg', { platform, ffmpegPath }); + class RtmpStreamer { constructor(rtmpUrl, rtmpKey, socket) { (this.socket = socket), (this.rtmpUrl = rtmpUrl);