openvidu-browser
Advanced tools
Comparing version 2.12.0 to 2.13.0
@@ -22,4 +22,8 @@ module.exports = { | ||
excludePrivate: true, | ||
excludeNotExported: true, | ||
theme: "default", | ||
readme: "none" | ||
readme: "none", | ||
includeVersion: true, | ||
listInvalidSymbolLinks: true, | ||
out: "./docs" | ||
} |
@@ -159,3 +159,3 @@ import { LocalRecorder } from './LocalRecorder'; | ||
* - `screenShareChromeExtension`: url to a custom screen share extension for Chrome to be used instead of the default one, based on ours [https://github.com/OpenVidu/openvidu-screen-sharing-chrome-extension](https://github.com/OpenVidu/openvidu-screen-sharing-chrome-extension) | ||
* - `publisherSpeakingEventsOptions`: custom configuration for the [[PublisherSpeakingEvent]] feature and the [StreamManagerEvent.streamAudioVolumeChange](/api/openvidu-browser/classes/streammanagerevent.html) feature | ||
* - `publisherSpeakingEventsOptions`: custom configuration for the [[PublisherSpeakingEvent]] feature and the [StreamManagerEvent.streamAudioVolumeChange](/en/stable/api/openvidu-browser/classes/streammanagerevent.html) feature | ||
* | ||
@@ -162,0 +162,0 @@ * Call this method to override previous values at any moment. |
@@ -162,3 +162,3 @@ "use strict"; | ||
* The [[Publisher]] object will dispatch a `videoElementCreated` event once a HTML video element has been added to DOM (only if you | ||
* [let OpenVidu take care of the video players](/docs/how-do-i/manage-videos/#let-openvidu-take-care-of-the-video-players)). See [[VideoElementEvent]] to learn more. | ||
* [let OpenVidu take care of the video players](/en/stable/cheatsheet/manage-videos/#let-openvidu-take-care-of-the-video-players)). See [[VideoElementEvent]] to learn more. | ||
* | ||
@@ -168,3 +168,3 @@ * The [[Publisher]] object will dispatch a `streamPlaying` event once the local streams starts playing. See [[StreamManagerEvent]] to learn more. | ||
* @param targetElement HTML DOM element (or its `id` attribute) in which the video element of the Publisher will be inserted (see [[PublisherProperties.insertMode]]). If *null* or *undefined* no default video will be created for this Publisher. | ||
* You can always call method [[Publisher.addVideoElement]] or [[Publisher.createVideoElement]] to manage the video elements on your own (see [Manage video players](/docs/how-do-i/manage-videos) section) | ||
* You can always call method [[Publisher.addVideoElement]] or [[Publisher.createVideoElement]] to manage the video elements on your own (see [Manage video players](/en/stable/cheatsheet/manage-videos) section) | ||
* @param completionHandler `error` parameter is null if `initPublisher` succeeds, and is defined if it fails. | ||
@@ -562,3 +562,3 @@ * `completionHandler` function is called before the Publisher dispatches an `accessAllowed` or an `accessDenied` event | ||
* - `screenShareChromeExtension`: url to a custom screen share extension for Chrome to be used instead of the default one, based on ours [https://github.com/OpenVidu/openvidu-screen-sharing-chrome-extension](https://github.com/OpenVidu/openvidu-screen-sharing-chrome-extension) | ||
* - `publisherSpeakingEventsOptions`: custom configuration for the [[PublisherSpeakingEvent]] feature and the [StreamManagerEvent.streamAudioVolumeChange](/api/openvidu-browser/classes/streammanagerevent.html) feature | ||
* - `publisherSpeakingEventsOptions`: custom configuration for the [[PublisherSpeakingEvent]] feature and the [StreamManagerEvent.streamAudioVolumeChange](/en/stable/api/openvidu-browser/classes/streammanagerevent.html) feature | ||
* | ||
@@ -565,0 +565,0 @@ * Call this method to override previous values at any moment. |
@@ -99,3 +99,4 @@ "use strict"; | ||
if (this.stream.audioActive !== value) { | ||
this.stream.getMediaStream().getAudioTracks().forEach(function (track) { | ||
var affectedMediaStream = this.stream.displayMyRemote() ? this.stream.localMediaStreamWhenSubscribedToRemote : this.stream.getMediaStream(); | ||
affectedMediaStream.getAudioTracks().forEach(function (track) { | ||
track.enabled = value; | ||
@@ -143,3 +144,4 @@ }); | ||
if (this.stream.videoActive !== value) { | ||
this.stream.getMediaStream().getVideoTracks().forEach(function (track) { | ||
var affectedMediaStream = this.stream.displayMyRemote() ? this.stream.localMediaStreamWhenSubscribedToRemote : this.stream.getMediaStream(); | ||
affectedMediaStream.getVideoTracks().forEach(function (track) { | ||
track.enabled = value; | ||
@@ -265,35 +267,47 @@ }); | ||
var _this = this; | ||
return new Promise(function (resolve, reject) { | ||
var senders = _this.stream.getRTCPeerConnection().getSenders(); | ||
var sender; | ||
var replaceMediaStreamTrack = function () { | ||
var mediaStream = _this.stream.displayMyRemote() ? _this.stream.localMediaStreamWhenSubscribedToRemote : _this.stream.getMediaStream(); | ||
var removedTrack; | ||
if (track.kind === 'video') { | ||
sender = senders.find(function (s) { return !!s.track && s.track.kind === 'video'; }); | ||
if (!sender) { | ||
reject(new Error('There\'s no replaceable track for that kind of MediaStreamTrack in this Publisher object')); | ||
} | ||
removedTrack = mediaStream.getVideoTracks()[0]; | ||
} | ||
else if (track.kind === 'audio') { | ||
sender = senders.find(function (s) { return !!s.track && s.track.kind === 'audio'; }); | ||
if (!sender) { | ||
reject(new Error('There\'s no replaceable track for that kind of MediaStreamTrack in this Publisher object')); | ||
} | ||
} | ||
else { | ||
reject(new Error('Unknown track kind ' + track.kind)); | ||
removedTrack = mediaStream.getAudioTracks()[0]; | ||
} | ||
sender.replaceTrack(track).then(function () { | ||
var removedTrack; | ||
mediaStream.removeTrack(removedTrack); | ||
removedTrack.stop(); | ||
mediaStream.addTrack(track); | ||
}; | ||
return new Promise(function (resolve, reject) { | ||
if (_this.stream.isLocalStreamPublished) { | ||
// Only if the Publisher has been published is necessary to call native Web API RTCRtpSender.replaceTrack | ||
var senders = _this.stream.getRTCPeerConnection().getSenders(); | ||
var sender = void 0; | ||
if (track.kind === 'video') { | ||
removedTrack = _this.stream.getMediaStream().getVideoTracks()[0]; | ||
sender = senders.find(function (s) { return !!s.track && s.track.kind === 'video'; }); | ||
if (!sender) { | ||
reject(new Error('There\'s no replaceable track for that kind of MediaStreamTrack in this Publisher object')); | ||
} | ||
} | ||
else if (track.kind === 'audio') { | ||
sender = senders.find(function (s) { return !!s.track && s.track.kind === 'audio'; }); | ||
if (!sender) { | ||
reject(new Error('There\'s no replaceable track for that kind of MediaStreamTrack in this Publisher object')); | ||
} | ||
} | ||
else { | ||
removedTrack = _this.stream.getMediaStream().getAudioTracks()[0]; | ||
reject(new Error('Unknown track kind ' + track.kind)); | ||
} | ||
_this.stream.getMediaStream().removeTrack(removedTrack); | ||
removedTrack.stop(); | ||
_this.stream.getMediaStream().addTrack(track); | ||
sender.replaceTrack(track).then(function () { | ||
replaceMediaStreamTrack(); | ||
resolve(); | ||
})["catch"](function (error) { | ||
reject(error); | ||
}); | ||
} | ||
else { | ||
// Publisher not published. Simply modify local MediaStream tracks | ||
replaceMediaStreamTrack(); | ||
resolve(); | ||
})["catch"](function (error) { | ||
reject(error); | ||
}); | ||
} | ||
}); | ||
@@ -300,0 +314,0 @@ }; |
@@ -114,3 +114,3 @@ import { Connection } from './Connection'; | ||
* This event will automatically unsubscribe the leaving participant from every Subscriber object of the session (this includes closing the WebRTCPeer connection and disposing all MediaStreamTracks) | ||
* and also deletes any HTML video element associated to each Subscriber (only those [created by OpenVidu Browser](/docs/how-do-i/manage-videos/#let-openvidu-take-care-of-the-video-players)). | ||
* and also deletes any HTML video element associated to each Subscriber (only those [created by OpenVidu Browser](/en/stable/cheatsheet/manage-videos/#let-openvidu-take-care-of-the-video-players)). | ||
* For every video removed, each Subscriber object will dispatch a `videoElementDestroyed` event. | ||
@@ -121,3 +121,3 @@ * Call `event.preventDefault()` upon event `sessionDisconnected` to avoid this behavior and take care of disposing and cleaning all the Subscriber objects yourself. | ||
* The [[Publisher]] object of the local participant will dispatch a `streamDestroyed` event if there is a [[Publisher]] object publishing to the session. | ||
* This event will automatically stop all media tracks and delete any HTML video element associated to it (only those [created by OpenVidu Browser](/docs/how-do-i/manage-videos/#let-openvidu-take-care-of-the-video-players)). | ||
* This event will automatically stop all media tracks and delete any HTML video element associated to it (only those [created by OpenVidu Browser](/en/stable/cheatsheet/manage-videos/#let-openvidu-take-care-of-the-video-players)). | ||
* For every video removed, the Publisher object will dispatch a `videoElementDestroyed` event. | ||
@@ -129,3 +129,3 @@ * Call `event.preventDefault()` upon event `streamDestroyed` if you want to clean the Publisher object on your own or re-publish it in a different Session (to do so it is a mandatory requirement to call `Session.unpublish()` | ||
* This event will automatically unsubscribe the Subscriber object from the session (this includes closing the WebRTCPeer connection and disposing all MediaStreamTracks) | ||
* and also deletes any HTML video element associated to that Subscriber (only those [created by OpenVidu Browser](/docs/how-do-i/manage-videos/#let-openvidu-take-care-of-the-video-players)). | ||
* and also deletes any HTML video element associated to that Subscriber (only those [created by OpenVidu Browser](/en/stable/cheatsheet/manage-videos/#let-openvidu-take-care-of-the-video-players)). | ||
* For every video removed, the Subscriber object will dispatch a `videoElementDestroyed` event. | ||
@@ -153,3 +153,3 @@ * Call `event.preventDefault()` upon event `streamDestroyed` to avoid this default behavior and take care of disposing and cleaning the Subscriber object yourself. | ||
* The [[Subscriber]] object will dispatch a `videoElementDestroyed` event for each video associated to it that was removed from DOM. | ||
* Only videos [created by OpenVidu Browser](/docs/how-do-i/manage-videos/#let-openvidu-take-care-of-the-video-players)) will be automatically removed | ||
* Only videos [created by OpenVidu Browser](/en/stable/cheatsheet/manage-videos/#let-openvidu-take-care-of-the-video-players)) will be automatically removed | ||
* | ||
@@ -180,3 +180,3 @@ * See [[VideoElementEvent]] to learn more | ||
* This event will automatically stop all media tracks and delete any HTML video element associated to this Publisher | ||
* (only those videos [created by OpenVidu Browser](/docs/how-do-i/manage-videos/#let-openvidu-take-care-of-the-video-players)). | ||
* (only those videos [created by OpenVidu Browser](/en/stable/cheatsheet/manage-videos/#let-openvidu-take-care-of-the-video-players)). | ||
* For every video removed, the Publisher object will dispatch a `videoElementDestroyed` event. | ||
@@ -187,3 +187,3 @@ * Call `event.preventDefault()` upon event `streamDestroyed` if you want to clean the Publisher object on your own or re-publish it in a different Session. | ||
* This event will automatically unsubscribe the Subscriber object from the session (this includes closing the WebRTCPeer connection and disposing all MediaStreamTracks) and | ||
* delete any HTML video element associated to it (only those [created by OpenVidu Browser](/docs/how-do-i/manage-videos/#let-openvidu-take-care-of-the-video-players)). | ||
* delete any HTML video element associated to it (only those [created by OpenVidu Browser](/en/stable/cheatsheet/manage-videos/#let-openvidu-take-care-of-the-video-players)). | ||
* For every video removed, the Subscriber object will dispatch a `videoElementDestroyed` event. | ||
@@ -190,0 +190,0 @@ * Call `event.preventDefault()` upon event `streamDestroyed` to avoid this default behavior and take care of disposing and cleaning the Subscriber object on your own. |
@@ -156,3 +156,3 @@ "use strict"; | ||
* This event will automatically unsubscribe the leaving participant from every Subscriber object of the session (this includes closing the WebRTCPeer connection and disposing all MediaStreamTracks) | ||
* and also deletes any HTML video element associated to each Subscriber (only those [created by OpenVidu Browser](/docs/how-do-i/manage-videos/#let-openvidu-take-care-of-the-video-players)). | ||
* and also deletes any HTML video element associated to each Subscriber (only those [created by OpenVidu Browser](/en/stable/cheatsheet/manage-videos/#let-openvidu-take-care-of-the-video-players)). | ||
* For every video removed, each Subscriber object will dispatch a `videoElementDestroyed` event. | ||
@@ -163,3 +163,3 @@ * Call `event.preventDefault()` upon event `sessionDisconnected` to avoid this behavior and take care of disposing and cleaning all the Subscriber objects yourself. | ||
* The [[Publisher]] object of the local participant will dispatch a `streamDestroyed` event if there is a [[Publisher]] object publishing to the session. | ||
* This event will automatically stop all media tracks and delete any HTML video element associated to it (only those [created by OpenVidu Browser](/docs/how-do-i/manage-videos/#let-openvidu-take-care-of-the-video-players)). | ||
* This event will automatically stop all media tracks and delete any HTML video element associated to it (only those [created by OpenVidu Browser](/en/stable/cheatsheet/manage-videos/#let-openvidu-take-care-of-the-video-players)). | ||
* For every video removed, the Publisher object will dispatch a `videoElementDestroyed` event. | ||
@@ -171,3 +171,3 @@ * Call `event.preventDefault()` upon event `streamDestroyed` if you want to clean the Publisher object on your own or re-publish it in a different Session (to do so it is a mandatory requirement to call `Session.unpublish()` | ||
* This event will automatically unsubscribe the Subscriber object from the session (this includes closing the WebRTCPeer connection and disposing all MediaStreamTracks) | ||
* and also deletes any HTML video element associated to that Subscriber (only those [created by OpenVidu Browser](/docs/how-do-i/manage-videos/#let-openvidu-take-care-of-the-video-players)). | ||
* and also deletes any HTML video element associated to that Subscriber (only those [created by OpenVidu Browser](/en/stable/cheatsheet/manage-videos/#let-openvidu-take-care-of-the-video-players)). | ||
* For every video removed, the Subscriber object will dispatch a `videoElementDestroyed` event. | ||
@@ -188,3 +188,3 @@ * Call `event.preventDefault()` upon event `streamDestroyed` to avoid this default behavior and take care of disposing and cleaning the Subscriber object yourself. | ||
* The [[Subscriber]] object will dispatch a `videoElementCreated` event once the HTML video element has been added to DOM (only if you | ||
* [let OpenVidu take care of the video players](/docs/how-do-i/manage-videos/#let-openvidu-take-care-of-the-video-players)). See [[VideoElementEvent]] to learn more. | ||
* [let OpenVidu take care of the video players](/en/stable/cheatsheet/manage-videos/#let-openvidu-take-care-of-the-video-players)). See [[VideoElementEvent]] to learn more. | ||
* | ||
@@ -195,3 +195,3 @@ * The [[Subscriber]] object will dispatch a `streamPlaying` event once the remote stream starts playing. See [[StreamManagerEvent]] to learn more. | ||
* @param targetElement HTML DOM element (or its `id` attribute) in which the video element of the Subscriber will be inserted (see [[SubscriberProperties.insertMode]]). If *null* or *undefined* no default video will be created for this Subscriber. | ||
* You can always call method [[Subscriber.addVideoElement]] or [[Subscriber.createVideoElement]] to manage the video elements on your own (see [Manage video players](/docs/how-do-i/manage-videos) section) | ||
* You can always call method [[Subscriber.addVideoElement]] or [[Subscriber.createVideoElement]] to manage the video elements on your own (see [Manage video players](/en/stable/cheatsheet/manage-videos) section) | ||
* @param completionHandler `error` parameter is null if `subscribe` succeeds, and is defined if it fails. | ||
@@ -266,3 +266,3 @@ */ | ||
* The [[Subscriber]] object will dispatch a `videoElementDestroyed` event for each video associated to it that was removed from DOM. | ||
* Only videos [created by OpenVidu Browser](/docs/how-do-i/manage-videos/#let-openvidu-take-care-of-the-video-players)) will be automatically removed | ||
* Only videos [created by OpenVidu Browser](/en/stable/cheatsheet/manage-videos/#let-openvidu-take-care-of-the-video-players)) will be automatically removed | ||
* | ||
@@ -339,3 +339,3 @@ * See [[VideoElementEvent]] to learn more | ||
* This event will automatically stop all media tracks and delete any HTML video element associated to this Publisher | ||
* (only those videos [created by OpenVidu Browser](/docs/how-do-i/manage-videos/#let-openvidu-take-care-of-the-video-players)). | ||
* (only those videos [created by OpenVidu Browser](/en/stable/cheatsheet/manage-videos/#let-openvidu-take-care-of-the-video-players)). | ||
* For every video removed, the Publisher object will dispatch a `videoElementDestroyed` event. | ||
@@ -346,3 +346,3 @@ * Call `event.preventDefault()` upon event `streamDestroyed` if you want to clean the Publisher object on your own or re-publish it in a different Session. | ||
* This event will automatically unsubscribe the Subscriber object from the session (this includes closing the WebRTCPeer connection and disposing all MediaStreamTracks) and | ||
* delete any HTML video element associated to it (only those [created by OpenVidu Browser](/docs/how-do-i/manage-videos/#let-openvidu-take-care-of-the-video-players)). | ||
* delete any HTML video element associated to it (only those [created by OpenVidu Browser](/en/stable/cheatsheet/manage-videos/#let-openvidu-take-care-of-the-video-players)). | ||
* For every video removed, the Subscriber object will dispatch a `videoElementDestroyed` event. | ||
@@ -826,3 +826,2 @@ * Call `event.preventDefault()` upon event `streamDestroyed` to avoid this default behavior and take care of disposing and cleaning the Subscriber object on your own. | ||
foundation: msg.foundation, | ||
ip: msg.ip, | ||
port: msg.port, | ||
@@ -829,0 +828,0 @@ priority: msg.priority, |
@@ -157,2 +157,6 @@ import { Connection } from './Connection'; | ||
*/ | ||
localMediaStreamWhenSubscribedToRemote: MediaStream; | ||
/** | ||
* @hidden | ||
*/ | ||
constructor(session: Session, options: InboundStreamOptions | OutboundStreamOptions | {}); | ||
@@ -159,0 +163,0 @@ /** |
@@ -358,2 +358,12 @@ "use strict"; | ||
} | ||
// If subscribeToRemote local MediaStream must be stopped | ||
if (this.localMediaStreamWhenSubscribedToRemote) { | ||
this.localMediaStreamWhenSubscribedToRemote.getAudioTracks().forEach(function (track) { | ||
track.stop(); | ||
}); | ||
this.localMediaStreamWhenSubscribedToRemote.getVideoTracks().forEach(function (track) { | ||
track.stop(); | ||
}); | ||
delete this.localMediaStreamWhenSubscribedToRemote; | ||
} | ||
if (!!this.speechEvent) { | ||
@@ -718,2 +728,3 @@ if (!!this.speechEvent.stop) { | ||
if (_this.displayMyRemote()) { | ||
_this.localMediaStreamWhenSubscribedToRemote = _this.mediaStream; | ||
_this.remotePeerSuccessfullyEstablished(); | ||
@@ -720,0 +731,0 @@ } |
@@ -88,3 +88,3 @@ import { Stream } from './Stream'; | ||
* Makes `video` element parameter display this [[stream]]. This is useful when you are | ||
* [managing the video elements on your own](/docs/how-do-i/manage-videos/#you-take-care-of-the-video-players) | ||
* [managing the video elements on your own](/en/stable/cheatsheet/manage-videos/#you-take-care-of-the-video-players) | ||
* | ||
@@ -113,3 +113,3 @@ * Calling this method with a video already added to other Publisher/Subscriber will cause the video element to be | ||
/** | ||
* Updates the current configuration for the [[PublisherSpeakingEvent]] feature and the [StreamManagerEvent.streamAudioVolumeChange](/api/openvidu-browser/classes/streammanagerevent.html) feature for this specific | ||
* Updates the current configuration for the [[PublisherSpeakingEvent]] feature and the [StreamManagerEvent.streamAudioVolumeChange](/en/stable/api/openvidu-browser/classes/streammanagerevent.html) feature for this specific | ||
* StreamManager audio stream, overriding the global options set with [[OpenVidu.setAdvancedConfiguration]]. This way you can customize the audio events options | ||
@@ -116,0 +116,0 @@ * for each specific StreamManager and change them dynamically. |
@@ -190,3 +190,3 @@ "use strict"; | ||
* Makes `video` element parameter display this [[stream]]. This is useful when you are | ||
* [managing the video elements on your own](/docs/how-do-i/manage-videos/#you-take-care-of-the-video-players) | ||
* [managing the video elements on your own](/en/stable/cheatsheet/manage-videos/#you-take-care-of-the-video-players) | ||
* | ||
@@ -296,3 +296,3 @@ * Calling this method with a video already added to other Publisher/Subscriber will cause the video element to be | ||
/** | ||
* Updates the current configuration for the [[PublisherSpeakingEvent]] feature and the [StreamManagerEvent.streamAudioVolumeChange](/api/openvidu-browser/classes/streammanagerevent.html) feature for this specific | ||
* Updates the current configuration for the [[PublisherSpeakingEvent]] feature and the [StreamManagerEvent.streamAudioVolumeChange](/en/stable/api/openvidu-browser/classes/streammanagerevent.html) feature for this specific | ||
* StreamManager audio stream, overriding the global options set with [[OpenVidu.setAdvancedConfiguration]]. This way you can customize the audio events options | ||
@@ -299,0 +299,0 @@ * for each specific StreamManager and change them dynamically. |
@@ -26,3 +26,3 @@ import { Event } from './Event'; | ||
* - "sessionClosedByServer": the Session has been closed by the application | ||
* - "automaticStop": see [Automatic stop of recordings](https://openvidu.io/docs/advanced-features/recording/#automatic-stop-of-recordings) | ||
* - "automaticStop": see [Automatic stop of recordings](/en/stable/advanced-features/recording/#automatic-stop-of-recordings) | ||
* - "mediaServerDisconnect": OpenVidu Media Node has crashed or lost its connection. A new Media Node instance is active and the recording has been stopped (no media streams are available in the new Media Node) | ||
@@ -29,0 +29,0 @@ * |
@@ -6,3 +6,3 @@ import { Event } from './Event'; | ||
* - `videoElementCreated`: dispatched by [[Publisher]] and [[Subscriber]] whenever a new HTML video element has been inserted into DOM by OpenVidu Browser library. See | ||
* [Manage video players](/docs/how-do-i/manage-videos) section. | ||
* [Manage video players](/en/stable/cheatsheet/manage-videos) section. | ||
* - `videoElementDestroyed`: dispatched by [[Publisher]] and [[Subscriber]] whenever an HTML video element has been removed from DOM by OpenVidu Browser library. | ||
@@ -9,0 +9,0 @@ */ |
@@ -36,3 +36,3 @@ "use strict"; | ||
* - `videoElementCreated`: dispatched by [[Publisher]] and [[Subscriber]] whenever a new HTML video element has been inserted into DOM by OpenVidu Browser library. See | ||
* [Manage video players](/docs/how-do-i/manage-videos) section. | ||
* [Manage video players](/en/stable/cheatsheet/manage-videos) section. | ||
* - `videoElementDestroyed`: dispatched by [[Publisher]] and [[Subscriber]] whenever an HTML video element has been removed from DOM by OpenVidu Browser library. | ||
@@ -39,0 +39,0 @@ */ |
@@ -16,3 +16,3 @@ /** | ||
/** | ||
* Custom configuration for the [[PublisherSpeakingEvent]] feature and the [StreamManagerEvent.streamAudioVolumeChange](/api/openvidu-browser/classes/streammanagerevent.html) feature. It is an object which includes the following optional properties: | ||
* Custom configuration for the [[PublisherSpeakingEvent]] feature and the [StreamManagerEvent.streamAudioVolumeChange](/en/stable/api/openvidu-browser/classes/streammanagerevent.html) feature. It is an object which includes the following optional properties: | ||
* - `interval`: (number) how frequently the analyser polls the audio stream to check if speaking has started/stopped or audio volume has changed. Default **100** (ms) | ||
@@ -19,0 +19,0 @@ * - `threshold`: (number) the volume at which _publisherStartSpeaking_ and _publisherStopSpeaking_ events will be fired. Default **-50** (dB) |
{ | ||
"author": "OpenVidu", | ||
"dependencies": { | ||
"@types/node": "13.7.1", | ||
"@types/node": "13.13.2", | ||
"@types/platform": "1.3.2", | ||
@@ -9,3 +9,3 @@ "freeice": "2.2.2", | ||
"platform": "1.3.5", | ||
"uuid": "3.4.0", | ||
"uuid": "7.0.3", | ||
"wolfy87-eventemitter": "5.2.9" | ||
@@ -15,4 +15,4 @@ }, | ||
"devDependencies": { | ||
"browserify": "16.5.0", | ||
"grunt": "1.0.4", | ||
"browserify": "16.5.1", | ||
"grunt": "1.1.0", | ||
"grunt-cli": "1.3.2", | ||
@@ -26,7 +26,7 @@ "grunt-contrib-copy": "1.0.0", | ||
"grunt-ts": "6.0.0-beta.22", | ||
"terser": "4.6.11", | ||
"tsify": "4.0.1", | ||
"tslint": "6.0.0", | ||
"typedoc": "0.16.10", | ||
"typescript": "3.7.5", | ||
"uglify-js": "3.8.0" | ||
"tslint": "6.1.1", | ||
"typedoc": "0.17.4", | ||
"typescript": "3.8.3" | ||
}, | ||
@@ -42,8 +42,8 @@ "license": "Apache-2.0", | ||
"browserify": "VERSION=${VERSION:-dev}; cd src && ../node_modules/browserify/bin/cmd.js Main.ts -p [ tsify ] --exclude kurento-browser-extensions --debug -o ../static/js/openvidu-browser-$VERSION.js -v", | ||
"browserify-prod": "VERSION=${VERSION:-dev}; cd src && ../node_modules/browserify/bin/cmd.js --debug Main.ts -p [ tsify ] --exclude kurento-browser-extensions | ../node_modules/uglify-js/bin/uglifyjs --source-map content=inline --output ../static/js/openvidu-browser-$VERSION.min.js", | ||
"browserify-prod": "VERSION=${VERSION:-dev}; cd src && ../node_modules/browserify/bin/cmd.js --debug Main.ts -p [ tsify ] --exclude kurento-browser-extensions | ../node_modules/terser/bin/terser --source-map content=inline --output ../static/js/openvidu-browser-$VERSION.min.js", | ||
"build": "cd src/OpenVidu && ./../../node_modules/typescript/bin/tsc && cd ../.. && ./node_modules/typescript/bin/tsc --declaration src/index.ts --outDir ./lib --sourceMap --lib dom,es5,es2015.promise,scripthost", | ||
"docs": "./node_modules/typedoc/bin/typedoc --options ./config/typedoc.js --out ./docs ./src && rm -rf ../../openvidu.io/api/openvidu-browser/* && cp -R ./docs/. ../../openvidu.io/api/openvidu-browser" | ||
"docs": "./generate-docs.sh" | ||
}, | ||
"types": "lib/index.d.ts", | ||
"version": "2.12.0" | ||
"version": "2.13.0" | ||
} |
@@ -219,3 +219,3 @@ /* | ||
* The [[Publisher]] object will dispatch a `videoElementCreated` event once a HTML video element has been added to DOM (only if you | ||
* [let OpenVidu take care of the video players](/docs/how-do-i/manage-videos/#let-openvidu-take-care-of-the-video-players)). See [[VideoElementEvent]] to learn more. | ||
* [let OpenVidu take care of the video players](/en/stable/cheatsheet/manage-videos/#let-openvidu-take-care-of-the-video-players)). See [[VideoElementEvent]] to learn more. | ||
* | ||
@@ -225,3 +225,3 @@ * The [[Publisher]] object will dispatch a `streamPlaying` event once the local streams starts playing. See [[StreamManagerEvent]] to learn more. | ||
* @param targetElement HTML DOM element (or its `id` attribute) in which the video element of the Publisher will be inserted (see [[PublisherProperties.insertMode]]). If *null* or *undefined* no default video will be created for this Publisher. | ||
* You can always call method [[Publisher.addVideoElement]] or [[Publisher.createVideoElement]] to manage the video elements on your own (see [Manage video players](/docs/how-do-i/manage-videos) section) | ||
* You can always call method [[Publisher.addVideoElement]] or [[Publisher.createVideoElement]] to manage the video elements on your own (see [Manage video players](/en/stable/cheatsheet/manage-videos) section) | ||
* @param completionHandler `error` parameter is null if `initPublisher` succeeds, and is defined if it fails. | ||
@@ -657,3 +657,3 @@ * `completionHandler` function is called before the Publisher dispatches an `accessAllowed` or an `accessDenied` event | ||
* - `screenShareChromeExtension`: url to a custom screen share extension for Chrome to be used instead of the default one, based on ours [https://github.com/OpenVidu/openvidu-screen-sharing-chrome-extension](https://github.com/OpenVidu/openvidu-screen-sharing-chrome-extension) | ||
* - `publisherSpeakingEventsOptions`: custom configuration for the [[PublisherSpeakingEvent]] feature and the [StreamManagerEvent.streamAudioVolumeChange](/api/openvidu-browser/classes/streammanagerevent.html) feature | ||
* - `publisherSpeakingEventsOptions`: custom configuration for the [[PublisherSpeakingEvent]] feature and the [StreamManagerEvent.streamAudioVolumeChange](/en/stable/api/openvidu-browser/classes/streammanagerevent.html) feature | ||
* | ||
@@ -660,0 +660,0 @@ * Call this method to override previous values at any moment. |
@@ -120,3 +120,4 @@ /* | ||
if (this.stream.audioActive !== value) { | ||
this.stream.getMediaStream().getAudioTracks().forEach((track) => { | ||
const affectedMediaStream: MediaStream = this.stream.displayMyRemote() ? this.stream.localMediaStreamWhenSubscribedToRemote : this.stream.getMediaStream(); | ||
affectedMediaStream.getAudioTracks().forEach((track) => { | ||
track.enabled = value; | ||
@@ -167,3 +168,4 @@ }); | ||
if (this.stream.videoActive !== value) { | ||
this.stream.getMediaStream().getVideoTracks().forEach((track) => { | ||
const affectedMediaStream: MediaStream = this.stream.displayMyRemote() ? this.stream.localMediaStreamWhenSubscribedToRemote : this.stream.getMediaStream(); | ||
affectedMediaStream.getVideoTracks().forEach((track) => { | ||
track.enabled = value; | ||
@@ -293,32 +295,45 @@ }); | ||
replaceTrack(track: MediaStreamTrack): Promise<any> { | ||
return new Promise((resolve, reject) => { | ||
const senders: RTCRtpSender[] = this.stream.getRTCPeerConnection().getSenders(); | ||
let sender: RTCRtpSender | undefined; | ||
const replaceMediaStreamTrack = () => { | ||
const mediaStream: MediaStream = this.stream.displayMyRemote() ? this.stream.localMediaStreamWhenSubscribedToRemote : this.stream.getMediaStream(); | ||
let removedTrack: MediaStreamTrack; | ||
if (track.kind === 'video') { | ||
sender = senders.find(s => !!s.track && s.track.kind === 'video'); | ||
if (!sender) { | ||
reject(new Error('There\'s no replaceable track for that kind of MediaStreamTrack in this Publisher object')) | ||
} | ||
} else if (track.kind === 'audio') { | ||
sender = senders.find(s => !!s.track && s.track.kind === 'audio'); | ||
if (!sender) { | ||
reject(new Error('There\'s no replaceable track for that kind of MediaStreamTrack in this Publisher object')) | ||
} | ||
removedTrack = mediaStream.getVideoTracks()[0]; | ||
} else { | ||
reject(new Error('Unknown track kind ' + track.kind)); | ||
removedTrack = mediaStream.getAudioTracks()[0]; | ||
} | ||
(<any>sender).replaceTrack(track).then(() => { | ||
let removedTrack: MediaStreamTrack; | ||
mediaStream.removeTrack(removedTrack); | ||
removedTrack.stop(); | ||
mediaStream.addTrack(track); | ||
} | ||
return new Promise((resolve, reject) => { | ||
if (this.stream.isLocalStreamPublished) { | ||
// Only if the Publisher has been published is necessary to call native Web API RTCRtpSender.replaceTrack | ||
const senders: RTCRtpSender[] = this.stream.getRTCPeerConnection().getSenders(); | ||
let sender: RTCRtpSender | undefined; | ||
if (track.kind === 'video') { | ||
removedTrack = this.stream.getMediaStream().getVideoTracks()[0]; | ||
sender = senders.find(s => !!s.track && s.track.kind === 'video'); | ||
if (!sender) { | ||
reject(new Error('There\'s no replaceable track for that kind of MediaStreamTrack in this Publisher object')) | ||
} | ||
} else if (track.kind === 'audio') { | ||
sender = senders.find(s => !!s.track && s.track.kind === 'audio'); | ||
if (!sender) { | ||
reject(new Error('There\'s no replaceable track for that kind of MediaStreamTrack in this Publisher object')) | ||
} | ||
} else { | ||
removedTrack = this.stream.getMediaStream().getAudioTracks()[0]; | ||
reject(new Error('Unknown track kind ' + track.kind)); | ||
} | ||
this.stream.getMediaStream().removeTrack(removedTrack); | ||
removedTrack.stop(); | ||
this.stream.getMediaStream().addTrack(track); | ||
(<any>sender).replaceTrack(track).then(() => { | ||
replaceMediaStreamTrack(); | ||
resolve(); | ||
}).catch(error => { | ||
reject(error); | ||
}); | ||
} else { | ||
// Publisher not published. Simply modify local MediaStream tracks | ||
replaceMediaStreamTrack(); | ||
resolve(); | ||
}).catch(error => { | ||
reject(error); | ||
}); | ||
} | ||
}); | ||
@@ -675,2 +690,2 @@ } | ||
} | ||
} |
@@ -203,3 +203,3 @@ /* | ||
* This event will automatically unsubscribe the leaving participant from every Subscriber object of the session (this includes closing the WebRTCPeer connection and disposing all MediaStreamTracks) | ||
* and also deletes any HTML video element associated to each Subscriber (only those [created by OpenVidu Browser](/docs/how-do-i/manage-videos/#let-openvidu-take-care-of-the-video-players)). | ||
* and also deletes any HTML video element associated to each Subscriber (only those [created by OpenVidu Browser](/en/stable/cheatsheet/manage-videos/#let-openvidu-take-care-of-the-video-players)). | ||
* For every video removed, each Subscriber object will dispatch a `videoElementDestroyed` event. | ||
@@ -210,3 +210,3 @@ * Call `event.preventDefault()` upon event `sessionDisconnected` to avoid this behavior and take care of disposing and cleaning all the Subscriber objects yourself. | ||
* The [[Publisher]] object of the local participant will dispatch a `streamDestroyed` event if there is a [[Publisher]] object publishing to the session. | ||
* This event will automatically stop all media tracks and delete any HTML video element associated to it (only those [created by OpenVidu Browser](/docs/how-do-i/manage-videos/#let-openvidu-take-care-of-the-video-players)). | ||
* This event will automatically stop all media tracks and delete any HTML video element associated to it (only those [created by OpenVidu Browser](/en/stable/cheatsheet/manage-videos/#let-openvidu-take-care-of-the-video-players)). | ||
* For every video removed, the Publisher object will dispatch a `videoElementDestroyed` event. | ||
@@ -218,3 +218,3 @@ * Call `event.preventDefault()` upon event `streamDestroyed` if you want to clean the Publisher object on your own or re-publish it in a different Session (to do so it is a mandatory requirement to call `Session.unpublish()` | ||
* This event will automatically unsubscribe the Subscriber object from the session (this includes closing the WebRTCPeer connection and disposing all MediaStreamTracks) | ||
* and also deletes any HTML video element associated to that Subscriber (only those [created by OpenVidu Browser](/docs/how-do-i/manage-videos/#let-openvidu-take-care-of-the-video-players)). | ||
* and also deletes any HTML video element associated to that Subscriber (only those [created by OpenVidu Browser](/en/stable/cheatsheet/manage-videos/#let-openvidu-take-care-of-the-video-players)). | ||
* For every video removed, the Subscriber object will dispatch a `videoElementDestroyed` event. | ||
@@ -241,3 +241,3 @@ * Call `event.preventDefault()` upon event `streamDestroyed` to avoid this default behavior and take care of disposing and cleaning the Subscriber object yourself. | ||
* The [[Subscriber]] object will dispatch a `videoElementCreated` event once the HTML video element has been added to DOM (only if you | ||
* [let OpenVidu take care of the video players](/docs/how-do-i/manage-videos/#let-openvidu-take-care-of-the-video-players)). See [[VideoElementEvent]] to learn more. | ||
* [let OpenVidu take care of the video players](/en/stable/cheatsheet/manage-videos/#let-openvidu-take-care-of-the-video-players)). See [[VideoElementEvent]] to learn more. | ||
* | ||
@@ -248,3 +248,3 @@ * The [[Subscriber]] object will dispatch a `streamPlaying` event once the remote stream starts playing. See [[StreamManagerEvent]] to learn more. | ||
* @param targetElement HTML DOM element (or its `id` attribute) in which the video element of the Subscriber will be inserted (see [[SubscriberProperties.insertMode]]). If *null* or *undefined* no default video will be created for this Subscriber. | ||
* You can always call method [[Subscriber.addVideoElement]] or [[Subscriber.createVideoElement]] to manage the video elements on your own (see [Manage video players](/docs/how-do-i/manage-videos) section) | ||
* You can always call method [[Subscriber.addVideoElement]] or [[Subscriber.createVideoElement]] to manage the video elements on your own (see [Manage video players](/en/stable/cheatsheet/manage-videos) section) | ||
* @param completionHandler `error` parameter is null if `subscribe` succeeds, and is defined if it fails. | ||
@@ -332,3 +332,3 @@ */ | ||
* The [[Subscriber]] object will dispatch a `videoElementDestroyed` event for each video associated to it that was removed from DOM. | ||
* Only videos [created by OpenVidu Browser](/docs/how-do-i/manage-videos/#let-openvidu-take-care-of-the-video-players)) will be automatically removed | ||
* Only videos [created by OpenVidu Browser](/en/stable/cheatsheet/manage-videos/#let-openvidu-take-care-of-the-video-players)) will be automatically removed | ||
* | ||
@@ -415,3 +415,3 @@ * See [[VideoElementEvent]] to learn more | ||
* This event will automatically stop all media tracks and delete any HTML video element associated to this Publisher | ||
* (only those videos [created by OpenVidu Browser](/docs/how-do-i/manage-videos/#let-openvidu-take-care-of-the-video-players)). | ||
* (only those videos [created by OpenVidu Browser](/en/stable/cheatsheet/manage-videos/#let-openvidu-take-care-of-the-video-players)). | ||
* For every video removed, the Publisher object will dispatch a `videoElementDestroyed` event. | ||
@@ -422,3 +422,3 @@ * Call `event.preventDefault()` upon event `streamDestroyed` if you want to clean the Publisher object on your own or re-publish it in a different Session. | ||
* This event will automatically unsubscribe the Subscriber object from the session (this includes closing the WebRTCPeer connection and disposing all MediaStreamTracks) and | ||
* delete any HTML video element associated to it (only those [created by OpenVidu Browser](/docs/how-do-i/manage-videos/#let-openvidu-take-care-of-the-video-players)). | ||
* delete any HTML video element associated to it (only those [created by OpenVidu Browser](/en/stable/cheatsheet/manage-videos/#let-openvidu-take-care-of-the-video-players)). | ||
* For every video removed, the Subscriber object will dispatch a `videoElementDestroyed` event. | ||
@@ -952,3 +952,2 @@ * Call `event.preventDefault()` upon event `streamDestroyed` to avoid this default behavior and take care of disposing and cleaning the Subscriber object on your own. | ||
foundation: msg.foundation, | ||
ip: msg.ip, | ||
port: msg.port, | ||
@@ -955,0 +954,0 @@ priority: msg.priority, |
@@ -198,2 +198,6 @@ /* | ||
harkOptions; | ||
/** | ||
* @hidden | ||
*/ | ||
localMediaStreamWhenSubscribedToRemote: MediaStream; | ||
@@ -499,2 +503,12 @@ | ||
} | ||
// If subscribeToRemote local MediaStream must be stopped | ||
if (this.localMediaStreamWhenSubscribedToRemote) { | ||
this.localMediaStreamWhenSubscribedToRemote.getAudioTracks().forEach((track) => { | ||
track.stop(); | ||
}); | ||
this.localMediaStreamWhenSubscribedToRemote.getVideoTracks().forEach((track) => { | ||
track.stop(); | ||
}); | ||
delete this.localMediaStreamWhenSubscribedToRemote; | ||
} | ||
if (!!this.speechEvent) { | ||
@@ -868,2 +882,3 @@ if (!!this.speechEvent.stop) { | ||
if (this.displayMyRemote()) { | ||
this.localMediaStreamWhenSubscribedToRemote = this.mediaStream; | ||
this.remotePeerSuccessfullyEstablished(); | ||
@@ -870,0 +885,0 @@ } |
@@ -237,3 +237,3 @@ /* | ||
* Makes `video` element parameter display this [[stream]]. This is useful when you are | ||
* [managing the video elements on your own](/docs/how-do-i/manage-videos/#you-take-care-of-the-video-players) | ||
* [managing the video elements on your own](/en/stable/cheatsheet/manage-videos/#you-take-care-of-the-video-players) | ||
* | ||
@@ -355,3 +355,3 @@ * Calling this method with a video already added to other Publisher/Subscriber will cause the video element to be | ||
/** | ||
* Updates the current configuration for the [[PublisherSpeakingEvent]] feature and the [StreamManagerEvent.streamAudioVolumeChange](/api/openvidu-browser/classes/streammanagerevent.html) feature for this specific | ||
* Updates the current configuration for the [[PublisherSpeakingEvent]] feature and the [StreamManagerEvent.streamAudioVolumeChange](/en/stable/api/openvidu-browser/classes/streammanagerevent.html) feature for this specific | ||
* StreamManager audio stream, overriding the global options set with [[OpenVidu.setAdvancedConfiguration]]. This way you can customize the audio events options | ||
@@ -358,0 +358,0 @@ * for each specific StreamManager and change them dynamically. |
@@ -48,3 +48,3 @@ /* | ||
* - "sessionClosedByServer": the Session has been closed by the application | ||
* - "automaticStop": see [Automatic stop of recordings](https://openvidu.io/docs/advanced-features/recording/#automatic-stop-of-recordings) | ||
* - "automaticStop": see [Automatic stop of recordings](/en/stable/advanced-features/recording/#automatic-stop-of-recordings) | ||
* - "mediaServerDisconnect": OpenVidu Media Node has crashed or lost its connection. A new Media Node instance is active and the recording has been stopped (no media streams are available in the new Media Node) | ||
@@ -51,0 +51,0 @@ * |
@@ -25,3 +25,3 @@ /* | ||
* - `videoElementCreated`: dispatched by [[Publisher]] and [[Subscriber]] whenever a new HTML video element has been inserted into DOM by OpenVidu Browser library. See | ||
* [Manage video players](/docs/how-do-i/manage-videos) section. | ||
* [Manage video players](/en/stable/cheatsheet/manage-videos) section. | ||
* - `videoElementDestroyed`: dispatched by [[Publisher]] and [[Subscriber]] whenever an HTML video element has been removed from DOM by OpenVidu Browser library. | ||
@@ -28,0 +28,0 @@ */ |
@@ -36,3 +36,3 @@ /* | ||
/** | ||
* Custom configuration for the [[PublisherSpeakingEvent]] feature and the [StreamManagerEvent.streamAudioVolumeChange](/api/openvidu-browser/classes/streammanagerevent.html) feature. It is an object which includes the following optional properties: | ||
* Custom configuration for the [[PublisherSpeakingEvent]] feature and the [StreamManagerEvent.streamAudioVolumeChange](/en/stable/api/openvidu-browser/classes/streammanagerevent.html) feature. It is an object which includes the following optional properties: | ||
* - `interval`: (number) how frequently the analyser polls the audio stream to check if speaking has started/stopped or audio volume has changed. Default **100** (ms) | ||
@@ -39,0 +39,0 @@ * - `threshold`: (number) the volume at which _publisherStartSpeaking_ and _publisherStopSpeaking_ events will be fired. Default **-50** (dB) |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Minified code
QualityThis package contains minified code. This may be harmless in some cases where minified code is included in packaged libraries, however packages on npm should not minify code.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Minified code
QualityThis package contains minified code. This may be harmless in some cases where minified code is included in packaged libraries, however packages on npm should not minify code.
Found 1 instance in 1 package
3519681
210
36428
+ Added@types/node@13.13.2(transitive)
+ Addeduuid@7.0.3(transitive)
- Removed@types/node@13.7.1(transitive)
- Removeduuid@3.4.0(transitive)
Updated@types/node@13.13.2
Updateduuid@7.0.3