fixed tests
This commit is contained in:
55
public/js/services/MediaHandler.ts
Normal file
55
public/js/services/MediaHandler.ts
Normal file
@@ -0,0 +1,55 @@
|
||||
import type { IMediaHandler } from '../interfaces/IWebRTCClient.ts';
|
||||
|
||||
export class MediaHandler implements IMediaHandler {
|
||||
private localStream: MediaStream | null = null;
|
||||
private videoElement: HTMLVideoElement | null = null;
|
||||
|
||||
constructor(videoElementId?: string) {
|
||||
if (videoElementId) {
|
||||
this.videoElement = document.getElementById(videoElementId) as HTMLVideoElement;
|
||||
}
|
||||
}
|
||||
|
||||
async getLocalStream(): Promise<MediaStream> {
|
||||
try {
|
||||
this.localStream = await navigator.mediaDevices.getUserMedia({
|
||||
video: {
|
||||
width: { ideal: 1280 },
|
||||
height: { ideal: 720 },
|
||||
frameRate: { ideal: 30 }
|
||||
},
|
||||
audio: true
|
||||
});
|
||||
|
||||
if (this.videoElement) {
|
||||
this.videoElement.srcObject = this.localStream;
|
||||
}
|
||||
|
||||
return this.localStream;
|
||||
} catch (error) {
|
||||
console.error('Error accessing media devices:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
stopLocalStream(): void {
|
||||
if (this.localStream) {
|
||||
this.localStream.getTracks().forEach(track => {
|
||||
track.stop();
|
||||
});
|
||||
this.localStream = null;
|
||||
}
|
||||
|
||||
if (this.videoElement) {
|
||||
this.videoElement.srcObject = null;
|
||||
}
|
||||
}
|
||||
|
||||
getLocalVideo(): HTMLVideoElement | null {
|
||||
return this.videoElement;
|
||||
}
|
||||
|
||||
getCurrentStream(): MediaStream | null {
|
||||
return this.localStream;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user