From 1c0096e2b1c7dee677cb34215bd4a0875050e6e5 Mon Sep 17 00:00:00 2001 From: Mohan Raman Date: Sun, 3 Dec 2023 06:58:03 +0530 Subject: [PATCH 1/2] added PRIORITIZE_H264 env while recording, mirotalk selects vp9,vp8 then goes to h264. most of the modern browsers support vp9/vp8, but vp9/vp8 becomes issue when postprocessing, hardware accelerated decoding is limited for vp9/vp8, so this env will prioritize h264/aac before moving to other possibilities. --- .env.template | 6 +++++- app/src/server.js | 4 ++++ public/js/client.js | 14 +++++++++++--- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/.env.template b/.env.template index d0ded1a8..4962cb6a 100644 --- a/.env.template +++ b/.env.template @@ -107,4 +107,8 @@ CHATGPT_BASE_PATH=https://api.openai.com/v1/ CHATGTP_APIKEY=YourOpenAiApiKey CHATGPT_MODEL=text-davinci-003 CHATGPT_MAX_TOKENS=1000 -CHATGPT_TEMPERATURE=0 \ No newline at end of file +CHATGPT_TEMPERATURE=0 + +# give priority to h264/aac when +# recording screen +PRIORITIZE_H264=false # true or false \ No newline at end of file diff --git a/app/src/server.js b/app/src/server.js index 969ae91d..f4148e86 100755 --- a/app/src/server.js +++ b/app/src/server.js @@ -206,6 +206,9 @@ if (configChatGPT.enabled) { } } +// make sure we prioritize h264/aac when recording screen +const isPrioritizeH264 = getEnvBoolean(process.env.PRIORITIZE_H264) + // directory const dir = { public: path.join(__dirname, '../../', 'public'), @@ -835,6 +838,7 @@ io.sockets.on('connect', async (socket) => { active: redirectEnabled, url: redirectURL, }, + is_prioritize_h264: isPrioritizeH264, //... }); }); diff --git a/public/js/client.js b/public/js/client.js index cabd9f76..91e55fcc 100644 --- a/public/js/client.js +++ b/public/js/client.js @@ -496,6 +496,7 @@ let swBg = 'rgba(0, 0, 0, 0.7)'; // swAlert background color let callElapsedTime; // count time let mySessionTime; // conference session time let isDocumentOnFullScreen = false; +let isPrioritizeH264 = false; // peer let myPeerId; // This socket.id @@ -1126,7 +1127,7 @@ async function handleConnect() { function handleServerInfo(config) { console.log('13. Server info', config); - const { peers_count, host_protected, user_auth, is_presenter, survey, redirect } = config; + const { peers_count, host_protected, user_auth, is_presenter, survey, redirect, is_prioritize_h264 } = config; isHostProtected = host_protected; isPeerAuthEnabled = user_auth; @@ -1147,6 +1148,9 @@ function handleServerInfo(config) { isPresenter = isPeerReconnected ? isPresenter : is_presenter; isPeerPresenter.innerText = isPresenter; + // prioritize h264 + isPrioritizeH264 = is_prioritize_h264; + if (isRulesActive) { handleRules(isPresenter); } @@ -5745,10 +5749,14 @@ function getSupportedMimeTypes() { const possibleTypes = [ 'video/webm;codecs=vp9,opus', 'video/webm;codecs=vp8,opus', - 'video/webm;codecs=h264,opus', - 'video/mp4;codecs=h264,aac', 'video/mp4', ]; + possibleTypes.splice( + isPrioritizeH264 ? 0 : 2, + 0, + 'video/mp4;codecs=h264,aac', + 'video/webm;codecs=h264,opus' + ); return possibleTypes.filter((mimeType) => { return MediaRecorder.isTypeSupported(mimeType); }); From 392645b41f92394ae745cc428f0a9bbb4b83d148 Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Sun, 3 Dec 2023 18:06:59 +0100 Subject: [PATCH 2/2] [mirotalk] - optimizations --- .env.template | 6 +++--- app/src/server.js | 8 +++++--- public/js/client.js | 20 ++++++-------------- 3 files changed, 14 insertions(+), 20 deletions(-) diff --git a/.env.template b/.env.template index 4962cb6a..d3042409 100644 --- a/.env.template +++ b/.env.template @@ -109,6 +109,6 @@ CHATGPT_MODEL=text-davinci-003 CHATGPT_MAX_TOKENS=1000 CHATGPT_TEMPERATURE=0 -# give priority to h264/aac when -# recording screen -PRIORITIZE_H264=false # true or false \ No newline at end of file +# Recording +# Give priority to h264,aac|h264,opus instead of vp8,opus/vp9,opus codec +REC_PRIORITIZE_H264=false # true or false \ No newline at end of file diff --git a/app/src/server.js b/app/src/server.js index f4148e86..418daf9b 100755 --- a/app/src/server.js +++ b/app/src/server.js @@ -206,8 +206,8 @@ if (configChatGPT.enabled) { } } -// make sure we prioritize h264/aac when recording screen -const isPrioritizeH264 = getEnvBoolean(process.env.PRIORITIZE_H264) +// make sure we prioritize h264,aac/h264,opus when recording +const recPrioritizeH264 = getEnvBoolean(process.env.REC_PRIORITIZE_H264); // directory const dir = { @@ -541,6 +541,7 @@ async function ngrokStart() { sentry_enabled: sentryEnabled, survey_enabled: surveyEnabled, redirect_enabled: redirectEnabled, + rec_prioritize_h264: recPrioritizeH264, survey_url: surveyURL, redirect_url: redirectURL, node_version: process.versions.node, @@ -590,6 +591,7 @@ server.listen(port, null, () => { sentry_enabled: sentryEnabled, survey_enabled: surveyEnabled, redirect_enabled: redirectEnabled, + rec_prioritize_h264: recPrioritizeH264, survey_url: surveyURL, redirect_url: redirectURL, node_version: process.versions.node, @@ -838,7 +840,7 @@ io.sockets.on('connect', async (socket) => { active: redirectEnabled, url: redirectURL, }, - is_prioritize_h264: isPrioritizeH264, + rec_prioritize_h264: recPrioritizeH264, //... }); }); diff --git a/public/js/client.js b/public/js/client.js index 91e55fcc..0b1ae4c1 100644 --- a/public/js/client.js +++ b/public/js/client.js @@ -496,7 +496,6 @@ let swBg = 'rgba(0, 0, 0, 0.7)'; // swAlert background color let callElapsedTime; // count time let mySessionTime; // conference session time let isDocumentOnFullScreen = false; -let isPrioritizeH264 = false; // peer let myPeerId; // This socket.id @@ -604,6 +603,7 @@ let audioRecorder; // helpers.js let recScreenStream; // screen media to recording let recTimer; let recElapsedTime; +let recPrioritizeH264 = false; let isStreamRecording = false; let isStreamRecordingPaused = false; let isRecScreenStream = false; @@ -1127,7 +1127,7 @@ async function handleConnect() { function handleServerInfo(config) { console.log('13. Server info', config); - const { peers_count, host_protected, user_auth, is_presenter, survey, redirect, is_prioritize_h264 } = config; + const { peers_count, host_protected, user_auth, is_presenter, survey, redirect, rec_prioritize_h264 } = config; isHostProtected = host_protected; isPeerAuthEnabled = user_auth; @@ -1149,7 +1149,7 @@ function handleServerInfo(config) { isPeerPresenter.innerText = isPresenter; // prioritize h264 - isPrioritizeH264 = is_prioritize_h264; + recPrioritizeH264 = rec_prioritize_h264; if (isRulesActive) { handleRules(isPresenter); @@ -5746,17 +5746,9 @@ function stopRecordingTimer() { * @returns {boolean} is mimeType supported by media recorder */ function getSupportedMimeTypes() { - const possibleTypes = [ - 'video/webm;codecs=vp9,opus', - 'video/webm;codecs=vp8,opus', - 'video/mp4', - ]; - possibleTypes.splice( - isPrioritizeH264 ? 0 : 2, - 0, - 'video/mp4;codecs=h264,aac', - 'video/webm;codecs=h264,opus' - ); + const possibleTypes = ['video/webm;codecs=vp9,opus', 'video/webm;codecs=vp8,opus', 'video/mp4']; + possibleTypes.splice(recPrioritizeH264 ? 0 : 2, 0, 'video/mp4;codecs=h264,aac', 'video/webm;codecs=h264,opus'); + console.log('POSSIBLE CODECS', possibleTypes); return possibleTypes.filter((mimeType) => { return MediaRecorder.isTypeSupported(mimeType); });