camstreamerlib
Version:
Helper library for CamStreamer ACAP applications.
98 lines (97 loc) • 4.04 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.streamCommonSchema = exports.streamAudioSchema = exports.streamVideoSchema = exports.internalVapixParametersSchema = exports.streamDelaySchema = exports.overlaysSchema = exports.videoCodecSchema = exports.streamingProtocolTypeSchema = exports.streamInputTypeSchema = exports.streamTriggerSchema = void 0;
const zod_1 = require("zod");
const common_1 = require("../common");
const scheduleSchema = zod_1.z.object({
start: zod_1.z.object({
day: zod_1.z.number().int().min(0).max(6),
timeS: zod_1.z.number().int().min(0).max(86400),
}),
stop: zod_1.z.object({
day: zod_1.z.number().int().min(0).max(6),
timeS: zod_1.z.number().int().min(0).max(86400),
}),
isActive: zod_1.z.boolean(),
});
exports.streamTriggerSchema = zod_1.z.discriminatedUnion('type', [
zod_1.z.object({
type: zod_1.z.literal('manual'),
ioPort: zod_1.z.string().nullable(),
}),
zod_1.z.object({ type: zod_1.z.literal('onetime'), startTime: zod_1.z.number(), stopTime: zod_1.z.number() }),
zod_1.z.object({
type: zod_1.z.literal('recurrent'),
schedule: zod_1.z.array(scheduleSchema),
}),
]);
exports.streamInputTypeSchema = zod_1.z.union([zod_1.z.literal('CSw'), zod_1.z.literal('CRS'), zod_1.z.literal('RTSP_URL')]);
exports.streamingProtocolTypeSchema = zod_1.z.union([zod_1.z.literal('RTMP'), zod_1.z.literal('RTMPS'), zod_1.z.literal('HLS_PUSH')]);
exports.videoCodecSchema = zod_1.z.union([zod_1.z.literal('h264'), zod_1.z.literal('h265'), zod_1.z.literal('av1')]);
exports.overlaysSchema = zod_1.z.union([
zod_1.z.literal('all'),
zod_1.z.literal('text'),
zod_1.z.literal('image'),
zod_1.z.literal('application'),
zod_1.z.literal(''),
zod_1.z.literal('off'),
]);
exports.streamDelaySchema = zod_1.z.object({
value: zod_1.z.number().int(),
unit: zod_1.z.union([zod_1.z.literal('seconds'), zod_1.z.literal('minutes'), zod_1.z.literal('hours')]),
});
exports.internalVapixParametersSchema = common_1.bitrateVapixParamsSchema.extend({
camera: zod_1.z.string(),
resolution: zod_1.z.string(),
fps: zod_1.z.number().int(),
compression: zod_1.z.number().int(),
govLength: zod_1.z.number().int(),
videoCodec: exports.videoCodecSchema,
h264Profile: common_1.h264ProfileSchema.optional(),
audio: common_1.booleanSchema,
nbrOfChannels: zod_1.z.union([zod_1.z.literal(1), zod_1.z.literal(2)]).optional(),
overlays: zod_1.z
.union([
zod_1.z.literal('all'),
zod_1.z.literal('text'),
zod_1.z.literal('image'),
zod_1.z.literal('application'),
zod_1.z.literal(''),
zod_1.z.literal('off'),
])
.optional(),
});
exports.streamVideoSchema = zod_1.z.object({
inputType: exports.streamInputTypeSchema,
sourceUrl: zod_1.z.string().optional(),
internalVapixParameters: zod_1.z.string(),
userVapixParameters: zod_1.z.string(),
streamingProtocol: exports.streamingProtocolTypeSchema,
streamDelay: exports.streamDelaySchema.optional(),
});
exports.streamAudioSchema = zod_1.z.discriminatedUnion('source', [
zod_1.z.object({
source: zod_1.z.literal('none'),
}),
zod_1.z.object({ source: zod_1.z.literal('microphone'), audioChannelNbr: zod_1.z.union([zod_1.z.literal(1), zod_1.z.literal(2)]) }),
zod_1.z.object({
source: zod_1.z.literal('file'),
fileName: zod_1.z.string(),
filePath: zod_1.z.string(),
}),
zod_1.z.object({
source: zod_1.z.literal('url'),
fileName: zod_1.z.string(),
fileUrl: zod_1.z.string(),
avSyncMsec: zod_1.z.number().int().nonnegative(),
}),
]);
exports.streamCommonSchema = zod_1.z.object({
id: zod_1.z.number(),
enabled: zod_1.z.boolean(),
active: zod_1.z.boolean(),
title: zod_1.z.string(),
trigger: exports.streamTriggerSchema,
video: exports.streamVideoSchema,
audio: exports.streamAudioSchema,
});