SHA256
Оптимизировать видеозаглушку звонка
This commit is contained in:
+1
-1
@@ -1,2 +1,2 @@
|
|||||||
client.version=1.5.21
|
client.version=1.5.22
|
||||||
server.version=1.4.9
|
server.version=1.4.9
|
||||||
|
|||||||
@@ -1668,6 +1668,7 @@ async function ensurePeerConnection(call) {
|
|||||||
call.videoSender = sender;
|
call.videoSender = sender;
|
||||||
call.videoTransceiver = (pc.getTransceivers?.() || []).find((tr) => tr?.sender === sender) || null;
|
call.videoTransceiver = (pc.getTransceivers?.() || []).find((tr) => tr?.sender === sender) || null;
|
||||||
bindVideoSenderStream(call, sender);
|
bindVideoSenderStream(call, sender);
|
||||||
|
await applyVideoSenderEncodingProfile(sender, 'placeholder');
|
||||||
} else {
|
} else {
|
||||||
ensureReservedVideoTransceiver(call);
|
ensureReservedVideoTransceiver(call);
|
||||||
}
|
}
|
||||||
@@ -2008,8 +2009,8 @@ function ensureBlackVideoTrack(call) {
|
|||||||
return existingTrack;
|
return existingTrack;
|
||||||
}
|
}
|
||||||
const canvas = document.createElement('canvas');
|
const canvas = document.createElement('canvas');
|
||||||
canvas.width = 640;
|
canvas.width = 160;
|
||||||
canvas.height = 360;
|
canvas.height = 90;
|
||||||
const ctx = canvas.getContext('2d');
|
const ctx = canvas.getContext('2d');
|
||||||
if (!ctx || typeof canvas.captureStream !== 'function') {
|
if (!ctx || typeof canvas.captureStream !== 'function') {
|
||||||
return null;
|
return null;
|
||||||
@@ -2025,6 +2026,32 @@ function ensureBlackVideoTrack(call) {
|
|||||||
return track;
|
return track;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function applyVideoSenderEncodingProfile(sender, mode = 'camera') {
|
||||||
|
if (!sender || typeof sender.getParameters !== 'function' || typeof sender.setParameters !== 'function') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
const params = sender.getParameters() || {};
|
||||||
|
const encodings = Array.isArray(params.encodings) && params.encodings.length > 0
|
||||||
|
? [...params.encodings]
|
||||||
|
: [{}];
|
||||||
|
const nextEncoding = { ...encodings[0] };
|
||||||
|
if (mode === 'placeholder') {
|
||||||
|
nextEncoding.maxBitrate = 12000;
|
||||||
|
nextEncoding.maxFramerate = 1;
|
||||||
|
nextEncoding.scaleResolutionDownBy = 1;
|
||||||
|
nextEncoding.active = true;
|
||||||
|
} else {
|
||||||
|
delete nextEncoding.maxBitrate;
|
||||||
|
delete nextEncoding.maxFramerate;
|
||||||
|
delete nextEncoding.scaleResolutionDownBy;
|
||||||
|
nextEncoding.active = true;
|
||||||
|
}
|
||||||
|
params.encodings = [nextEncoding];
|
||||||
|
await sender.setParameters(params);
|
||||||
|
} catch {}
|
||||||
|
}
|
||||||
|
|
||||||
async function disableCameraTrack(call) {
|
async function disableCameraTrack(call) {
|
||||||
const videoTrack = call?.localVideoTrack || null;
|
const videoTrack = call?.localVideoTrack || null;
|
||||||
if (videoTrack) {
|
if (videoTrack) {
|
||||||
@@ -2068,10 +2095,12 @@ async function applyCameraState(call) {
|
|||||||
await videoTransceiver.sender.replaceTrack(videoTrack);
|
await videoTransceiver.sender.replaceTrack(videoTrack);
|
||||||
call.videoSender = videoTransceiver.sender;
|
call.videoSender = videoTransceiver.sender;
|
||||||
bindVideoSenderStream(call, videoTransceiver.sender);
|
bindVideoSenderStream(call, videoTransceiver.sender);
|
||||||
|
await applyVideoSenderEncodingProfile(videoTransceiver.sender, 'camera');
|
||||||
} else {
|
} else {
|
||||||
const sender = pc.addTrack(videoTrack, call.localStream);
|
const sender = pc.addTrack(videoTrack, call.localStream);
|
||||||
call.videoSender = sender;
|
call.videoSender = sender;
|
||||||
bindVideoSenderStream(call, sender);
|
bindVideoSenderStream(call, sender);
|
||||||
|
await applyVideoSenderEncodingProfile(sender, 'camera');
|
||||||
}
|
}
|
||||||
videoTrack.enabled = true;
|
videoTrack.enabled = true;
|
||||||
} else {
|
} else {
|
||||||
@@ -2096,6 +2125,7 @@ async function applyCameraState(call) {
|
|||||||
try { await videoTransceiver.sender.replaceTrack(blackTrack || null); } catch {}
|
try { await videoTransceiver.sender.replaceTrack(blackTrack || null); } catch {}
|
||||||
call.videoSender = videoTransceiver.sender;
|
call.videoSender = videoTransceiver.sender;
|
||||||
bindVideoSenderStream(call, videoTransceiver.sender);
|
bindVideoSenderStream(call, videoTransceiver.sender);
|
||||||
|
await applyVideoSenderEncodingProfile(videoTransceiver.sender, 'placeholder');
|
||||||
}
|
}
|
||||||
await disableCameraTrack(call);
|
await disableCameraTrack(call);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user