Spaces:
Runtime error
Runtime error
Fix call media stream attach + timer fallback (v2.6.4)
Browse files- client.js +12 -1
- index.html +1 -1
- package.json +1 -1
client.js
CHANGED
|
@@ -6194,6 +6194,8 @@ function createPeerConnection(peerId) {
|
|
| 6194 |
if (remoteVideo) {
|
| 6195 |
if (event.streams && event.streams[0]) {
|
| 6196 |
const incomingStream = event.streams[0];
|
|
|
|
|
|
|
| 6197 |
if (remoteVideo.srcObject !== incomingStream) {
|
| 6198 |
remoteVideo.srcObject = incomingStream;
|
| 6199 |
}
|
|
@@ -6218,8 +6220,16 @@ function createPeerConnection(peerId) {
|
|
| 6218 |
|
| 6219 |
ensureRemoteMediaPlayback(remoteVideo);
|
| 6220 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 6221 |
event.track.onunmute = () => {
|
| 6222 |
ensureRemoteMediaPlayback(remoteVideo);
|
|
|
|
|
|
|
|
|
|
| 6223 |
};
|
| 6224 |
}
|
| 6225 |
};
|
|
@@ -6250,7 +6260,8 @@ function createPeerConnection(peerId) {
|
|
| 6250 |
// Re-attach remote stream after ICE recovery so video/audio plays
|
| 6251 |
const remoteVidEl = document.getElementById('remoteCallVideo');
|
| 6252 |
if (remoteVidEl) {
|
| 6253 |
-
|
|
|
|
| 6254 |
remoteVidEl.srcObject = remoteCallStream;
|
| 6255 |
}
|
| 6256 |
remoteVidEl.muted = false;
|
|
|
|
| 6194 |
if (remoteVideo) {
|
| 6195 |
if (event.streams && event.streams[0]) {
|
| 6196 |
const incomingStream = event.streams[0];
|
| 6197 |
+
// Keep reference to the actual remote stream so reconnect logic does not swap it out.
|
| 6198 |
+
remoteCallStream = incomingStream;
|
| 6199 |
if (remoteVideo.srcObject !== incomingStream) {
|
| 6200 |
remoteVideo.srcObject = incomingStream;
|
| 6201 |
}
|
|
|
|
| 6220 |
|
| 6221 |
ensureRemoteMediaPlayback(remoteVideo);
|
| 6222 |
|
| 6223 |
+
// Fallback: start timer when media is actually flowing, even if connection state stays "connecting".
|
| 6224 |
+
if (!callTimerInterval) {
|
| 6225 |
+
startCallTimer();
|
| 6226 |
+
}
|
| 6227 |
+
|
| 6228 |
event.track.onunmute = () => {
|
| 6229 |
ensureRemoteMediaPlayback(remoteVideo);
|
| 6230 |
+
if (!callTimerInterval) {
|
| 6231 |
+
startCallTimer();
|
| 6232 |
+
}
|
| 6233 |
};
|
| 6234 |
}
|
| 6235 |
};
|
|
|
|
| 6260 |
// Re-attach remote stream after ICE recovery so video/audio plays
|
| 6261 |
const remoteVidEl = document.getElementById('remoteCallVideo');
|
| 6262 |
if (remoteVidEl) {
|
| 6263 |
+
// Only set srcObject when video currently has no stream to avoid replacing a valid incoming stream.
|
| 6264 |
+
if (remoteCallStream && !remoteVidEl.srcObject) {
|
| 6265 |
remoteVidEl.srcObject = remoteCallStream;
|
| 6266 |
}
|
| 6267 |
remoteVidEl.muted = false;
|
index.html
CHANGED
|
@@ -3048,7 +3048,7 @@
|
|
| 3048 |
<div class="chat-header-title" id="chatTitle">💬 Select a friend to chat</div>
|
| 3049 |
</div>
|
| 3050 |
<div class="chat-header-actions">
|
| 3051 |
-
<span class="build-badge mobile-essential" id="buildVersionBadge" title="Frontend build version">v2.6.
|
| 3052 |
<button class="header-btn mobile-essential" onclick="toggleArchiveChat()" title="Archive chat">
|
| 3053 |
<i class="fas fa-archive"></i>
|
| 3054 |
</button>
|
|
|
|
| 3048 |
<div class="chat-header-title" id="chatTitle">💬 Select a friend to chat</div>
|
| 3049 |
</div>
|
| 3050 |
<div class="chat-header-actions">
|
| 3051 |
+
<span class="build-badge mobile-essential" id="buildVersionBadge" title="Frontend build version">v2.6.4</span>
|
| 3052 |
<button class="header-btn mobile-essential" onclick="toggleArchiveChat()" title="Archive chat">
|
| 3053 |
<i class="fas fa-archive"></i>
|
| 3054 |
</button>
|
package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
| 1 |
{
|
| 2 |
"name": "discord-like-app",
|
| 3 |
-
"version": "2.6.
|
| 4 |
"main": "server.js",
|
| 5 |
"scripts": {
|
| 6 |
"dev": "nodemon server.js",
|
|
|
|
| 1 |
{
|
| 2 |
"name": "discord-like-app",
|
| 3 |
+
"version": "2.6.4",
|
| 4 |
"main": "server.js",
|
| 5 |
"scripts": {
|
| 6 |
"dev": "nodemon server.js",
|