Update: Channel Based VC (Same Issues)

This commit is contained in:
2026-03-31 09:47:15 -04:00
parent 6fedad92b1
commit e9f96b7389
7 changed files with 69 additions and 54 deletions

View File

@@ -11,8 +11,8 @@
<script>
let peerConnection = null;
let localStream = null;
let currentTarget = null;
let currentUsername = null;
let currentChannelId = null;
let availableCameras = [];
let availableMics = [];
@@ -21,6 +21,11 @@
LogMessage("Username set to: " + currentUsername);
};
window.setChannelId = function(channelId) {
currentChannelId = channelId;
LogMessage("Channel set to: " + currentChannelId);
};
function LogMessage(msg) {
const messageLog = document.getElementById("messageLog");
messageLog.value += '\r\n' + msg;
@@ -43,12 +48,12 @@
});
peerConnection.onicecandidate = async (event) => {
if (!event.candidate || !currentTarget || !currentUsername) return;
if (!event.candidate || !currentChannelId || !currentUsername) return;
const payload = {
type: "rtc_ice_candidate",
from: currentUsername,
to: currentTarget,
channelId: currentChannelId,
candidate: event.candidate.candidate,
sdpMid: event.candidate.sdpMid,
sdpMLineIndex: event.candidate.sdpMLineIndex
@@ -169,20 +174,20 @@
}
}
async function startCall() {
async function joinChannelCall() {
LogMessage("Current username: " + currentUsername);
try {
currentTarget = document.getElementById("targetUser").value;
LogMessage("Current channel: " + currentChannelId);
if (!currentTarget) {
LogMessage("No target user set.");
try {
if (!currentChannelId) {
LogMessage("No current channel set.");
return;
}
await ensurePeerConnection();
await ensureLocalMedia();
LogMessage(`Starting call with media: audio=${hasAudioTrack()} video=${hasVideoTrack()}`);
LogMessage(`Joining call with media: audio=${hasAudioTrack()} video=${hasVideoTrack()}`);
const offer = await peerConnection.createOffer();
await peerConnection.setLocalDescription(offer);
@@ -190,14 +195,14 @@
const payload = {
type: "rtc_offer",
from: currentUsername,
to: currentTarget,
channelId: currentChannelId,
sdp: offer.sdp
};
LogMessage("Sending offer to " + currentTarget);
LogMessage("Sending offer to channel " + currentChannelId);
await window.HybridWebView.InvokeDotNet("SendRtcSignal", [JSON.stringify(payload)]);
} catch (err) {
LogMessage("startCall failed: " + err);
LogMessage("joinChannelCall failed: " + err);
}
}
@@ -205,13 +210,12 @@
try {
const msg = typeof rawJson === "string" ? JSON.parse(rawJson) : rawJson;
LogMessage("Received signal: " + msg.type + " from " + msg.from);
LogMessage("Received signal: " + msg.type + " from " + msg.from + " in " + msg.channelId);
await ensurePeerConnection();
if (msg.type === "rtc_offer") {
currentTarget = msg.from;
LogMessage("Incoming call from " + msg.from);
LogMessage("Incoming channel call offer from " + msg.from);
await ensureLocalMedia();
LogMessage(`Answering call with media: audio=${hasAudioTrack()} video=${hasVideoTrack()}`);
@@ -228,11 +232,11 @@
const payload = {
type: "rtc_answer",
from: currentUsername,
to: msg.from,
channelId: msg.channelId,
sdp: answer.sdp
};
LogMessage("Sending answer to " + msg.from);
LogMessage("Sending answer to channel " + msg.channelId);
await window.HybridWebView.InvokeDotNet("SendRtcSignal", [JSON.stringify(payload)]);
return;
}
@@ -335,10 +339,8 @@
</div>
<div>
<label for="targetUser">Target User:</label>
<input id="targetUser" type="text" value="Ru_Kira" />
<button onclick="loadDevices()">Refresh Devices</button>
<button onclick="startCall()">Start Call</button>
<button onclick="joinChannelCall()">Join Call</button>
</div>
<div style="margin-top: 8px;">