Signaling and ICE connection events are now monitored

pull/3/head
pabloFuente 2017-03-21 10:36:18 +01:00
parent 7a3c064068
commit 9cb60f9ce6
4 changed files with 52 additions and 9 deletions

View File

@ -252,6 +252,10 @@ export class Stream {
}
}
getRTCPeerConnection(){
return this.getWebRtcPeer().peerConnection;
}
requestCameraAccess(callback: Callback<Stream>) {
this.participant.addStream(this);

View File

@ -47,16 +47,22 @@
<input type="checkbox" id="toggle-video" name="toggle-video" [checked]="toggleVideo" (change)="updateToggleVideo($event)"> Toggle your video
<input type="checkbox" id="toggle-audio" name="toggle-audio" [checked]="toggleAudio" (change)="updateToggleAudio($event)"> Toggle your audio
<div>
<div *ngFor="let s of streams; let i = index" style="display: table-row;">
<div style="display: inline; top: 0;">
<div *ngFor="let s of streams; let i = index">
<div style="top: 0;">
<stream [stream]="s"></stream>
</div>
<div *ngIf="stats[i]" style="display: inline-block;">
<div style="display: inline; margin-left: 50px;">
<div *ngIf="stats[i]">
<div style="margin-left: 50px;">
<input type="checkbox" id="toggle-state" name="toggle-state" [checked]="true" (change)="updateToggleState(i)"> Show conexion state
<div [attr.id]="'state-' + i" style="display: block;">
<p><b>Signaling state:</b> {{signalingState[i]}}</p>
<p><b>Ice connection state:</b> {{iceConnectionState[i]}}</p>
</div>
<input type="checkbox" id="toggle-statistics" name="toggle-statistics" (change)="updateToggleStatistics(i)"> Show statistics
<div *ngIf="stats[i].bitrate">
<h2>Bitrate: {{stats[i].bitrate}}</h2>
</div>
<table>
<table [attr.id]="'table-' + i" style="display: none;">
<tr>
<th>Type</th>
<th>Time</th>

View File

@ -29,6 +29,8 @@ export class AppComponent {
stats = [];
bytesPrev = [];
timestampPrev = [];
signalingState = [];
iceConnectionState = [];
constructor() {
@ -47,7 +49,26 @@ export class AppComponent {
private addVideoTag(stream: Stream) {
console.log("Stream added");
this.streams.push(stream);
let ind = (this.streams.push(stream) - 1);
this.signalingState[ind] = '';
this.iceConnectionState[ind] = '';
//Connection events
stream.getRTCPeerConnection().onsignalingstatechange = (event) => {
this.signalingState[ind] += " => " + stream.getRTCPeerConnection().signalingState;
console.info("Stream " + stream.getId() + " signaling state: " + stream.getRTCPeerConnection().signalingState);
}
stream.getRTCPeerConnection().oniceconnectionstatechange = (event) => {
/*if (stream.getRTCPeerConnection().iceconnectionstate === "failed" ||
stream.getRTCPeerConnection().iceconnectionstate === "disconnected" ||
stream.getRTCPeerConnection().iceconnectionstate === "closed") {
// Handle the failure
};*/
this.iceConnectionState[ind] += " => " + stream.getRTCPeerConnection().iceConnectionState;
console.info("Stream " + stream.getId() + " ice connection state: " + stream.getRTCPeerConnection().iceConnectionState);
}
//For statistics
this.timestampPrev.push(0);
@ -62,6 +83,9 @@ export class AppComponent {
this.stats.splice(index, 1);
this.timestampPrev.splice(index, 1);
this.bytesPrev.splice(index, 1);
this.signalingState.splice(index, 1);
this.iceConnectionState.splice(index, 1);
}
joinSession() {
@ -109,10 +133,10 @@ export class AppComponent {
this.session = session;
this.addVideoTag(camera);
camera.publish();
this.addVideoTag(camera);
this.intervalStats().subscribe();
session.addEventListener("stream-added", streamEvent => {
@ -149,6 +173,16 @@ export class AppComponent {
console.log(msg);
}
updateToggleStatistics(i) {
let table = (<HTMLInputElement>document.getElementById('table-' + i));
(table.style.display == "none") ? table.style.display = "block" : table.style.display = "none";
}
updateToggleState(i) {
let state = (<HTMLInputElement>document.getElementById('state-' + i));
(state.style.display == "none") ? state.style.display = "block" : state.style.display = "none";
}
/*obtainSupportedConstraints() {
let constraints = Object.keys(navigator.mediaDevices.getSupportedConstraints());
this.supportedVideoContstraints = constraints.filter((e) => {

View File

@ -6,7 +6,6 @@ import { DomSanitizer, SafeUrl } from '@angular/platform-browser';
selector: 'stream',
styles: [`
.participant {
float: left;
margin: 10px;
}
.participant video {