I have problem with video src. After clicking on my div (camera) in source code I can see that video src is changing properly, but videos arent being played. What should I do?
Below are my components - streaming.component.ts (responsible for displaying videos of chosen camera component) and camera.component.ts (for viewing icon with 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;
}
}
Videos are working ,because when I put
<source src = "{{cameraSrc}}" type="video/mp4">
everything is fine.
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() { }
}
Don't know why, but that way:
It is working.
Changing
src
is not enough for<video>
, you need to reload it:Or more generally, you can make your component watch the changes through the
OnChanges
contract:(Of course you don't need to lookup the
player
element every time if you can secure its unchanging value before, like inngOnInit
)I had a similar problem... I settled with using a backing array
Whenever my array is emptied the video component disappears... if my array changes the component gets renew.
Works like a charm, hope it helps.
In html template use video tag
In Component
Seems like the
src
attribute of the<source>
element doesn't like to be dynamic. Try changing your markup to be:<source *ngIf="cameraSrc" src="{{cameraSrc}}" type="video/mp4">
That way the DOM element only gets created when there is indeed a value in
cameraSrc
.in Angular 6, Here is the sample.
And Component code is