infobip-rtc
Version:
Infobip RTC JavaScript SDK - Infobip WebRTC API Implementation
52 lines • 2.14 kB
JavaScript
import VideoType from "../../util/VideoType";
export class AbstractCapturer {
constructor(localCameraStream, localScreenShareStream, remotePeerConnection, mid, currentUserIdentity) {
this.localCameraStream = localCameraStream;
this.localScreenShareStream = localScreenShareStream;
this.remotePeerConnection = remotePeerConnection;
this.mid = mid;
this.currentUserIdentity = currentUserIdentity;
}
async getCanvas(identity, videoType) {
let videoStream = this.getVideoStream(identity, videoType);
if (!videoStream) {
throw new Error(`Video not found for identity ${identity} and video type ${videoType}`);
}
return this.drawImage(videoStream);
}
async drawImage(videoStream) {
const video = await this.getVideoElement(videoStream);
let canvas = document.createElement('canvas');
canvas.width = video.videoWidth;
canvas.height = video.videoHeight;
canvas.getContext('2d').drawImage(video, 0, 0, video.videoWidth, video.videoHeight);
video.srcObject = null;
return canvas;
}
getVideoStream(identity, videoType) {
if (identity === this.currentUserIdentity) {
return videoType === VideoType.CAMERA ? this.localCameraStream() : this.localScreenShareStream();
}
else {
const mid = this.mid(identity, videoType);
for (const transceiver of this.remotePeerConnection()?.getTransceivers()) {
if (transceiver.mid === mid) {
return new MediaStream([transceiver.receiver.track]);
}
}
}
return null;
}
async getVideoElement(stream) {
const video = document.createElement('video');
const track = stream.getVideoTracks()[0];
video.width = track.getSettings().width;
video.height = track.getSettings().height;
video.autoplay = true;
video.playsInline = true;
video.srcObject = stream;
await video.play();
return video;
}
}
//# sourceMappingURL=AbstractCapturer.js.map