11 Oct 2019 |
tarvos90 | Hi ich kann gern mal demnächst™ an der EAH noch mal fragen wie das mit Räumen ist wenn Interesse besteht. Hab aber vorher noch mal ne eigene Frage hier bzgl. rxjs Also, ich arbeite gerade an etwas das den Stream einer Cam nutzen soll und wollte ganz einfach einen Record-Button einblenden, wenn nichts gemacht wird und einen Stop-Button wenn denn aufgenommen wird. Da dachte ich mir hey du kannst ja ein Observable nutzen damit ich den MediaStream auf dessen state überwachen kann. Hat sich dann herausgestellt, dass das nicht gehen kann, da dass ja ein Promise ist und nur einmal resolved. Ein Freund hat mir dann empfohlen, es doch andersherum zu machen und mit ein Observable aus den Click Events meiner Buttons zu machen. Klappt auch super, ich zeug euch mal wie das ist:
export class CameraComponent implements OnInit, AfterViewInit {
@ViewChild('video', { static: true }) public video: ElementRef;
@ViewChild('recordStream', { static: false, read: ElementRef })
public recordStreamButton: ElementRef;
@ViewChild('stopStream', { static: false, read: ElementRef })
public stopStreamButton: ElementRef;
public async ngAfterViewInit() {
const activateButtonClick$ = fromEvent(
this.recordStreamButton.nativeElement,
'click',
);
const deactivateButtonClick$ = fromEvent(
this.stopStreamButton.nativeElement,
'click',
);
const activated$ = merge(
activateButtonClick$.pipe(mapTo(true)),
deactivateButtonClick$.pipe(mapTo(false)),
);
activated$.subscribe(activated => {
activated ? this.getVideoStream() : this.stopCamera();
});
}
<button
#recordStream
class="custom-button"
color="primary"
mat-fab
>
<mat-icon inline="true">videocam</mat-icon>
</button>
<button
#stopStream
class="custom-button"
color="warn"
mat-fab
>
<mat-icon inline="true">videocam_off</mat-icon>
</button>
so und jetzt frage ich mich ob ich eigentlich wirklich einen Vorteil davon habe das so zu tun? Letztlich könnte ich ja einfach in getVideoStream oder stopCamera eine Variable isActive togglen und gut oder?
| 13:14:31 |
tarvos90 | hab ich einen Vorteil davon hier Observables zu nutzen? | 13:14:50 |
tarvos90 | * Hi ich kann gern mal demnächst™ an der EAH noch mal fragen wie das mit Räumen ist wenn Interesse besteht. Hab aber vorher noch mal ne eigene Frage hier bzgl. rxjs Also, ich arbeite gerade an etwas das den Stream einer Cam nutzen soll und wollte ganz einfach einen Record-Button einblenden, wenn nichts gemacht wird und einen Stop-Button wenn denn aufgenommen wird. Da dachte ich mir hey du kannst ja ein Observable nutzen damit ich den MediaStream auf dessen state überwachen kann. Hat sich dann herausgestellt, dass das nicht gehen kann, da dass ja ein Promise ist und nur einmal resolved. Ein Freund hat mir dann empfohlen, es doch andersherum zu machen und mir ein Observable aus den Click Events meiner Buttons zu machen. Klappt auch super, ich zeug euch mal wie das ist:
export class CameraComponent implements OnInit, AfterViewInit {
@ViewChild('video', { static: true }) public video: ElementRef;
@ViewChild('recordStream', { static: false, read: ElementRef })
public recordStreamButton: ElementRef;
@ViewChild('stopStream', { static: false, read: ElementRef })
public stopStreamButton: ElementRef;
public async ngAfterViewInit() {
const activateButtonClick$ = fromEvent(
this.recordStreamButton.nativeElement,
'click',
);
const deactivateButtonClick$ = fromEvent(
this.stopStreamButton.nativeElement,
'click',
);
const activated$ = merge(
activateButtonClick$.pipe(mapTo(true)),
deactivateButtonClick$.pipe(mapTo(false)),
);
activated$.subscribe(activated => {
activated ? this.getVideoStream() : this.stopCamera();
});
}
<button
#recordStream
class="custom-button"
color="primary"
mat-fab
>
<mat-icon inline="true">videocam</mat-icon>
</button>
<button
#stopStream
class="custom-button"
color="warn"
mat-fab
>
<mat-icon inline="true">videocam_off</mat-icon>
</button>
so und jetzt frage ich mich ob ich eigentlich wirklich einen Vorteil davon habe das so zu tun? Letztlich könnte ich ja einfach in getVideoStream oder stopCamera eine Variable isActive togglen und gut oder?
| 13:15:30 |
tarvos90 | es verschluckt gerade Code :D | 13:16:07 |
tarvos90 | komische Formatierung mom | 13:16:11 |
tarvos90 | * Hi ich kann gern mal demnächst™ an der EAH noch mal fragen wie das mit Räumen ist wenn Interesse besteht. Hab aber vorher noch mal ne eigene Frage hier bzgl. rxjs Also, ich arbeite gerade an etwas das den Stream einer Cam nutzen soll und wollte ganz einfach einen Record-Button einblenden, wenn nichts gemacht wird und einen Stop-Button wenn denn aufgenommen wird. Da dachte ich mir hey du kannst ja ein Observable nutzen damit ich den MediaStream auf dessen state überwachen kann. Hat sich dann herausgestellt, dass das nicht gehen kann, da dass ja ein Promise ist und nur einmal resolved. Ein Freund hat mir dann empfohlen, es doch andersherum zu machen und mir ein Observable aus den Click Events meiner Buttons zu machen. Klappt auch super, ich zeug euch mal wie das ist:
export class CameraComponent implements OnInit, AfterViewInit {
@ViewChild('video', { static: true }) public video: ElementRef;
@ViewChild('recordStream', { static: false, read: ElementRef })
public recordStreamButton: ElementRef;
@ViewChild('stopStream', { static: false, read: ElementRef })
public stopStreamButton: ElementRef;
public async ngAfterViewInit() {
const activateButtonClick$ = fromEvent(
this.recordStreamButton.nativeElement,
'click',
);
const deactivateButtonClick$ = fromEvent(
this.stopStreamButton.nativeElement,
'click',
);
const activated$ = merge(
activateButtonClick$.pipe(mapTo(true)),
deactivateButtonClick$.pipe(mapTo(false)),
);
activated$.subscribe(activated => {
activated ? this.getVideoStream() : this.stopCamera();
});
}
<button
#recordStream
class="custom-button"
color="primary"
mat-fab
>
<mat-icon inline="true">videocam</mat-icon>
</button>
<button
#stopStream
class="custom-button"
color="warn"
mat-fab
>
<mat-icon inline="true">videocam_off</mat-icon>
</button>
so und jetzt frage ich mich ob ich eigentlich wirklich einen Vorteil davon habe das so zu tun? Letztlich könnte ich ja einfach in getVideoStream oder stopCamera eine Variable isActive togglen und gut oder?
| 13:16:31 |
tarvos90 | ah jetzt | 13:16:39 |
tarvos90 | * Hi ich kann gern mal demnächst™ an der EAH noch mal fragen wie das mit Räumen ist wenn Interesse besteht. Hab aber vorher noch mal ne eigene Frage hier bzgl. rxjs Also, ich arbeite gerade an etwas das den Stream einer Cam nutzen soll und wollte ganz einfach einen Record-Button einblenden, wenn nichts gemacht wird und einen Stop-Button wenn denn aufgenommen wird. Da dachte ich mir hey du kannst ja ein Observable nutzen damit ich den MediaStream auf dessen state überwachen kann. Hat sich dann herausgestellt, dass das nicht gehen kann, da dass ja ein Promise ist und nur einmal resolved. Ein Freund hat mir dann empfohlen, es doch andersherum zu machen und mir ein Observable aus den Click Events meiner Buttons zu machen. Klappt auch super, ich zeug euch mal wie das ist:
export class CameraComponent implements OnInit, AfterViewInit {
@ViewChild('video', { static: true }) public video: ElementRef;
@ViewChild('recordStream', { static: false, read: ElementRef })
public recordStreamButton: ElementRef;
@ViewChild('stopStream', { static: false, read: ElementRef })
public stopStreamButton: ElementRef;
public async ngAfterViewInit() {
const activateButtonClick$ = fromEvent(
this.recordStreamButton.nativeElement,
'click',
);
const deactivateButtonClick$ = fromEvent(
this.stopStreamButton.nativeElement,
'click',
);
const activated$ = merge(
activateButtonClick$.pipe(mapTo(true)),
deactivateButtonClick$.pipe(mapTo(false)),
);
activated$.subscribe(activated => {
activated ? this.getVideoStream() : this.stopCamera();
});
}
<button
#recordStream
class="custom-button"
color="primary"
mat-fab
>
<mat-icon inline="true">videocam</mat-icon>
</button>
<button
#stopStream
class="custom-button"
color="warn"
mat-fab
>
<mat-icon inline="true">videocam_off</mat-icon>
</button>
so und jetzt frage ich mich ob ich eigentlich wirklich einen Vorteil davon habe das so zu tun? Letztlich könnte ich ja einfach in getVideoStream oder stopCamera eine Variable isActive togglen und gut oder?
| 13:17:58 |
0xAFFE | tarvos90: Na du willst bei der observeable in angular benutzung auf subscribe nach möglichkeit verzichten und dann eher die async pipe benutzen. du kannst ja mit from(new Promise()) ein Promise auch in ein Observeable umwandeln. Sowas könntest du auch noch machen:
<button
#recordStream
class="custom-button"
color="primary"
mat-fab
*ngIf="activated | async"
>
<mat-icon inline="true">videocam</mat-icon>
</button>
<button
#stopStream
class="custom-button"
color="warn"
mat-fab
*ngIf="activated | async"
>
| 13:24:45 |
0xAFFE | * tarvos90: Na du willst bei der observeable in angular benutzung auf subscribe nach möglichkeit verzichten und dann eher die async pipe benutzen. du kannst ja mit from(new Promise()) ein Promise auch in ein Observeable umwandeln. Sowas könntest du auch noch machen:
<button
#recordStream
class="custom-button"
color="primary"
mat-fab
*ngIf="activated$ | async"
>
<mat-icon inline="true">videocam</mat-icon>
</button>
<button
#stopStream
class="custom-button"
color="warn"
mat-fab
*ngIf="activated$ | async"
>
| 13:25:18 |
tarvos90 | unter der Annahme das ich den Stream überwachse müsste ich die async Pipe nehmen ne? | 13:25:46 |
tarvos90 | aber so an sich reicht ja wirklich einfach
Play Click -> isActive
Stop Click -> isActive = false | 13:26:18 |
0xAFFE | bzw für den Stop-Button so:
<button
#stopStream
class="custom-button"
color="warn"
mat-fab
*ngIf="!(activated$ | async)"
>
| 13:26:34 |
tarvos90 | * unter der Annahme das ich den Stream überwache müsste ich die async Pipe nehmen ne? | 13:26:53 |
0xAFFE | Wenn du sowas wie ngxs hast, würdest du das ja eh etwas anders machen. | 13:28:42 |
tarvos90 | das müsste ich erst mal lernen :D. Ich mach's erstmal so dumm wie möglich einfach mit direkten Events an den Buttons und isActive als Variable | 13:30:47 |
tarvos90 | muss es ja nicht komplizierter als nötig machen | 13:30:57 |
tarvos90 | aber den MediaStream später überwachen kann mir dann immer noch passieren wenn ich tatsächlich damit Dinge tue | 13:31:40 |
0xAFFE | yo, aber mir rxjs ist glaube ich schon ganz gut, da kannste die events nehmen wie sie kommen, gut transformieren und dann umwandeln und über die async pipe ans UI binden | 13:32:13 |
0xAFFE | tarvos90: Wenn ich mir das so ansehe kannst du doch auf die addtrack und removetrack events reagieren? https://developer.mozilla.org/en-US/docs/Web/API/MediaStream | 13:33:31 |
tarvos90 | hmm ja | 13:35:16 |
tarvos90 | FYI: übrigens wenn man target auf es2020 setzt weil man denkt "ja neu ist besser" sollte man auf die Warnung in der CLI achten | 13:36:48 |
tarvos90 | das macht nämlich die Change Detection kaputt :D | 13:36:59 |
tarvos90 | weil zone.js async nur bis es2016 oder so kann | 13:37:16 |
tarvos90 | fällt mir gerade ein, hatte ich vorgestern das Problem | 13:37:25 |
tarvos90 | und auch interessant: an meinem Handy bekomme ich drei Frontkameras obwohl es zwei Linsen sind, mal sehen was das eine sein soll | 13:44:31 |
0xAFFE | tarvos90: https://github.com/angular/angular/issues/31730 | 16:42:46 |
tarvos90 | oh dein letzter Beitrag von Mai 2018 | 21:46:58 |
tarvos90 | hab den Rest gelesen, hm tja :D | 22:20:04 |
12 Oct 2019 |
0xAFFE | Eine sehr unschöne situation | 08:51:41 |