Video Recording In Angular
In this article, we will learn about how video record in Angular.
So, let's start
First, we need to create a new angular application using following command.
ng new AngularVideoRecording
import { Component, ViewChild, ElementRef } from '@angular/core';
declare var MediaRecorder: any;
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
@ViewChild('recordedVideo') recordVideoElementRef: ElementRef | any;
@ViewChild('video') videoElementRef: ElementRef | any;
htmlVideoElement: HTMLVideoElement | any;
recordVideoElement: HTMLVideoElement | any;
mediaRecorder: any;
recordedBlobs: Blob[] | any;
isRecording: boolean = false;
downloadUrl: string | any;
stream: MediaStream | any;
constructor() { }
ngOnInit() {
navigator.mediaDevices
.getUserMedia({
video: {
width: 360
}
})
.then(stream => {
this.htmlVideoElement = this.videoElementRef.nativeElement;
this.recordVideoElement = this.recordVideoElementRef.nativeElement;
this.stream = stream;
this.htmlVideoElement.srcObject = this.stream;
});
}
startRecording() {
this.recordedBlobs = [];
let options: any = { mimeType: 'video/webm' };
this.mediaRecorder = new MediaRecorder(this.stream, options);
this.mediaRecorder.start();
this.isRecording = !this.isRecording;
this.onDataAvailableEvent();
this.onStopRecordingEvent();
}
stopRecording() {
this.mediaRecorder.stop();
this.isRecording = !this.isRecording;
}
playRecording() {
if (!this.recordedBlobs || !this.recordedBlobs.length) {
console.log('cannot play.');
return;
}
this.recordVideoElement.play();
}
onDataAvailableEvent() {
try {
this.mediaRecorder.ondataavailable = (event: any) => {
if (event.data && event.data.size > 0) {
this.recordedBlobs.push(event.data);
}
};
} catch (error) {
console.log(error);
}
}
onStopRecordingEvent() {
this.mediaRecorder.onstop = (event: Event) => {
const videoBuffer = new Blob(this.recordedBlobs, {
type: 'video/webm'
});
this.downloadUrl = window.URL.createObjectURL(videoBuffer);
this.recordVideoElement.src = this.downloadUrl;
console.log(this.downloadUrl);
};
}
}
<div style="text-align:center"> <video class="video" #video autoplay></video> <span class="m-1"></span> <br><br> <button class="btn btn-primary btn-lg" *ngIf="!isRecording" (click)="startRecording()">Start Recording</button> <button class="btn btn-warning btn-lg" *ngIf="isRecording" (click)="stopRecording()">Stop Recording</button> <br><br> <video class="video" style="width:360 !important;" controls #recordedVideo> </video> </div>
Now add below CDN link into the root index.html file for jQuery and Bootstrap.
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
Conclusion
In this article, we learned how video record in Angular and showing preview with demo application.
I hope this article helps you and you will like it.👍
If you have any doubt or confusion then free to ask in comment section.