!bckdVuIloZOXRjKIXO:matrix.org

JavaScript in Jena

36 Members
MeatSpace treffen mit Leuten die gerne JavaScript programmieren | https://jena.js.org8 Servers

Load older messages


SenderMessageTime
11 Oct 2019
@tarvos90:matrix.orgtarvos90

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:matrix.orgtarvos90hab ich einen Vorteil davon hier Observables zu nutzen?13:14:50
@tarvos90:matrix.orgtarvos90 *

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:matrix.orgtarvos90es verschluckt gerade Code :D13:16:07
@tarvos90:matrix.orgtarvos90komische Formatierung mom13:16:11
@tarvos90:matrix.orgtarvos90 *

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:matrix.orgtarvos90ah jetzt13:16:39
@tarvos90:matrix.orgtarvos90 *

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
@tim:schumacher.im0xAFFE

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
@tim:schumacher.im0xAFFE *

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:matrix.orgtarvos90unter der Annahme das ich den Stream überwachse müsste ich die async Pipe nehmen ne?13:25:46
@tarvos90:matrix.orgtarvos90aber so an sich reicht ja wirklich einfach Play Click -> isActive Stop Click -> isActive = false13:26:18
@tim:schumacher.im0xAFFE

bzw für den Stop-Button so:

<button
    #stopStream
    class="custom-button"
    color="warn"
    mat-fab
    *ngIf="!(activated$ | async)"
>
13:26:34
@tarvos90:matrix.orgtarvos90 * unter der Annahme das ich den Stream überwache müsste ich die async Pipe nehmen ne?13:26:53
@tim:schumacher.im0xAFFEWenn du sowas wie ngxs hast, würdest du das ja eh etwas anders machen.13:28:42
@tarvos90:matrix.orgtarvos90das 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 Variable13:30:47
@tarvos90:matrix.orgtarvos90muss es ja nicht komplizierter als nötig machen13:30:57
@tarvos90:matrix.orgtarvos90aber den MediaStream später überwachen kann mir dann immer noch passieren wenn ich tatsächlich damit Dinge tue13:31:40
@tim:schumacher.im0xAFFEyo, 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 binden13:32:13
@tim:schumacher.im0xAFFE 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:matrix.orgtarvos90hmm ja13:35:16
@tarvos90:matrix.orgtarvos90FYI: übrigens wenn man target auf es2020 setzt weil man denkt "ja neu ist besser" sollte man auf die Warnung in der CLI achten13:36:48
@tarvos90:matrix.orgtarvos90das macht nämlich die Change Detection kaputt :D13:36:59
@tarvos90:matrix.orgtarvos90weil zone.js async nur bis es2016 oder so kann13:37:16
@tarvos90:matrix.orgtarvos90fällt mir gerade ein, hatte ich vorgestern das Problem13:37:25
@tarvos90:matrix.orgtarvos90und auch interessant: an meinem Handy bekomme ich drei Frontkameras obwohl es zwei Linsen sind, mal sehen was das eine sein soll13:44:31
@tim:schumacher.im0xAFFE tarvos90: https://github.com/angular/angular/issues/31730 16:42:46
@tarvos90:matrix.orgtarvos90oh dein letzter Beitrag von Mai 201821:46:58
@tarvos90:matrix.orgtarvos90hab den Rest gelesen, hm tja :D22:20:04
12 Oct 2019
@tim:schumacher.im0xAFFEEine sehr unschöne situation08:51:41

Show newer messages


Back to Room ListRoom Version: