Skip to content

Commit

Permalink
fix: mute unmute camera is freeze the remote video
Browse files Browse the repository at this point in the history
  • Loading branch information
tyohan committed Sep 9, 2024
1 parent af5714a commit 0bdafd1
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 10 deletions.
5 changes: 4 additions & 1 deletion packages/room/peer/peer-types.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,10 @@ export declare namespace RoomPeerType {
turnOnMic: () => void
turnOffCamera: () => void
turnOffMic: () => void
replaceTrack: (track: MediaStreamTrack) => Promise<void>
replaceTrack: (
oldTrack: MediaStreamTrack,
newTrack: MediaStreamTrack
) => Promise<void>
observeVideo: (video: HTMLVideoElement) => void
unobserveVideo: (video: HTMLVideoElement) => void
negotiate: () => Promise<void>
Expand Down
18 changes: 9 additions & 9 deletions packages/room/peer/peer.js
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,7 @@ export const createPeer = ({ api, createStream, event, streams, config }) => {
}

if (videoTrack) {
await this.replaceTrack(newTrack)
await this.replaceTrack(videoTrack, newTrack)
localStream.replaceTrack(newTrack)
return
}
Expand Down Expand Up @@ -289,7 +289,7 @@ export const createPeer = ({ api, createStream, event, streams, config }) => {
}

if (audioTrack) {
await this.replaceTrack(newTrack)
await this.replaceTrack(audioTrack, newTrack)
localStream.replaceTrack(newTrack)
return
}
Expand Down Expand Up @@ -334,7 +334,6 @@ export const createPeer = ({ api, createStream, event, streams, config }) => {

if (stop) {
this._stopTrack(videoTrack)
localStream.mediaStream.removeTrack(videoTrack)
return
}

Expand Down Expand Up @@ -371,23 +370,24 @@ export const createPeer = ({ api, createStream, event, streams, config }) => {
}

/**
* @param {MediaStreamTrack} oldTrack
* @param {MediaStreamTrack} newTrack
*/
replaceTrack = async (newTrack) => {
replaceTrack = async (oldTrack, newTrack) => {
if (!this._peerConnection) return

if (!(newTrack instanceof MediaStreamTrack)) {
throw new TypeError('Track must be an instance of MediaStreamTrack')
}

for (const transceiver of this._peerConnection.getTransceivers()) {
for (const sender of this._peerConnection.getSenders()) {
if (
transceiver.sender.track &&
transceiver.sender.track.kind === newTrack.kind &&
transceiver.sender.track.id === newTrack.id
sender.track &&
sender.track.kind === oldTrack.kind &&
sender.track.id === oldTrack.id
) {
try {
await transceiver.sender.replaceTrack(newTrack)
await sender.replaceTrack(newTrack)
} catch (error) {
console.error(error)
throw error
Expand Down

0 comments on commit 0bdafd1

Please sign in to comment.