mirror of
https://github.com/element-hq/synapse
synced 2024-08-31 22:10:19 +00:00
More basic functionality for voip calls (like hanging up)
This commit is contained in:
parent
ca7426eee0
commit
41d02ab674
3 changed files with 69 additions and 5 deletions
|
@ -16,6 +16,25 @@ limitations under the License.
|
|||
|
||||
'use strict';
|
||||
|
||||
var forAllVideoTracksOnStream = function(s, f) {
|
||||
var tracks = s.getVideoTracks();
|
||||
for (var i = 0; i < tracks.length; i++) {
|
||||
f(tracks[i]);
|
||||
}
|
||||
}
|
||||
|
||||
var forAllAudioTracksOnStream = function(s, f) {
|
||||
var tracks = s.getAudioTracks();
|
||||
for (var i = 0; i < tracks.length; i++) {
|
||||
f(tracks[i]);
|
||||
}
|
||||
}
|
||||
|
||||
var forAllTracksOnStream = function(s, f) {
|
||||
forAllVideoTracksOnStream(s, f);
|
||||
forAllAudioTracksOnStream(s, f);
|
||||
}
|
||||
|
||||
angular.module('MatrixCall', [])
|
||||
.factory('MatrixCall', ['matrixService', 'matrixPhoneService', function MatrixCallFactory(matrixService, matrixPhoneService) {
|
||||
var MatrixCall = function(room_id) {
|
||||
|
@ -55,7 +74,15 @@ angular.module('MatrixCall', [])
|
|||
};
|
||||
|
||||
MatrixCall.prototype.hangup = function() {
|
||||
console.trace("Rejecting call "+this.call_id);
|
||||
console.trace("Ending call "+this.call_id);
|
||||
|
||||
forAllTracksOnStream(this.localAVStream, function(t) {
|
||||
t.stop();
|
||||
});
|
||||
forAllTracksOnStream(this.remoteAVStream, function(t) {
|
||||
t.stop();
|
||||
});
|
||||
|
||||
var content = {
|
||||
msgtype: "m.call.hangup",
|
||||
version: 0,
|
||||
|
@ -66,6 +93,7 @@ angular.module('MatrixCall', [])
|
|||
};
|
||||
|
||||
MatrixCall.prototype.gotUserMediaForInvite = function(stream) {
|
||||
this.localAVStream = stream;
|
||||
var audioTracks = stream.getAudioTracks();
|
||||
for (var i = 0; i < audioTracks.length; i++) {
|
||||
audioTracks[i].enabled = true;
|
||||
|
@ -86,6 +114,7 @@ angular.module('MatrixCall', [])
|
|||
};
|
||||
|
||||
MatrixCall.prototype.gotUserMediaForAnswer = function(stream) {
|
||||
this.localAVStream = stream;
|
||||
var audioTracks = stream.getAudioTracks();
|
||||
for (var i = 0; i < audioTracks.length; i++) {
|
||||
audioTracks[i].enabled = true;
|
||||
|
@ -172,7 +201,8 @@ angular.module('MatrixCall', [])
|
|||
|
||||
MatrixCall.prototype.onIceConnectionStateChanged = function() {
|
||||
console.trace("Ice connection state changed to: "+this.peerConn.iceConnectionState);
|
||||
if (this.peerConn.iceConnectionState == 'completed') {
|
||||
// ideally we'd consider the call to be connected when we get media but chrome doesn't implement nay of the 'onstarted' events yet
|
||||
if (this.peerConn.iceConnectionState == 'completed' || this.peerConn.iceConnectionState == 'connected') {
|
||||
this.state = 'connected';
|
||||
}
|
||||
};
|
||||
|
@ -191,10 +221,44 @@ angular.module('MatrixCall', [])
|
|||
|
||||
MatrixCall.prototype.onAddStream = function(event) {
|
||||
console.trace("Stream added"+event);
|
||||
|
||||
var s = event.stream;
|
||||
|
||||
this.remoteAVStream = s;
|
||||
|
||||
var self = this;
|
||||
forAllTracksOnStream(s, function(t) {
|
||||
// not currently implemented in chrome
|
||||
t.onstarted = self.onRemoteStreamTrackStarted;
|
||||
});
|
||||
|
||||
// not currently implemented in chrome
|
||||
event.stream.onstarted = this.onRemoteStreamStarted;
|
||||
var player = new Audio();
|
||||
player.src = URL.createObjectURL(event.stream);
|
||||
player.src = URL.createObjectURL(s);
|
||||
player.play();
|
||||
};
|
||||
|
||||
MatrixCall.prototype.onRemoteStreamStarted = function(event) {
|
||||
this.state = 'connected';
|
||||
};
|
||||
|
||||
MatrixCall.prototype.onRemoteStreamTrackStarted = function(event) {
|
||||
this.state = 'connected';
|
||||
};
|
||||
|
||||
MatrixCall.prototype.onHangupReceived = function() {
|
||||
this.state = 'ended';
|
||||
|
||||
forAllTracksOnStream(this.localAVStream, function(t) {
|
||||
t.stop();
|
||||
});
|
||||
forAllTracksOnStream(this.remoteAVStream, function(t) {
|
||||
t.stop();
|
||||
});
|
||||
|
||||
this.onHangup();
|
||||
};
|
||||
|
||||
return MatrixCall;
|
||||
}]);
|
||||
|
|
|
@ -59,7 +59,7 @@ angular.module('matrixPhoneService', [])
|
|||
console.trace("Got hangup for unknown call ID "+msg.call_id);
|
||||
return;
|
||||
}
|
||||
call.onHangup();
|
||||
call.onHangupReceived();
|
||||
matrixPhoneService.allCalls[msg.call_id] = undefined;
|
||||
}
|
||||
});
|
||||
|
|
|
@ -104,6 +104,7 @@
|
|||
<button ng-click="answerCall()">Answer</button>
|
||||
<button ng-click="hangupCall()">Reject</button>
|
||||
</div>
|
||||
<button ng-click="hangupCall()" ng-show="currentCall && currentCall.state != 'ringing'">Hang up</button>
|
||||
{{ currentCall.state }}
|
||||
</div>
|
||||
|
||||
|
@ -111,7 +112,6 @@
|
|||
<div ng-hide="!state.stream_failure">
|
||||
{{ state.stream_failure.data.error || "Connection failure" }}
|
||||
</div>
|
||||
<audio id="remoteAudio" autoplay="autoplay"></audio>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
Loading…
Reference in a new issue