11const 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 ;
34const form = document . getElementById ( "controls" ) as HTMLFormElement ;
45const endpointInput = document . getElementById ( "endpoint" ) as HTMLInputElement ;
56const 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 = ( ) => {
0 commit comments