Skip to content

Commit d78403d

Browse files
committed
handle onmute track
1 parent 73d68f4 commit d78403d

File tree

4 files changed

+31
-8
lines changed

4 files changed

+31
-8
lines changed

demo/index.html

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ <h3>Local</h3>
3030
</div>
3131
<div class="card">
3232
<h3>Remote</h3>
33-
<video id="remote" autoplay style="width: 100%; height: auto; background:black;"></video>
33+
<video id="remote-video" autoplay style="width: 100%; height: auto; background:black;"></video>
34+
<audio id="remote-audio" autoplay></audio>
3435
</div>
3536
</div>
3637
</main>

demo/src/main.ts

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
const localVideo = document.getElementById("local") as HTMLVideoElement;
2-
const remoteVideo = document.getElementById("remote") as HTMLVideoElement;
2+
const remoteVideo = document.getElementById("remote-video") as HTMLVideoElement;
3+
const remoteAudio = document.getElementById("remote-audio") as HTMLAudioElement;
34
const form = document.getElementById("controls") as HTMLFormElement;
45
const endpointInput = document.getElementById("endpoint") as HTMLInputElement;
56
const toggleBtn = document.getElementById("toggle") as HTMLButtonElement;
@@ -17,7 +18,11 @@ form.onsubmit = async (e) => {
1718
const endpoint = endpointInput.value.trim();
1819
if (!endpoint) return alert("Please enter a valid endpoint");
1920
toggleBtn.textContent = "Stop";
20-
await start(endpoint);
21+
try {
22+
await start(endpoint);
23+
} catch(e) {
24+
stop();
25+
}
2126
}
2227
};
2328

@@ -46,10 +51,27 @@ async function start(endpoint: string) {
4651
// WHEP: recv-only transceivers
4752
pc.addTransceiver("video", { direction: "recvonly" });
4853
pc.addTransceiver("audio", { direction: "recvonly" });
49-
const remoteStream = new MediaStream();
50-
remoteVideo.srcObject = remoteStream;
54+
const remoteVideoStream = new MediaStream();
55+
const remoteAudioStream = new MediaStream();
56+
remoteAudio.srcObject = remoteAudioStream;
5157
pc.ontrack = (e) => {
52-
remoteStream.addTrack(e.track);
58+
if (e.track.kind === "video") {
59+
e.track.onended = () => {
60+
console.log(`Remote track ended: ${e.track.kind}`);
61+
remoteVideo.srcObject = null;
62+
}
63+
e.track.onmute = () => {
64+
console.log(`Remote track muted: ${e.track.kind}`);
65+
remoteVideo.srcObject = null;
66+
}
67+
e.track.onunmute = () => {
68+
console.log(`Remote track unmuted: ${e.track.kind}`);
69+
remoteVideo.srcObject = remoteVideoStream;
70+
}
71+
remoteVideoStream.addTrack(e.track);
72+
} else if (e.track.kind === "audio") {
73+
remoteAudioStream.addTrack(e.track);
74+
}
5375
};
5476

5577
pc.onconnectionstatechange = () => {

pulsebeam/src/main.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ pub async fn run(cpu_rt: rt::Runtime) {
7777
external_ip,
7878
);
7979

80-
node::run(cpu_rt, external_addr, unified_socket, http_socket, false)
80+
node::run(cpu_rt, external_addr, unified_socket, http_socket, true)
8181
.await
8282
.unwrap();
8383
}

pulsebeam/src/participant.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -589,7 +589,7 @@ impl ParticipantActor {
589589
return;
590590
};
591591

592-
tracing::debug!("wrote to rtp");
592+
tracing::trace!("wrote to rtp");
593593
if let Err(err) = writer.write(pt, data.network_time, data.time, data.data.clone()) {
594594
tracing::error!("failed to write media: {}", err);
595595
self.rtc.disconnect();

0 commit comments

Comments
 (0)