infobip-rtc
Version:
Infobip RTC JavaScript SDK - Infobip WebRTC API Implementation
90 lines • 3.84 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
import { createFrameProvider } from './frame-provider/FrameProvider';
import { FpsCounter } from "./util/FpsCounter";
import { CallsApiEvent } from "../../../event/CallsApiEvents";
import { ApplicationErrorCode } from "../../../ApplicationErrorCode";
export class DefaultVideoFilterManager {
constructor(videoFilter) {
this.videoFilter = videoFilter;
this.fpsCounter = new FpsCounter();
}
stop() {
var _a;
return __awaiter(this, void 0, void 0, function* () {
if (!this.originalTrack) {
return;
}
yield this.videoFilter.stop();
(_a = this.frameProvider) === null || _a === void 0 ? void 0 : _a.destroy();
this.setActiveTrack(this.originalTrack);
delete this.originalTrack;
delete this.originalStream;
delete this.frameProvider;
});
}
getCurrentFramerate() {
return this.fpsCounter.fps();
}
getVideoFilter() {
return this.videoFilter;
}
configureFramerate(filterFps) {
this.frameProvider.configureFramerate(filterFps);
}
start(stream, trackIndex, apiEventEmitter) {
return __awaiter(this, void 0, void 0, function* () {
const track = stream.getTracks()[trackIndex];
if (!track) {
return null;
}
if (this.originalTrack) {
this.originalTrack.stop();
}
this.originalTrack = track;
this.originalStream = stream;
const width = track.getSettings().width;
const height = track.getSettings().height;
const sourceFps = track.getSettings().frameRate;
this.apiEventEmitter = apiEventEmitter;
this.frameProvider = createFrameProvider(track, sourceFps, (frame) => this.onFrameProvided(frame));
this.frameProvider.configureFramerate(sourceFps);
this.filteredTrack = yield this.videoFilter.start(width, height, sourceFps, this);
this.setActiveTrack(this.filteredTrack);
this.frameProvider.start();
return this.filteredTrack;
});
}
setActiveTrack(track) {
if (track !== this.originalTrack) {
this.originalStream.removeTrack(this.originalTrack);
}
else if (track !== this.filteredTrack) {
this.originalStream.removeTrack(this.filteredTrack);
}
this.originalStream.addTrack(track);
}
onFrameProvided(frame) {
return __awaiter(this, void 0, void 0, function* () {
try {
yield this.videoFilter.applyFilter(frame);
}
catch (error) {
this.apiEventEmitter.emit(CallsApiEvent.ERROR, {
id: ApplicationErrorCode.MEDIA_ERROR.id,
name: ApplicationErrorCode.MEDIA_ERROR.name,
description: (error === null || error === void 0 ? void 0 : error.message) || error,
});
}
this.fpsCounter.tick();
});
}
}
//# sourceMappingURL=DefaultVideoFilterManager.js.map