mirror of https://github.com/OpenVidu/openvidu.git
openvidu-browser: improve send videoData with interval
parent
03adf77662
commit
da084e2b31
|
@ -314,7 +314,7 @@ export class Publisher extends StreamManager {
|
||||||
mediaStream.removeTrack(removedTrack);
|
mediaStream.removeTrack(removedTrack);
|
||||||
removedTrack.stop();
|
removedTrack.stop();
|
||||||
mediaStream.addTrack(track);
|
mediaStream.addTrack(track);
|
||||||
this.session.sendVideoData(this.stream.streamManager);
|
this.session.sendVideoData(this.stream.streamManager, 5, true, 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
|
@ -613,8 +613,8 @@ export class Publisher extends StreamManager {
|
||||||
.then(myConstraints => {
|
.then(myConstraints => {
|
||||||
|
|
||||||
if (!!myConstraints.videoTrack && !!myConstraints.audioTrack ||
|
if (!!myConstraints.videoTrack && !!myConstraints.audioTrack ||
|
||||||
!!myConstraints.audioTrack && myConstraints.constraints?.video === false ||
|
!!myConstraints.audioTrack && myConstraints.constraints?.video === false ||
|
||||||
!!myConstraints.videoTrack && myConstraints.constraints?.audio === false) {
|
!!myConstraints.videoTrack && myConstraints.constraints?.audio === false) {
|
||||||
// No need to call getUserMedia at all. MediaStreamTracks already provided
|
// No need to call getUserMedia at all. MediaStreamTracks already provided
|
||||||
successCallback(this.openvidu.addAlreadyProvidedTracks(myConstraints, new MediaStream()));
|
successCallback(this.openvidu.addAlreadyProvidedTracks(myConstraints, new MediaStream()));
|
||||||
// Return as we do not need to process further
|
// Return as we do not need to process further
|
||||||
|
|
|
@ -385,7 +385,7 @@ export class Session extends EventDispatcher {
|
||||||
this.connection.addStream(publisher.stream);
|
this.connection.addStream(publisher.stream);
|
||||||
publisher.stream.publish()
|
publisher.stream.publish()
|
||||||
.then(() => {
|
.then(() => {
|
||||||
this.sendVideoData(publisher, 5);
|
this.sendVideoData(publisher, 8, true, 5);
|
||||||
resolve();
|
resolve();
|
||||||
})
|
})
|
||||||
.catch(error => {
|
.catch(error => {
|
||||||
|
@ -399,7 +399,7 @@ export class Session extends EventDispatcher {
|
||||||
publisher.reestablishStreamPlayingEvent();
|
publisher.reestablishStreamPlayingEvent();
|
||||||
publisher.stream.publish()
|
publisher.stream.publish()
|
||||||
.then(() => {
|
.then(() => {
|
||||||
this.sendVideoData(publisher, 5);
|
this.sendVideoData(publisher, 8, true, 5);
|
||||||
resolve();
|
resolve();
|
||||||
})
|
})
|
||||||
.catch(error => {
|
.catch(error => {
|
||||||
|
@ -1162,30 +1162,46 @@ export class Session extends EventDispatcher {
|
||||||
return joinParams;
|
return joinParams;
|
||||||
}
|
}
|
||||||
|
|
||||||
sendVideoData(streamManager: StreamManager, intervalSeconds: number = 1) {
|
sendVideoData(streamManager: StreamManager, intervalSeconds: number = 1, doInterval: boolean = false, maxLoops: number = 1) {
|
||||||
if (
|
if (
|
||||||
platform.isChromeBrowser() || platform.isChromeMobileBrowser() || platform.isOperaBrowser() ||
|
platform.isChromeBrowser() || platform.isChromeMobileBrowser() || platform.isOperaBrowser() ||
|
||||||
platform.isOperaMobileBrowser() || platform.isElectron() || (platform.isSafariBrowser() && !platform.isIonicIos()) ||
|
platform.isOperaMobileBrowser() || platform.isElectron() || (platform.isSafariBrowser() && !platform.isIonicIos()) ||
|
||||||
platform.isAndroidBrowser() || platform.isSamsungBrowser() || platform.isIonicAndroid() ||
|
platform.isAndroidBrowser() || platform.isSamsungBrowser() || platform.isIonicAndroid() ||
|
||||||
(platform.isIPhoneOrIPad() && platform.isIOSWithSafari())
|
(platform.isIPhoneOrIPad() && platform.isIOSWithSafari())
|
||||||
) {
|
) {
|
||||||
setTimeout(async () => {
|
const obtainAndSendVideo = async () => {
|
||||||
const statsMap = await streamManager.stream.getWebRtcPeer().pc.getStats();
|
const statsMap = await streamManager.stream.getRTCPeerConnection().getStats();
|
||||||
statsMap.forEach((stats) => {
|
const arr: any[] = [];
|
||||||
if ("frameWidth" in stats) {
|
statsMap.forEach(stats => {
|
||||||
this.openvidu.sendRequest('videoData', {
|
if (("frameWidth" in stats) && ("frameHeight" in stats) && (arr.length === 0)) {
|
||||||
height: stats.frameHeight,
|
arr.push(stats);
|
||||||
width: stats.frameWidth,
|
|
||||||
videoActive: streamManager.stream.videoActive,
|
|
||||||
audioActive: streamManager.stream.audioActive
|
|
||||||
}, (error, response) => {
|
|
||||||
if (error) {
|
|
||||||
logger.error("Error sending 'videoData' event", error);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}, intervalSeconds * 1000);
|
if (arr.length > 0) {
|
||||||
|
this.openvidu.sendRequest('videoData', {
|
||||||
|
height: arr[0].frameHeight,
|
||||||
|
width: arr[0].frameWidth,
|
||||||
|
videoActive: streamManager.stream.videoActive != null ? streamManager.stream.videoActive : false,
|
||||||
|
audioActive: streamManager.stream.audioActive != null ? streamManager.stream.audioActive : false
|
||||||
|
}, (error, response) => {
|
||||||
|
if (error) {
|
||||||
|
logger.error("Error sending 'videoData' event", error);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (doInterval) {
|
||||||
|
let loops = 1;
|
||||||
|
let timer = setTimeout(async function myTimer() {
|
||||||
|
await obtainAndSendVideo();
|
||||||
|
if (loops < maxLoops) {
|
||||||
|
loops++;
|
||||||
|
timer = setTimeout(myTimer, intervalSeconds * 1000);
|
||||||
|
}
|
||||||
|
}, intervalSeconds * 1000);
|
||||||
|
} else {
|
||||||
|
setTimeout(obtainAndSendVideo, intervalSeconds * 1000);
|
||||||
|
}
|
||||||
} else if (platform.isFirefoxBrowser() || platform.isFirefoxMobileBrowser() || platform.isIonicIos()) {
|
} else if (platform.isFirefoxBrowser() || platform.isFirefoxMobileBrowser() || platform.isIonicIos()) {
|
||||||
// Basic version for Firefox and Ionic iOS. They do not support stats
|
// Basic version for Firefox and Ionic iOS. They do not support stats
|
||||||
this.openvidu.sendRequest('videoData', {
|
this.openvidu.sendRequest('videoData', {
|
||||||
|
|
Loading…
Reference in New Issue