TT#47703 Conferencing: Media renegotiation

- Conferencing: As a Customer, I want to enable/disable camera
- Conferencing: As a Customer, I want to enable/disable captured screen
- Conferencing: As a Customer, I want to enable/disable microphone

Change-Id: Ic1536a7d90c8db97ae3e091c14e15c439b69f40d
changes/05/29905/2
Hans-Peter Herzog 6 years ago
parent b691f24498
commit f8e6484eb5

File diff suppressed because it is too large Load Diff

@ -45,6 +45,7 @@ export class ConferencePlugin {
joinConference(options) {
return new Promise((resolve, reject)=>{
options.localMediaStream = this.getLocalMediaStream();
this.getNetwork().joinConference(options).then((conference)=>{
resolve(conference);
}).catch((err)=>{
@ -53,6 +54,18 @@ export class ConferencePlugin {
});
}
changeConferenceMedia() {
return new Promise((resolve, reject)=>{
this.getNetwork().changeConferenceMedia({
localMediaStream: this.getLocalMediaStream()
}).then(()=>{
resolve();
}).catch((err)=>{
reject(err);
});
});
}
onLeft(listener) {
this.events.on('left', listener);
return this;
@ -98,19 +111,26 @@ export class ConferencePlugin {
setLocalMediaStream(localMediaStream) {
this.removeLocalMediaStream();
this.localMediaStream = localMediaStream;
this.localMediaStream.onEnded(()=>{
this.events.emit('localMediaStreamEnded', this.localMediaStream);
});
}
getLocalMediaStream() {
return this.localMediaStream;
}
onLocalMediaStreamEnded(listener) {
this.events.on('localMediaStreamEnded', listener);
}
hasLocalMediaStream() {
return this.localMediaStream !== null;
}
removeLocalMediaStream() {
if(this.hasLocalMediaStream()) {
this.getLocalMediaStream().stop();
// this.getLocalMediaStream().stop();
}
}

@ -164,9 +164,10 @@ export default {
media.enableScreen();
break;
}
media.build().then((localMediaStream)=>{
let localMediaStream;
media.build().then(($localMediaStream)=>{
localMediaStream = $localMediaStream;
Vue.$conference.setLocalMediaStream(localMediaStream);
context.commit('localMediaSucceeded', localMediaStream);
switch(type) {
default:
case MediaTypes.mic:
@ -195,6 +196,16 @@ export default {
context.commit('enableScreen');
break;
}
return Promise.resolve();
}).then(()=>{
if(context.getters.isJoined) {
return Vue.$conference.changeConferenceMedia();
}
else {
return Promise.resolve();
}
}).then(()=>{
context.commit('localMediaSucceeded', localMediaStream);
}).catch((err)=>{
context.commit('localMediaFailed', err.message);
});
@ -295,8 +306,7 @@ export default {
context.commit('joinRequesting');
Vue.$conference.joinConference({
conferenceName: conferenceId,
displayName: context.getters.username,
localMediaStream: context.getters.localMediaStream
displayName: context.getters.username
}).then(()=>{
context.commit('joinSucceeded');
}).catch((err)=>{

@ -110,10 +110,12 @@ export const store = new Vuex.Store({
store.commit('conference/participantLeft', participant);
}).onConferenceEvent((event)=>{
store.commit('conference/event', event);
}).onConferenceMessage(()=>{
store.commit('conference/message', event);
}).onConferenceFile(()=>{
store.commit('conference/file', event);
}).onConferenceMessage((message)=>{
store.commit('conference/message', message);
}).onConferenceFile((file)=>{
store.commit('conference/file', file);
}).onLocalMediaStreamEnded(()=>{
store.commit('conference/disposeLocalMedia');
});
},
function initI18n(store) {

Loading…
Cancel
Save