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",
"mime": "3.0.0",
"platform": "1.3.6",
"semver": "7.3.5",
"semver": "7.3.7",
"uuid": "8.3.2",
"wolfy87-eventemitter": "5.2.9",
"events": "3.3.0",
@ -14,22 +14,22 @@
},
"description": "OpenVidu Browser",
"devDependencies": {
"@types/node": "17.0.8",
"@types/node": "18.0.0",
"@types/platform": "1.3.4",
"browserify": "17.0.0",
"grunt": "1.4.1",
"grunt": "1.5.3",
"grunt-cli": "1.4.3",
"grunt-contrib-copy": "1.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-postcss": "0.9.0",
"grunt-string-replace": "1.3.1",
"grunt-string-replace": "1.3.3",
"grunt-ts": "6.0.0-beta.22",
"terser": "5.10.0",
"terser": "5.14.1",
"tsify": "5.0.4",
"tslint": "6.1.3",
"typedoc": "0.22.10",
"typedoc": "0.22.17",
"typescript": "4.5.4"
},
"license": "Apache-2.0",

View File

@ -741,8 +741,10 @@ export class Publisher extends StreamManager {
*/
initializeVideoReference(mediaStream: MediaStream) {
this.videoReference = document.createElement('video');
this.videoReference.setAttribute('muted', 'true');
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()))) {
this.videoReference.setAttribute('playsinline', 'true');
}
@ -750,13 +752,13 @@ export class Publisher extends StreamManager {
if (!!this.firstVideoElement) {
this.createVideoElement(this.firstVideoElement.targetElement, <VideoInsertMode>this.properties.insertMode);
}
this.videoReference.srcObject = mediaStream;
this.videoReference.srcObject = this.stream.getMediaStream();
}
/**
* @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();
let removedTrack: MediaStreamTrack;
if (track.kind === 'video') {
@ -767,8 +769,9 @@ export class Publisher extends StreamManager {
} else {
removedTrack = mediaStream.getAudioTracks()[0];
}
mediaStream.removeTrack(removedTrack);
removedTrack.enabled = false;
removedTrack.stop();
mediaStream.removeTrack(removedTrack);
mediaStream.addTrack(track);
if (track.kind === 'video' && this.stream.isLocalStreamPublished && updateLastConstraints) {
this.openvidu.sendNewVideoDimensionsIfRequired(this, 'trackReplaced', 50, 30);

View File

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

View File

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

View File

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