Angular 2 - change src video after clicking on div

I have a problem with src video. After clicking on my div (camera) in the source code, I see that the src video changes correctly, but the video does not play. What should I do?

Below are my components - streaming.component.ts (responsible for displaying the video of the selected camera component) and camera.component.ts (for viewing the icon with the camera name)

streaming.component.ts

import {Component} from '@angular/core';
import {CameraComponent} from '../camera/camera.component';

@Component({
   moduleId: module.id,
   selector: 'streaming',
   template: '
            <camera cameraName="Kamera 1" (click)='cameraStream("sample.mp4")'></camera>
            <camera cameraName="Kamera 2" (click)='cameraStream("sample2.mp4")'></camera>
            <camera cameraName="Kamera 3" (click)='cameraStream("sample3.mp4")'></camera>
            <camera cameraName="Kamera 4" (click)='cameraStream("sample4.mp4")'></camera>
            <video width="800" controls>
                <source src = "{{cameraSrc}}" type="video/mp4">
                Your browser does not support HTML5 video.
            </video>
            <p>{{cameraSrc}}</p>
            ',
directives: [CameraComponent]
})
export class StreamingComponent {

 cameraSrc:string;
 constructor() { }

 cameraStream(chosenCamera :string){
    this.cameraSrc=chosenCamera;
  }
 }

The videos work because when I put

<source src = "{{cameraSrc}}" type="video/mp4">

All perfectly.

camera.component.ts

import { Component ,Input } from '@angular/core';

@Component({
    moduleId: module.id,
    selector: 'camera',
    templateUrl: 'camera.component.html'
})
export class CameraComponent {
     @Input() cameraName:string = "";

     constructor() { }

 }

This is what I get after clicking on camera2, for example .

+5
source share
8 answers

I don’t know why, but like this:

<video width="800" [src] = "cameraSrc" controls>
    Your browser does not support HTML5 video.
</video>

He works.

+18
source

In the HTML template, use the video tag

<video #video id="video" width="100%" height="100%" controls></video>

<mat-icon (click)="playVideo(url)">
            play_arrow
          </mat-icon>

@ViewChild('video')

public video: ElementRef;

playVideo(url: string) {
    this.video.nativeElement.src = url;
    this.video.nativeElement.load();
    this.video.nativeElement.play();
  }
+3

src <video>, :

constructor(private elRef: ElementRef) { }   // To find elements inside component

cameraStream(chosenCamera: string) {
  this.cameraSrc = chosenCamera;
  const player = this.elRef.nativeElement.querySelector('video');
  player.load();
}

, , OnChanges:

cameraStream(chosenCamera: string) {
  this.cameraSrc = chosenCamera;
}

ngOnChanges(changes: SimpleChanges): void {
  if (changes.cameraSrc) {
    const player = this.elRef.nativeElement.querySelector('video');
    player.load();
  }
}

(, player , ngOnInit)

+2

, src <source> . :

<source *ngIf="cameraSrc" src="{{cameraSrc}}" type="video/mp4">

, DOM , cameraSrc.

+1

, , .

, , , , . , , , .

0

...

<span *ngFor="let video of app.videoPlayer.videos">
<img src="{{video.artBig()}}" style="width: 1920px;height: 1080px;top: 0px;left:0px;z-index: -1; position: absolute;"/>

<video preload="auto" crossorigin controls autoplay
   style="width: 1920px;height: 1080px;top: 0px;left:0px;z-index:1; position: absolute;">
  <source src="{{video.url()}}" type="{{video.mimeType()}}">
</video>
</span>

, , ... , .

, , .

0

HTML5.

@Mateusz .

0

Angular 6, .

    <div style="text-align:center">
  <div *ngFor="let item of data" >
    <div class="module hero">
      <a href="javascript: void(0)" (click)="showVideo(item)">
       {{item.name}}
        </a>
    </div>
  </div>
</div>
<div *ngIf="selectedItem">
  <video controls autoplay #myVideo>
    <source *ngIf="selectedItem" [src]="selectedItem.url" type="video/mp4" />
    Browser not supported
</video>
</div>

showVideo(item: any){
    this.selectedItem =null;
    this.selectedItem =item;  
    this.myVideo.nativeElement.src = item.url; 
  }
0

Source: https://habr.com/ru/post/1652682/


All Articles