Skip to content

Commit

Permalink
fix the buffer is not putback to pool on error
Browse files Browse the repository at this point in the history
change the example to stop camera track on mute video
  • Loading branch information
Yohan Totting committed Sep 9, 2024
1 parent 1023c3c commit b85c85d
Show file tree
Hide file tree
Showing 2 changed files with 67 additions and 17 deletions.
81 changes: 65 additions & 16 deletions examples/http-websocket/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,10 @@

let ws = null;

const stream = new MediaStream()

let screenStream = null

let internalChannel = null;

let videoObserver = null
Expand Down Expand Up @@ -159,7 +163,7 @@

const toggleMic = async (e) => {
peerConnection.getSenders().forEach(sender => {
if (sender.track.kind === 'audio') {
if (sender.track && sender.track.kind === 'audio') {
sender.track.enabled = !mutedMic
mutedMic = !mutedMic
e.target.innerText = !sender.track.enabled?'Unmute Mic':'Mute Mic'
Expand All @@ -168,13 +172,36 @@
}

const toggleCam = async (e) => {
peerConnection.getSenders().forEach(sender => {
if (sender.track.kind === 'video') {
sender.track.enabled = !mutedCam
mutedCam = !mutedCam
e.target.innerText = !sender.track.enabled?'Unmute Cam':'Mute Cam'
const trackIds = screenStream?screenStream.getTracks().map(track=>track.id):[]
peerConnection.getSenders().forEach(async (sender) => {
if (sender.track && sender.track.kind === 'video' && !trackIds.includes(sender.track.id)) {
if (!mutedCam && sender.track.readyState === 'live') {
sender.track.stop()
stream.removeTrack(sender.track)
} else {
const newStream = await navigator.mediaDevices.getUserMedia({audio:false,video:{
width: {ideal: 1280},
height: {ideal: 720},
advanced: [{
frameRate: {min: 30}},
{height: {min: 360}},
{width: {min: 720}},
{frameRate: {max: 30}},
{width: {max: 1280}},
{height: {max: 720}},
{aspectRatio: {exact: 1.77778}}
]}})
const videoTrack = newStream.getVideoTracks()[0]
sender.replaceTrack(videoTrack)
stream.addTrack(videoTrack)

}

}
})

mutedCam = !mutedCam
e.target.innerText = mutedCam?'Unmute Cam':'Mute Cam'
}

const startWs =async ()=>{
Expand Down Expand Up @@ -350,8 +377,11 @@
// video: true
};

const stream = await navigator.mediaDevices.getUserMedia(constraints)
const streamid = stream.id.replace('{','').replace('}','');
const initStream = await navigator.mediaDevices.getUserMedia(constraints)
const streamid = initStream.id.replace('{','').replace('}','');
initStream.getTracks().forEach(track => {
stream.addTrack(track)
})
let container = document.getElementById("container-"+streamid);
if (!container) {
container = document.createElement("div");
Expand All @@ -369,7 +399,7 @@
container.appendChild(localVideo);
}

localVideo.srcObject =stream;
localVideo.srcObject = stream;

const audioTcvr= peerConnection.addTransceiver(stream.getAudioTracks()[0], {
direction: 'sendonly',
Expand Down Expand Up @@ -915,35 +945,54 @@ <h3>Low</h3>
}

const shareScreen = async () =>{
const stream = await navigator.mediaDevices.getDisplayMedia({
if (screenStream!=null){
const trackIds = screenStream.getTracks().map(track=>track.id)

peerConnection.getSenders().forEach(sender=>{
if (sender.track && trackIds.includes(sender.track.id)){
sender.track.stop()
peerConnection.removeTrack(sender)
}
})

document.getElementById("container-"+screenStream.id).remove()

screenStream = null

isAllowRenegotiation();

return
}

screenStream = await navigator.mediaDevices.getDisplayMedia({
video: true,
audio: true
})

const videoTrack = stream.getVideoTracks()[0];
const audioTrack = stream.getAudioTracks()[0];
const videoTrack = screenStream.getVideoTracks()[0];
const audioTrack = screenStream.getAudioTracks()[0];

let tscvAudio = null;
let tscvVideo = null;

if (typeof audioTrack != "undefined"){
tscvAudio=peerConnection.addTransceiver(audioTrack, {
direction: 'sendonly',
streams: [stream],
streams: [screenStream],
sendEncodings: [{priority: 'high'}],
})
}

setCodecPreferences(peerConnection,stream, 'vp9', "L1T3")
setCodecPreferences(peerConnection,screenStream, 'vp9', "L1T3")

const container = document.createElement("div");
container.className = "container";
container.id = "container-"+videoTrack.id;
container.id = "container-"+screenStream.id;

const video = document.createElement("video");
video.id = "video-"+videoTrack.id;
video.autoplay = true;
video.srcObject = stream;
video.srcObject = screenStream;
container.appendChild(video);

document.querySelector('main').appendChild(container);
Expand Down
3 changes: 2 additions & 1 deletion remotetrack.go
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,8 @@ func (t *remoteTrack) readRTP() {
return
}

t.log.Errorf("remotetrack: read error: %s", readErr.Error())
t.log.Tracef("remotetrack: read error: %s", readErr.Error())
t.rtppool.PutPayload(buffer)
continue
}

Expand Down

0 comments on commit b85c85d

Please sign in to comment.