You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2018/09/30 07:52:35 UTC
[openmeetings] branch master updated: [OPENMEETINGS-1649] media
clean-up enhanced
This is an automated email from the ASF dual-hosted git repository.
solomax pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/openmeetings.git
The following commit(s) were added to refs/heads/master by this push:
new 5cabff2 [OPENMEETINGS-1649] media clean-up enhanced
5cabff2 is described below
commit 5cabff2f40dac2f76cc4843cafccf224130d0c5f
Author: Maxim Solodovnik <so...@gmail.com>
AuthorDate: Sun Sep 30 14:52:23 2018 +0700
[OPENMEETINGS-1649] media clean-up enhanced
---
.../apache/openmeetings/web/room/raw-settings.js | 15 +---
.../openmeetings/web/room/raw-video-manager.js | 40 +---------
.../apache/openmeetings/web/room/raw-video-util.js | 21 +++++
.../org/apache/openmeetings/web/room/raw-video.js | 89 ++++++++++++++++------
4 files changed, 91 insertions(+), 74 deletions(-)
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-settings.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-settings.js
index a74eb9a..1790fff 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-settings.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-settings.js
@@ -93,18 +93,11 @@ var VideoSettings = (function() {
}
function _clear(_ms) {
const ms = _ms || (vid.length === 1 ? vid[0].srcObject : null);
- if (ms !== null && 'function' === typeof(ms.getTracks)) {
- ms.getTracks().forEach(function(track) {
- track.stop();
- });
- if (vid.length === 1) {
- vid[0].srcObject = null;
- }
- }
- if (!!rtcPeer) {
- rtcPeer.dispose();
- rtcPeer = null;
+ VideoUtil.cleanStream(ms);
+ if (vid.length === 1) {
+ vid[0].srcObject = null;
}
+ VideoUtil.cleanPeer(rtcPeer);
if (!!level) {
level.dispose();
level = null;
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video-manager.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video-manager.js
index 28086c1..c132cf8 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video-manager.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video-manager.js
@@ -17,46 +17,8 @@ var VideoManager = (function() {
function _onBroadcast(msg) {
const uid = msg.uid;
$('#' + VideoUtil.getVid(uid)).remove();
- const o = VideoSettings.load()
- , w = Video().init(msg.client, VideoUtil.getPos(VideoUtil.getRects(VID_SEL), msg.stream.width, msg.stream.height + 25))
- , v = w.data()
- , cl = v.client();
+ Video().init(msg.client, VideoUtil.getPos(VideoUtil.getRects(VID_SEL), msg.stream.width, msg.stream.height + 25));
OmUtil.log(uid + ' registered in room');
- //each bool OR https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints
- const constraints = {
- audio : VideoUtil.hasAudio(cl)
- , video : VideoUtil.hasVideo(cl)
- }
- if (constraints.video) {
- constraints.video = {
- mandatory : {
- maxWidth : cl.width,
- maxFrameRate : cl.height,
- }
- };
- }
- v.setPeer(new kurentoUtils.WebRtcPeer.WebRtcPeerSendonly(
- {
- localVideo: v.video()
- , mediaConstraints: constraints
- , onicecandidate: v.onIceCandidate
- }
- , function (error) {
- if (error) {
- return OmUtil.error(error);
- }
- v.initGain();
- this.generateOffer(function(error, offerSdp, wp) {
- if (error) {
- return OmUtil.error('Sender sdp offer error');
- }
- OmUtil.log('Invoking Sender SDP offer callback function');
- VideoManager.sendMessage({
- id : 'broadcastStarted'
- , sdpOffer: offerSdp
- });
- });
- }));
}
function _onReceive(c) {
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video-util.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video-util.js
index ff8f103..865c896 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video-util.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video-util.js
@@ -104,6 +104,25 @@ var VideoUtil = (function() {
list.push(_getRect(v));
}
}
+ function _cleanStream(stream) {
+ if (!!stream) {
+ stream.getTracks().forEach(function(track) {
+ track.stop();
+ });
+ }
+ }
+ function _cleanPeer(peer) {
+ if (!!peer) {
+ const pc = peer.peerConnection;
+ if (!!pc) {
+ pc.getLocalStreams().forEach(function(stream) {
+ _cleanStream(stream);
+ });
+ }
+ peer.dispose();
+ peer = null;
+ }
+ }
self.getVid = _getVid;
self.isSharing = _isSharing;
@@ -114,5 +133,7 @@ var VideoUtil = (function() {
self.getPos = _getPos;
self.container = _container;
self.arrange = _arrange;
+ self.cleanStream = _cleanStream;
+ self.cleanPeer = _cleanPeer;
return self;
})();
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video.js
index 3d52bbd..e6cc905 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video.js
@@ -2,7 +2,7 @@
var Video = (function() {
const self = {};
let c, v, vc, t, f, size, vol, slider, handle, video, rtcPeer
- , lastVolume = 50, aCtx, gainNode;
+ , lastVolume = 50, aCtx, aSrc, aDest, gainNode;
function _getName() {
return c.user.firstName + ' ' + c.user.lastName;
@@ -32,26 +32,59 @@ var Video = (function() {
vc.width(w).height(h);
video.width(w).height(h);
}
- function _initGain() {
- if (!rtcPeer) {
- return;
+ function _createGainableStream() {
+ //each bool OR https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints
+ const constraints = {
+ audio : VideoUtil.hasAudio(c)
+ , video : VideoUtil.hasVideo(c)
}
- const stream = rtcPeer.getLocalStream();
- if (!stream || stream.getAudioTracks().length === 0) {
- return;
+ if (constraints.video) {
+ constraints.video = {
+ mandatory : {
+ maxWidth : c.width,
+ maxFrameRate : c.height,
+ }
+ };
}
- vol.show();
- aCtx = new AudioContext();
- gainNode = aCtx.createGain();
- const aSrc = aCtx.createMediaStreamSource(stream)
- , aDest = aCtx.createMediaStreamDestination();
- aSrc.connect(gainNode);
- gainNode.connect(aDest);
-
- //update stream
- const pc = rtcPeer.peerConnection;
- pc.getSenders().forEach(sender => pc.removeTrack(sender));
- aDest.stream.getTracks().forEach(track => pc.addTrack(track, aDest.stream));
+ navigator.mediaDevices.getUserMedia(constraints)
+ .then(function(stream) {
+ let _stream = stream;
+ if (stream.getAudioTracks().length !== 0) {
+ vol.show();
+ aCtx = new AudioContext();
+ gainNode = aCtx.createGain();
+ aSrc = aCtx.createMediaStreamSource(stream);
+ aDest = aCtx.createMediaStreamDestination();
+ aSrc.connect(gainNode);
+ gainNode.connect(aDest);
+ _stream = aDest.stream;
+ }
+ rtcPeer = new kurentoUtils.WebRtcPeer.WebRtcPeerSendonly(
+ {
+ localVideo: video[0]
+ , videoStream: _stream
+ , mediaConstraints: constraints
+ , onicecandidate: self.onIceCandidate
+ }
+ , function (error) {
+ if (error) {
+ return OmUtil.error(error);
+ }
+ this.generateOffer(function(error, offerSdp, wp) {
+ if (error) {
+ return OmUtil.error('Sender sdp offer error');
+ }
+ OmUtil.log('Invoking Sender SDP offer callback function');
+ VideoManager.sendMessage({
+ id : 'broadcastStarted'
+ , sdpOffer: offerSdp
+ });
+ });
+ });
+ })
+ .catch(function(err) {
+ OmUtil.error(err);
+ });
}
function _handleMicStatus(state) {
if (!f.is(':visible')) {
@@ -260,7 +293,9 @@ var Video = (function() {
} else {
vc.addClass('audio-only').css('background-image', 'url(' + imgUrl + ')');
}
- if (!c.self) { //FIXME TODO multi-stream
+ if (c.self) { //FIXME TODO multi-stream
+ _createGainableStream();
+ } else {
_handleVolume(lastVolume);
}
@@ -295,9 +330,16 @@ var Video = (function() {
}
function _cleanup() {
OmUtil.log('Disposing participant ' + c.uid);
- if (!!rtcPeer) {
- rtcPeer.dispose();
- rtcPeer = null;
+ VideoUtil.cleanPeer(rtcPeer);
+ if (!!gainNode) {
+ gainNode.disconnect();
+ }
+ if (!!aSrc) {
+ VideoUtil.cleanStream(aSrc.mediaStream);
+ aSrc.disconnect();
+ }
+ if (!!aDest) {
+ aDest.disconnect();
}
if (!!aCtx) {
aCtx.close();
@@ -310,7 +352,6 @@ var Video = (function() {
self.mute = _mute;
self.isMuted = function() { return 0 === slider.slider('option', 'value'); };
self.init = _init;
- self.initGain = _initGain;
self.client = function() { return c; };
self.setRights = _setRights;
self.video = function() { return video[0]; };