openvidu-browser: fix echo when calling Publisher#replaceTrack

pull/739/head
pabloFuente 2022-06-23 13:22:50 +02:00
parent 6269db8978
commit 17ff9105aa
6 changed files with 1353 additions and 749 deletions

File diff suppressed because it is too large Load Diff

View File

@ -6,7 +6,7 @@
"jsnlog": "2.30.0", "jsnlog": "2.30.0",
"mime": "3.0.0", "mime": "3.0.0",
"platform": "1.3.6", "platform": "1.3.6",
"semver": "7.3.5", "semver": "7.3.7",
"uuid": "8.3.2", "uuid": "8.3.2",
"wolfy87-eventemitter": "5.2.9", "wolfy87-eventemitter": "5.2.9",
"events": "3.3.0", "events": "3.3.0",
@ -14,22 +14,22 @@
}, },
"description": "OpenVidu Browser", "description": "OpenVidu Browser",
"devDependencies": { "devDependencies": {
"@types/node": "17.0.8", "@types/node": "18.0.0",
"@types/platform": "1.3.4", "@types/platform": "1.3.4",
"browserify": "17.0.0", "browserify": "17.0.0",
"grunt": "1.4.1", "grunt": "1.5.3",
"grunt-cli": "1.4.3", "grunt-cli": "1.4.3",
"grunt-contrib-copy": "1.0.0", "grunt-contrib-copy": "1.0.0",
"grunt-contrib-sass": "2.0.0", "grunt-contrib-sass": "2.0.0",
"grunt-contrib-uglify": "5.0.1", "grunt-contrib-uglify": "5.2.2",
"grunt-contrib-watch": "1.1.0", "grunt-contrib-watch": "1.1.0",
"grunt-postcss": "0.9.0", "grunt-postcss": "0.9.0",
"grunt-string-replace": "1.3.1", "grunt-string-replace": "1.3.3",
"grunt-ts": "6.0.0-beta.22", "grunt-ts": "6.0.0-beta.22",
"terser": "5.10.0", "terser": "5.14.1",
"tsify": "5.0.4", "tsify": "5.0.4",
"tslint": "6.1.3", "tslint": "6.1.3",
"typedoc": "0.22.10", "typedoc": "0.22.17",
"typescript": "4.5.4" "typescript": "4.5.4"
}, },
"license": "Apache-2.0", "license": "Apache-2.0",

View File

@ -741,8 +741,10 @@ export class Publisher extends StreamManager {
*/ */
initializeVideoReference(mediaStream: MediaStream) { initializeVideoReference(mediaStream: MediaStream) {
this.videoReference = document.createElement('video'); this.videoReference = document.createElement('video');
this.videoReference.setAttribute('muted', 'true');
this.videoReference.style.display = 'none'; this.videoReference.style.display = 'none';
this.videoReference.muted = true;
this.videoReference.autoplay = true;
this.videoReference.controls = false;
if (platform.isSafariBrowser() || (platform.isIPhoneOrIPad() && (platform.isChromeMobileBrowser() || platform.isEdgeMobileBrowser() || platform.isOperaMobileBrowser() || platform.isFirefoxMobileBrowser()))) { if (platform.isSafariBrowser() || (platform.isIPhoneOrIPad() && (platform.isChromeMobileBrowser() || platform.isEdgeMobileBrowser() || platform.isOperaMobileBrowser() || platform.isFirefoxMobileBrowser()))) {
this.videoReference.setAttribute('playsinline', 'true'); this.videoReference.setAttribute('playsinline', 'true');
} }
@ -750,13 +752,13 @@ export class Publisher extends StreamManager {
if (!!this.firstVideoElement) { if (!!this.firstVideoElement) {
this.createVideoElement(this.firstVideoElement.targetElement, <VideoInsertMode>this.properties.insertMode); this.createVideoElement(this.firstVideoElement.targetElement, <VideoInsertMode>this.properties.insertMode);
} }
this.videoReference.srcObject = mediaStream; this.videoReference.srcObject = this.stream.getMediaStream();
} }
/** /**
* @hidden * @hidden
*/ */
async replaceTrackInMediaStream(track: MediaStreamTrack, updateLastConstraints: boolean): Promise<void> { replaceTrackInMediaStream(track: MediaStreamTrack, updateLastConstraints: boolean): void {
const mediaStream: MediaStream = this.stream.displayMyRemote() ? this.stream.localMediaStreamWhenSubscribedToRemote! : this.stream.getMediaStream(); const mediaStream: MediaStream = this.stream.displayMyRemote() ? this.stream.localMediaStreamWhenSubscribedToRemote! : this.stream.getMediaStream();
let removedTrack: MediaStreamTrack; let removedTrack: MediaStreamTrack;
if (track.kind === 'video') { if (track.kind === 'video') {
@ -767,8 +769,9 @@ export class Publisher extends StreamManager {
} else { } else {
removedTrack = mediaStream.getAudioTracks()[0]; removedTrack = mediaStream.getAudioTracks()[0];
} }
mediaStream.removeTrack(removedTrack); removedTrack.enabled = false;
removedTrack.stop(); removedTrack.stop();
mediaStream.removeTrack(removedTrack);
mediaStream.addTrack(track); mediaStream.addTrack(track);
if (track.kind === 'video' && this.stream.isLocalStreamPublished && updateLastConstraints) { if (track.kind === 'video' && this.stream.isLocalStreamPublished && updateLastConstraints) {
this.openvidu.sendNewVideoDimensionsIfRequired(this, 'trackReplaced', 50, 30); this.openvidu.sendNewVideoDimensionsIfRequired(this, 'trackReplaced', 50, 30);

View File

@ -557,7 +557,7 @@ export class Stream {
const mediaStreamClone = this.virtualBackgroundSourceElements!.mediaStreamClone; const mediaStreamClone = this.virtualBackgroundSourceElements!.mediaStreamClone;
if (!isDisposing) { if (!isDisposing) {
if (this.streamManager.remote) { if (this.streamManager.remote) {
await this.streamManager.replaceTrackInMediaStream(mediaStreamClone.getVideoTracks()[0], false); this.streamManager.replaceTrackInMediaStream(mediaStreamClone.getVideoTracks()[0], false);
} else { } else {
await (this.streamManager as Publisher).replaceTrackAux(mediaStreamClone.getVideoTracks()[0], false); await (this.streamManager as Publisher).replaceTrackAux(mediaStreamClone.getVideoTracks()[0], false);
} }

View File

@ -529,7 +529,7 @@ export abstract class StreamManager extends EventDispatcher {
/** /**
* @hidden * @hidden
*/ */
abstract replaceTrackInMediaStream(track: MediaStreamTrack, updateLastConstraints: boolean): Promise<void>; abstract replaceTrackInMediaStream(track: MediaStreamTrack, updateLastConstraints: boolean): void;
/* Private methods */ /* Private methods */

View File

@ -78,7 +78,7 @@ export class Subscriber extends StreamManager {
/** /**
* @hidden * @hidden
*/ */
async replaceTrackInMediaStream(track: MediaStreamTrack, updateLastConstraints: boolean): Promise<void> { replaceTrackInMediaStream(track: MediaStreamTrack, updateLastConstraints: boolean): void {
const mediaStream: MediaStream = this.stream.getMediaStream(); const mediaStream: MediaStream = this.stream.getMediaStream();
let removedTrack: MediaStreamTrack; let removedTrack: MediaStreamTrack;
if (track.kind === 'video') { if (track.kind === 'video') {