@camera.ui/common 0.0.19 → 0.0.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cameraUtils/codec-hardware.d.ts +59 -0
- package/dist/cameraUtils/codec-hardware.js +460 -0
- package/dist/cameraUtils/codec-hardware.js.map +1 -0
- package/dist/cameraUtils/ffmpeg.d.ts +1 -8
- package/dist/cameraUtils/ffmpeg.js +27 -60
- package/dist/cameraUtils/ffmpeg.js.map +1 -1
- package/dist/cameraUtils/index.d.ts +1 -0
- package/dist/cameraUtils/index.js +1 -0
- package/dist/cameraUtils/index.js.map +1 -1
- package/dist/cameraUtils/rtp-splitter.js +2 -1
- package/dist/cameraUtils/rtp-splitter.js.map +1 -1
- package/dist/index.d.ts +2 -9
- package/dist/index.js +2 -9
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
export type HWVideoCodec = {
|
|
2
|
+
name: string;
|
|
3
|
+
codecName: string;
|
|
4
|
+
};
|
|
5
|
+
export type HWArgs = string[];
|
|
6
|
+
export type HWVideoFile = {
|
|
7
|
+
width: number;
|
|
8
|
+
height: number;
|
|
9
|
+
path?: string;
|
|
10
|
+
};
|
|
11
|
+
export type HWFFmpegVersion = {
|
|
12
|
+
major: number;
|
|
13
|
+
minor: number;
|
|
14
|
+
patch: number;
|
|
15
|
+
};
|
|
16
|
+
export type HwAccellMethod = 'auto' | 'cuda' | 'vaapi' | 'videotoolbox' | 'qsv' | 'rkmpp' | 'v4l2m2m';
|
|
17
|
+
export declare class FFMpegHardware {
|
|
18
|
+
static VideoCodecN264: HWVideoCodec;
|
|
19
|
+
static VideoCodecN264H: HWVideoCodec;
|
|
20
|
+
static VideoCodecI264: HWVideoCodec;
|
|
21
|
+
static VideoCodecI264C: HWVideoCodec;
|
|
22
|
+
static VideoCodecM264: HWVideoCodec;
|
|
23
|
+
static VideoCodecV264: HWVideoCodec;
|
|
24
|
+
static VideoCodecO264: HWVideoCodec;
|
|
25
|
+
static VideoCodecRK264: HWVideoCodec;
|
|
26
|
+
static VideoCodecJetson264: HWVideoCodec;
|
|
27
|
+
static VideoCodecV4L2M2M264: HWVideoCodec;
|
|
28
|
+
static VideoCodecVulkan264: HWVideoCodec;
|
|
29
|
+
static VideoCodecN265: HWVideoCodec;
|
|
30
|
+
static VideoCodecI265: HWVideoCodec;
|
|
31
|
+
static VideoCodecM265: HWVideoCodec;
|
|
32
|
+
static VideoCodecV265: HWVideoCodec;
|
|
33
|
+
static VideoCodecRK265: HWVideoCodec;
|
|
34
|
+
static VideoCodecJetson265: HWVideoCodec;
|
|
35
|
+
static VideoCodecV4L2M2M265: HWVideoCodec;
|
|
36
|
+
static VideoCodecVulkan265: HWVideoCodec;
|
|
37
|
+
hwCodecSupport: HWVideoCodec[];
|
|
38
|
+
private minHeight;
|
|
39
|
+
private scalerRegex;
|
|
40
|
+
private _ffmpegPath;
|
|
41
|
+
private ffmpegPathChanged;
|
|
42
|
+
get ffmpegPath(): string;
|
|
43
|
+
static get H264Codecs(): HWVideoCodec[];
|
|
44
|
+
static get H265Codecs(): HWVideoCodec[];
|
|
45
|
+
constructor(_ffmpegPath?: string);
|
|
46
|
+
setFfmpegPath(_ffmpegPath: string): void;
|
|
47
|
+
initHWSupport(): Promise<void>;
|
|
48
|
+
hwDeviceInit(args: HWArgs, toCodec: HWVideoCodec): HWArgs;
|
|
49
|
+
codecInit(codec: HWVideoCodec): HWArgs;
|
|
50
|
+
hwDeviceArgs(toCodec: HWVideoCodec): HWArgs;
|
|
51
|
+
hwFilterInit(toCodec: HWVideoCodec, fullhw?: boolean): string;
|
|
52
|
+
hwApplyScaleTemplate(sargs: string, toCodec: HWVideoCodec, targetWidth: number, targetHeight: number): string;
|
|
53
|
+
hwApplyFullHWFilter(args: string, toCodec: HWVideoCodec, fullhw: boolean): string;
|
|
54
|
+
hwMaxResFilter(toCodec: HWVideoCodec, vf: HWVideoFile, reqHeight: number, fullhw: boolean): string | null;
|
|
55
|
+
getHwaccelMethod(codec: HWVideoCodec): HwAccellMethod;
|
|
56
|
+
private executeFFmpeg;
|
|
57
|
+
private calculateTargetDimensions;
|
|
58
|
+
hwCodecMaxRes(codec: HWVideoCodec): [number, number];
|
|
59
|
+
}
|
|
@@ -0,0 +1,460 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
export class FFMpegHardware {
|
|
3
|
+
// H264 Codecs
|
|
4
|
+
static VideoCodecN264 = { name: 'H264 NVENC', codecName: 'h264_nvenc' };
|
|
5
|
+
static VideoCodecN264H = { name: 'H264 NVENC HQ profile', codecName: 'h264_nvenc' };
|
|
6
|
+
static VideoCodecI264 = { name: 'H264 Intel Quick Sync Video (QSV)', codecName: 'h264_qsv' };
|
|
7
|
+
static VideoCodecI264C = { name: 'H264 Intel Quick Sync Video (QSV) Compatibility profile', codecName: 'h264_qsv' };
|
|
8
|
+
static VideoCodecM264 = { name: 'H264 VideoToolbox', codecName: 'h264_videotoolbox' };
|
|
9
|
+
static VideoCodecV264 = { name: 'H264 VAAPI', codecName: 'h264_vaapi' };
|
|
10
|
+
static VideoCodecO264 = { name: 'H264 OpenMAX (Raspberry Pi)', codecName: 'h264_omx' };
|
|
11
|
+
static VideoCodecRK264 = { name: 'H264 Rockchip MPP', codecName: 'h264_rkmpp' };
|
|
12
|
+
static VideoCodecJetson264 = { name: 'H264 Jetson NVMM', codecName: 'h264_nvmpi' };
|
|
13
|
+
static VideoCodecV4L2M2M264 = { name: 'H264 V4L2M2M', codecName: 'h264_v4l2m2m' };
|
|
14
|
+
static VideoCodecVulkan264 = { name: 'H264 Vulkan', codecName: 'h264_vulkan' };
|
|
15
|
+
// H265 (HEVC) Codecs
|
|
16
|
+
static VideoCodecN265 = { name: 'HEVC NVENC', codecName: 'hevc_nvenc' };
|
|
17
|
+
static VideoCodecI265 = { name: 'HEVC Intel Quick Sync Video (QSV)', codecName: 'hevc_qsv' };
|
|
18
|
+
static VideoCodecM265 = { name: 'HEVC VideoToolbox', codecName: 'hevc_videotoolbox' };
|
|
19
|
+
static VideoCodecV265 = { name: 'HEVC VAAPI', codecName: 'hevc_vaapi' };
|
|
20
|
+
static VideoCodecRK265 = { name: 'HEVC Rockchip MPP', codecName: 'hevc_rkmpp' };
|
|
21
|
+
static VideoCodecJetson265 = { name: 'HEVC Jetson NVMM', codecName: 'hevc_nvmpi' };
|
|
22
|
+
static VideoCodecV4L2M2M265 = { name: 'HEVC V4L2M2M', codecName: 'hevc_v4l2m2m' };
|
|
23
|
+
static VideoCodecVulkan265 = { name: 'HEVC Vulkan', codecName: 'hevc_vulkan' };
|
|
24
|
+
hwCodecSupport;
|
|
25
|
+
minHeight = 360;
|
|
26
|
+
scalerRegex = /scale=([-0-9]+):([-0-9]+)/;
|
|
27
|
+
_ffmpegPath;
|
|
28
|
+
ffmpegPathChanged = false;
|
|
29
|
+
get ffmpegPath() {
|
|
30
|
+
return this._ffmpegPath;
|
|
31
|
+
}
|
|
32
|
+
static get H264Codecs() {
|
|
33
|
+
return [
|
|
34
|
+
FFMpegHardware.VideoCodecN264,
|
|
35
|
+
FFMpegHardware.VideoCodecN264H,
|
|
36
|
+
FFMpegHardware.VideoCodecI264,
|
|
37
|
+
FFMpegHardware.VideoCodecI264C,
|
|
38
|
+
FFMpegHardware.VideoCodecM264,
|
|
39
|
+
FFMpegHardware.VideoCodecV264,
|
|
40
|
+
FFMpegHardware.VideoCodecO264,
|
|
41
|
+
FFMpegHardware.VideoCodecRK264,
|
|
42
|
+
FFMpegHardware.VideoCodecJetson264,
|
|
43
|
+
FFMpegHardware.VideoCodecV4L2M2M264,
|
|
44
|
+
FFMpegHardware.VideoCodecVulkan264,
|
|
45
|
+
];
|
|
46
|
+
}
|
|
47
|
+
static get H265Codecs() {
|
|
48
|
+
return [
|
|
49
|
+
FFMpegHardware.VideoCodecN265,
|
|
50
|
+
FFMpegHardware.VideoCodecI265,
|
|
51
|
+
FFMpegHardware.VideoCodecM265,
|
|
52
|
+
FFMpegHardware.VideoCodecV265,
|
|
53
|
+
FFMpegHardware.VideoCodecRK265,
|
|
54
|
+
FFMpegHardware.VideoCodecJetson265,
|
|
55
|
+
FFMpegHardware.VideoCodecV4L2M2M265,
|
|
56
|
+
FFMpegHardware.VideoCodecVulkan265,
|
|
57
|
+
];
|
|
58
|
+
}
|
|
59
|
+
constructor(_ffmpegPath = 'ffmpeg') {
|
|
60
|
+
this._ffmpegPath = _ffmpegPath;
|
|
61
|
+
this.hwCodecSupport = [];
|
|
62
|
+
}
|
|
63
|
+
setFfmpegPath(_ffmpegPath) {
|
|
64
|
+
this._ffmpegPath = _ffmpegPath;
|
|
65
|
+
if (this._ffmpegPath !== _ffmpegPath) {
|
|
66
|
+
this.ffmpegPathChanged = true;
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
this.ffmpegPathChanged = false;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
async initHWSupport() {
|
|
73
|
+
if (this.hwCodecSupport.length > 0 && !this.ffmpegPathChanged) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
const hwCodecSupport = [];
|
|
77
|
+
const codecs = [
|
|
78
|
+
// H264 Codecs
|
|
79
|
+
FFMpegHardware.VideoCodecN264H,
|
|
80
|
+
FFMpegHardware.VideoCodecN264,
|
|
81
|
+
FFMpegHardware.VideoCodecI264,
|
|
82
|
+
FFMpegHardware.VideoCodecI264C,
|
|
83
|
+
FFMpegHardware.VideoCodecV264,
|
|
84
|
+
FFMpegHardware.VideoCodecM264,
|
|
85
|
+
FFMpegHardware.VideoCodecO264,
|
|
86
|
+
FFMpegHardware.VideoCodecRK264,
|
|
87
|
+
FFMpegHardware.VideoCodecJetson264,
|
|
88
|
+
FFMpegHardware.VideoCodecV4L2M2M264,
|
|
89
|
+
FFMpegHardware.VideoCodecVulkan264,
|
|
90
|
+
// H265 Codecs
|
|
91
|
+
FFMpegHardware.VideoCodecN265,
|
|
92
|
+
FFMpegHardware.VideoCodecI265,
|
|
93
|
+
FFMpegHardware.VideoCodecM265,
|
|
94
|
+
FFMpegHardware.VideoCodecV265,
|
|
95
|
+
FFMpegHardware.VideoCodecRK265,
|
|
96
|
+
FFMpegHardware.VideoCodecJetson265,
|
|
97
|
+
FFMpegHardware.VideoCodecV4L2M2M265,
|
|
98
|
+
FFMpegHardware.VideoCodecVulkan265,
|
|
99
|
+
];
|
|
100
|
+
for (const codec of codecs) {
|
|
101
|
+
let args = ['-hide_banner', '-v', 'error'];
|
|
102
|
+
args = this.hwDeviceInit(args, codec);
|
|
103
|
+
args.push('-f', 'lavfi', '-i', 'color=c=red:s=1280x720', '-t', '0.1');
|
|
104
|
+
const videoFilter = this.hwMaxResFilter(codec, { width: 1280, height: 720 }, this.minHeight, false);
|
|
105
|
+
args = args.concat(this.codecInit(codec));
|
|
106
|
+
if (videoFilter) {
|
|
107
|
+
args.push('-vf', videoFilter);
|
|
108
|
+
}
|
|
109
|
+
args.push('-f', 'null', '-');
|
|
110
|
+
try {
|
|
111
|
+
await this.executeFFmpeg(args);
|
|
112
|
+
hwCodecSupport.push(codec);
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
// Codec not supported, ignore
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
this.hwCodecSupport = hwCodecSupport;
|
|
119
|
+
}
|
|
120
|
+
hwDeviceInit(args, toCodec) {
|
|
121
|
+
switch (toCodec) {
|
|
122
|
+
case FFMpegHardware.VideoCodecO264:
|
|
123
|
+
// OpenMAX requires no special initialization
|
|
124
|
+
break;
|
|
125
|
+
case FFMpegHardware.VideoCodecV4L2M2M264:
|
|
126
|
+
case FFMpegHardware.VideoCodecV4L2M2M265:
|
|
127
|
+
// V4L2M2M requires no special initialization
|
|
128
|
+
break;
|
|
129
|
+
case FFMpegHardware.VideoCodecN264:
|
|
130
|
+
case FFMpegHardware.VideoCodecN264H:
|
|
131
|
+
case FFMpegHardware.VideoCodecN265:
|
|
132
|
+
args.push('-threads', '1', '-hwaccel_device', '0', '-hwaccel', 'cuda', '-hwaccel_output_format', 'cuda');
|
|
133
|
+
break;
|
|
134
|
+
case FFMpegHardware.VideoCodecV264:
|
|
135
|
+
case FFMpegHardware.VideoCodecV265:
|
|
136
|
+
args.push('-vaapi_device', '/dev/dri/renderD128', '-hwaccel', 'vaapi', '-hwaccel_output_format', 'vaapi');
|
|
137
|
+
break;
|
|
138
|
+
case FFMpegHardware.VideoCodecI264:
|
|
139
|
+
case FFMpegHardware.VideoCodecI264C:
|
|
140
|
+
case FFMpegHardware.VideoCodecI265:
|
|
141
|
+
args.push('-hwaccel', 'qsv', '-qsv_device', '/dev/dri/renderD128', '-hwaccel_output_format', 'qsv');
|
|
142
|
+
break;
|
|
143
|
+
case FFMpegHardware.VideoCodecM264:
|
|
144
|
+
case FFMpegHardware.VideoCodecM265:
|
|
145
|
+
args.push('-hwaccel', 'videotoolbox', '-hwaccel_output_format', 'videotoolbox_vld');
|
|
146
|
+
break;
|
|
147
|
+
case FFMpegHardware.VideoCodecRK264:
|
|
148
|
+
case FFMpegHardware.VideoCodecRK265:
|
|
149
|
+
args.push('-hwaccel', 'rkmpp', '-hwaccel_output_format', 'drm_prime');
|
|
150
|
+
break;
|
|
151
|
+
case FFMpegHardware.VideoCodecJetson264:
|
|
152
|
+
case FFMpegHardware.VideoCodecJetson265:
|
|
153
|
+
// Jetson NVMM requires no special initialization
|
|
154
|
+
break;
|
|
155
|
+
case FFMpegHardware.VideoCodecVulkan264:
|
|
156
|
+
case FFMpegHardware.VideoCodecVulkan265:
|
|
157
|
+
// args.push('-hwaccel', 'vulkan', '-init_hw_device', 'vulkan=gpu:0', '-filter_hw_device', 'gpu', '-hwaccel_output_format', 'vulkan');
|
|
158
|
+
args.push('-init_hw_device', 'vulkan=vk:0', '-hwaccel', 'vulkan', '-hwaccel_output_format', 'vulkan');
|
|
159
|
+
break;
|
|
160
|
+
default:
|
|
161
|
+
break;
|
|
162
|
+
}
|
|
163
|
+
return args;
|
|
164
|
+
}
|
|
165
|
+
codecInit(codec) {
|
|
166
|
+
return ['-c:v', codec.codecName];
|
|
167
|
+
}
|
|
168
|
+
hwDeviceArgs(toCodec) {
|
|
169
|
+
const args = [];
|
|
170
|
+
switch (toCodec) {
|
|
171
|
+
// https://github.com/FFmpeg/FFmpeg/blob/e907bf677a6bf50de2fe30c8674162bf26e4e83d/libavcodec/videotoolboxenc.c#L2879
|
|
172
|
+
case FFMpegHardware.VideoCodecM264:
|
|
173
|
+
case FFMpegHardware.VideoCodecM265:
|
|
174
|
+
// For Apple devices (VideoToolbox)
|
|
175
|
+
args.push('-allow_sw', '1', '-realtime', '1', '-coder', 'cabac');
|
|
176
|
+
break;
|
|
177
|
+
case FFMpegHardware.VideoCodecV264:
|
|
178
|
+
case FFMpegHardware.VideoCodecV265:
|
|
179
|
+
// For VAAPI
|
|
180
|
+
break;
|
|
181
|
+
case FFMpegHardware.VideoCodecN264:
|
|
182
|
+
case FFMpegHardware.VideoCodecN264H:
|
|
183
|
+
case FFMpegHardware.VideoCodecN265:
|
|
184
|
+
// For NVIDIA NVENC
|
|
185
|
+
break;
|
|
186
|
+
case FFMpegHardware.VideoCodecI264:
|
|
187
|
+
case FFMpegHardware.VideoCodecI264C:
|
|
188
|
+
case FFMpegHardware.VideoCodecI265:
|
|
189
|
+
// For Intel Quick Sync Video (QSV)
|
|
190
|
+
break;
|
|
191
|
+
case FFMpegHardware.VideoCodecRK264:
|
|
192
|
+
case FFMpegHardware.VideoCodecRK265:
|
|
193
|
+
// For Rockchip MPP
|
|
194
|
+
break;
|
|
195
|
+
case FFMpegHardware.VideoCodecJetson264:
|
|
196
|
+
case FFMpegHardware.VideoCodecJetson265:
|
|
197
|
+
// For NVIDIA Jetson
|
|
198
|
+
break;
|
|
199
|
+
case FFMpegHardware.VideoCodecVulkan264:
|
|
200
|
+
case FFMpegHardware.VideoCodecVulkan265:
|
|
201
|
+
break;
|
|
202
|
+
case FFMpegHardware.VideoCodecO264:
|
|
203
|
+
case FFMpegHardware.VideoCodecV4L2M2M264:
|
|
204
|
+
case FFMpegHardware.VideoCodecV4L2M2M265:
|
|
205
|
+
// For V4L2M2M (Raspberry Pi)
|
|
206
|
+
break;
|
|
207
|
+
default:
|
|
208
|
+
//
|
|
209
|
+
break;
|
|
210
|
+
}
|
|
211
|
+
return args;
|
|
212
|
+
}
|
|
213
|
+
hwFilterInit(toCodec, fullhw = true) {
|
|
214
|
+
let videoFilter = '';
|
|
215
|
+
switch (toCodec) {
|
|
216
|
+
case FFMpegHardware.VideoCodecM264:
|
|
217
|
+
case FFMpegHardware.VideoCodecM265:
|
|
218
|
+
// For Apple devices (VideoToolbox)
|
|
219
|
+
if (!fullhw) {
|
|
220
|
+
videoFilter = 'format=nv12,hwupload';
|
|
221
|
+
}
|
|
222
|
+
break;
|
|
223
|
+
case FFMpegHardware.VideoCodecV264:
|
|
224
|
+
case FFMpegHardware.VideoCodecV265:
|
|
225
|
+
// For VAAPI
|
|
226
|
+
if (!fullhw) {
|
|
227
|
+
videoFilter = 'format=nv12,hwupload';
|
|
228
|
+
}
|
|
229
|
+
break;
|
|
230
|
+
case FFMpegHardware.VideoCodecN264:
|
|
231
|
+
case FFMpegHardware.VideoCodecN264H:
|
|
232
|
+
case FFMpegHardware.VideoCodecN265:
|
|
233
|
+
// For NVIDIA NVENC
|
|
234
|
+
if (!fullhw) {
|
|
235
|
+
videoFilter = 'format=nv12,hwupload_cuda';
|
|
236
|
+
}
|
|
237
|
+
break;
|
|
238
|
+
case FFMpegHardware.VideoCodecI264:
|
|
239
|
+
case FFMpegHardware.VideoCodecI264C:
|
|
240
|
+
case FFMpegHardware.VideoCodecI265:
|
|
241
|
+
// For Intel Quick Sync Video (QSV)
|
|
242
|
+
if (!fullhw) {
|
|
243
|
+
videoFilter = 'format=nv12,hwupload=extra_hw_frames=64';
|
|
244
|
+
}
|
|
245
|
+
break;
|
|
246
|
+
case FFMpegHardware.VideoCodecRK264:
|
|
247
|
+
case FFMpegHardware.VideoCodecRK265:
|
|
248
|
+
// For Rockchip MPP
|
|
249
|
+
if (!fullhw) {
|
|
250
|
+
videoFilter = 'format=drm_prime';
|
|
251
|
+
}
|
|
252
|
+
break;
|
|
253
|
+
case FFMpegHardware.VideoCodecJetson264:
|
|
254
|
+
case FFMpegHardware.VideoCodecJetson265:
|
|
255
|
+
// For NVIDIA Jetson
|
|
256
|
+
if (!fullhw) {
|
|
257
|
+
videoFilter = 'format=nv12,hwupload';
|
|
258
|
+
}
|
|
259
|
+
break;
|
|
260
|
+
case FFMpegHardware.VideoCodecVulkan264:
|
|
261
|
+
case FFMpegHardware.VideoCodecVulkan265:
|
|
262
|
+
videoFilter = 'hwupload';
|
|
263
|
+
break;
|
|
264
|
+
case FFMpegHardware.VideoCodecO264:
|
|
265
|
+
case FFMpegHardware.VideoCodecV4L2M2M264:
|
|
266
|
+
case FFMpegHardware.VideoCodecV4L2M2M265:
|
|
267
|
+
// For V4L2M2M (Raspberry Pi)
|
|
268
|
+
// No initial filter required
|
|
269
|
+
break;
|
|
270
|
+
default:
|
|
271
|
+
// For software encoding or unrecognized codecs
|
|
272
|
+
break;
|
|
273
|
+
}
|
|
274
|
+
return videoFilter;
|
|
275
|
+
}
|
|
276
|
+
hwApplyScaleTemplate(sargs, toCodec, targetWidth, targetHeight) {
|
|
277
|
+
let template = '';
|
|
278
|
+
switch (toCodec) {
|
|
279
|
+
case FFMpegHardware.VideoCodecM264:
|
|
280
|
+
case FFMpegHardware.VideoCodecM265:
|
|
281
|
+
template = 'scale_vt=$width:$height';
|
|
282
|
+
break;
|
|
283
|
+
case FFMpegHardware.VideoCodecV264:
|
|
284
|
+
case FFMpegHardware.VideoCodecV265:
|
|
285
|
+
template = 'scale_vaapi=w=$width:h=$height';
|
|
286
|
+
break;
|
|
287
|
+
case FFMpegHardware.VideoCodecN264:
|
|
288
|
+
case FFMpegHardware.VideoCodecN264H:
|
|
289
|
+
case FFMpegHardware.VideoCodecN265:
|
|
290
|
+
template = 'scale_cuda=w=$width:h=$height';
|
|
291
|
+
break;
|
|
292
|
+
case FFMpegHardware.VideoCodecI264:
|
|
293
|
+
case FFMpegHardware.VideoCodecI264C:
|
|
294
|
+
case FFMpegHardware.VideoCodecI265:
|
|
295
|
+
template = 'scale_qsv=w=$width:h=$height';
|
|
296
|
+
break;
|
|
297
|
+
case FFMpegHardware.VideoCodecRK264:
|
|
298
|
+
case FFMpegHardware.VideoCodecRK265:
|
|
299
|
+
template = 'scale_rkrga=w=$width:h=$height:format=yuv420p:force_original_aspect_ratio=0';
|
|
300
|
+
break;
|
|
301
|
+
case FFMpegHardware.VideoCodecJetson264:
|
|
302
|
+
case FFMpegHardware.VideoCodecJetson265:
|
|
303
|
+
template = 'scale_npp=$width:$height';
|
|
304
|
+
break;
|
|
305
|
+
case FFMpegHardware.VideoCodecV4L2M2M264:
|
|
306
|
+
case FFMpegHardware.VideoCodecV4L2M2M265:
|
|
307
|
+
template = 'scale=$width:$height';
|
|
308
|
+
break;
|
|
309
|
+
case FFMpegHardware.VideoCodecVulkan264:
|
|
310
|
+
case FFMpegHardware.VideoCodecVulkan265:
|
|
311
|
+
template = 'scale_vulkan=$width:$height';
|
|
312
|
+
break;
|
|
313
|
+
default:
|
|
314
|
+
template = 'scale=$width:$height';
|
|
315
|
+
break;
|
|
316
|
+
}
|
|
317
|
+
const replaced = sargs.replace(this.scalerRegex, template.replace('$width', targetWidth.toString()).replace('$height', targetHeight.toString()));
|
|
318
|
+
return replaced;
|
|
319
|
+
}
|
|
320
|
+
hwApplyFullHWFilter(args, toCodec, fullhw) {
|
|
321
|
+
if (!fullhw) {
|
|
322
|
+
return args;
|
|
323
|
+
}
|
|
324
|
+
switch (toCodec) {
|
|
325
|
+
case FFMpegHardware.VideoCodecM264:
|
|
326
|
+
case FFMpegHardware.VideoCodecM265:
|
|
327
|
+
case FFMpegHardware.VideoCodecV264:
|
|
328
|
+
case FFMpegHardware.VideoCodecV265:
|
|
329
|
+
case FFMpegHardware.VideoCodecN264:
|
|
330
|
+
case FFMpegHardware.VideoCodecN264H:
|
|
331
|
+
case FFMpegHardware.VideoCodecN265:
|
|
332
|
+
case FFMpegHardware.VideoCodecI264:
|
|
333
|
+
case FFMpegHardware.VideoCodecI264C:
|
|
334
|
+
case FFMpegHardware.VideoCodecI265:
|
|
335
|
+
case FFMpegHardware.VideoCodecJetson264:
|
|
336
|
+
case FFMpegHardware.VideoCodecJetson265:
|
|
337
|
+
args += ',hwdownload,format=nv12,format=yuv420p';
|
|
338
|
+
break;
|
|
339
|
+
case FFMpegHardware.VideoCodecRK264:
|
|
340
|
+
case FFMpegHardware.VideoCodecRK265:
|
|
341
|
+
args += ',hwmap=mode=read,format=yuv420p';
|
|
342
|
+
break;
|
|
343
|
+
case FFMpegHardware.VideoCodecVulkan264:
|
|
344
|
+
case FFMpegHardware.VideoCodecVulkan265:
|
|
345
|
+
args += ',hwdownload';
|
|
346
|
+
break;
|
|
347
|
+
default:
|
|
348
|
+
break;
|
|
349
|
+
}
|
|
350
|
+
return args;
|
|
351
|
+
}
|
|
352
|
+
hwMaxResFilter(toCodec, vf, reqHeight, fullhw) {
|
|
353
|
+
if (vf.width === 0 || vf.height === 0) {
|
|
354
|
+
return null;
|
|
355
|
+
}
|
|
356
|
+
let videoFilter = this.hwFilterInit(toCodec, fullhw);
|
|
357
|
+
const [maxWidth, maxHeight] = this.hwCodecMaxRes(toCodec);
|
|
358
|
+
const [targetWidth, targetHeight] = this.calculateTargetDimensions(vf, reqHeight, maxWidth, maxHeight);
|
|
359
|
+
const scaleFilter = `scale=${targetWidth}:${targetHeight}`;
|
|
360
|
+
if (videoFilter) {
|
|
361
|
+
videoFilter += `,${scaleFilter}`;
|
|
362
|
+
}
|
|
363
|
+
else {
|
|
364
|
+
videoFilter = scaleFilter;
|
|
365
|
+
}
|
|
366
|
+
const match = videoFilter.match(this.scalerRegex);
|
|
367
|
+
if (match) {
|
|
368
|
+
videoFilter = this.hwApplyScaleTemplate(videoFilter, toCodec, targetWidth, targetHeight);
|
|
369
|
+
}
|
|
370
|
+
videoFilter = this.hwApplyFullHWFilter(videoFilter, toCodec, fullhw);
|
|
371
|
+
return videoFilter;
|
|
372
|
+
}
|
|
373
|
+
getHwaccelMethod(codec) {
|
|
374
|
+
if (codec.codecName.includes('vaapi')) {
|
|
375
|
+
return 'vaapi';
|
|
376
|
+
}
|
|
377
|
+
else if (codec.codecName.includes('videotoolbox')) {
|
|
378
|
+
return 'videotoolbox';
|
|
379
|
+
}
|
|
380
|
+
else if (codec.codecName.includes('cuda') || codec.codecName.includes('nvmpi')) {
|
|
381
|
+
return 'cuda';
|
|
382
|
+
}
|
|
383
|
+
else if (codec.codecName.includes('qsv')) {
|
|
384
|
+
return 'qsv';
|
|
385
|
+
}
|
|
386
|
+
else if (codec.codecName.includes('rkmpp')) {
|
|
387
|
+
return 'rkmpp';
|
|
388
|
+
}
|
|
389
|
+
else if (codec.codecName.includes('v4l2m2m')) {
|
|
390
|
+
return 'v4l2m2m';
|
|
391
|
+
}
|
|
392
|
+
else {
|
|
393
|
+
return 'auto';
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
executeFFmpeg(args) {
|
|
397
|
+
return new Promise((resolve, reject) => {
|
|
398
|
+
const options = {};
|
|
399
|
+
const ffmpeg = spawn(this._ffmpegPath, args, options);
|
|
400
|
+
let stderr = '';
|
|
401
|
+
ffmpeg.stderr?.on('data', (data) => {
|
|
402
|
+
stderr += data.toString();
|
|
403
|
+
});
|
|
404
|
+
ffmpeg.on('close', (code) => {
|
|
405
|
+
if (code === 0) {
|
|
406
|
+
resolve();
|
|
407
|
+
}
|
|
408
|
+
else {
|
|
409
|
+
reject(stderr || `FFmpeg exited with code ${code}`);
|
|
410
|
+
}
|
|
411
|
+
});
|
|
412
|
+
});
|
|
413
|
+
}
|
|
414
|
+
calculateTargetDimensions(vf, reqHeight, maxWidth, maxHeight) {
|
|
415
|
+
const aspectRatio = vf.width / vf.height;
|
|
416
|
+
let targetHeight = Math.min(reqHeight, vf.height);
|
|
417
|
+
let targetWidth = Math.round(targetHeight * aspectRatio);
|
|
418
|
+
if (maxWidth > 0 && targetWidth > maxWidth) {
|
|
419
|
+
targetWidth = maxWidth;
|
|
420
|
+
targetHeight = Math.round(targetWidth / aspectRatio);
|
|
421
|
+
}
|
|
422
|
+
if (maxHeight > 0 && targetHeight > maxHeight) {
|
|
423
|
+
targetHeight = maxHeight;
|
|
424
|
+
targetWidth = Math.round(targetHeight * aspectRatio);
|
|
425
|
+
}
|
|
426
|
+
if (targetWidth % 2 !== 0) {
|
|
427
|
+
targetWidth += 1;
|
|
428
|
+
}
|
|
429
|
+
if (targetHeight % 2 !== 0) {
|
|
430
|
+
targetHeight += 1;
|
|
431
|
+
}
|
|
432
|
+
return [targetWidth, targetHeight];
|
|
433
|
+
}
|
|
434
|
+
hwCodecMaxRes(codec) {
|
|
435
|
+
switch (codec) {
|
|
436
|
+
case FFMpegHardware.VideoCodecO264:
|
|
437
|
+
case FFMpegHardware.VideoCodecV4L2M2M264:
|
|
438
|
+
case FFMpegHardware.VideoCodecV4L2M2M265:
|
|
439
|
+
return [1920, 1080];
|
|
440
|
+
case FFMpegHardware.VideoCodecN264:
|
|
441
|
+
case FFMpegHardware.VideoCodecN264H:
|
|
442
|
+
case FFMpegHardware.VideoCodecN265:
|
|
443
|
+
case FFMpegHardware.VideoCodecI264:
|
|
444
|
+
case FFMpegHardware.VideoCodecI264C:
|
|
445
|
+
case FFMpegHardware.VideoCodecI265:
|
|
446
|
+
case FFMpegHardware.VideoCodecM264:
|
|
447
|
+
case FFMpegHardware.VideoCodecM265:
|
|
448
|
+
return [4096, 4096];
|
|
449
|
+
case FFMpegHardware.VideoCodecRK264:
|
|
450
|
+
case FFMpegHardware.VideoCodecRK265:
|
|
451
|
+
return [4096, 2304];
|
|
452
|
+
case FFMpegHardware.VideoCodecJetson264:
|
|
453
|
+
case FFMpegHardware.VideoCodecJetson265:
|
|
454
|
+
return [3840, 2160];
|
|
455
|
+
default:
|
|
456
|
+
return [0, 0];
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
//# sourceMappingURL=codec-hardware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec-hardware.js","sourceRoot":"","sources":["../../src/cameraUtils/codec-hardware.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,4 @@
|
|
|
1
1
|
import type { FfmpegArgs } from '@camera.ui/types';
|
|
2
|
-
export interface HardwareSource {
|
|
3
|
-
name: string;
|
|
4
|
-
url: string;
|
|
5
|
-
}
|
|
6
|
-
export interface HardwareResponse {
|
|
7
|
-
sources: HardwareSource[];
|
|
8
|
-
}
|
|
9
2
|
export declare function doesFfmpegSupportCodec(codec: string, ffmpegPath: string): Promise<boolean>;
|
|
10
3
|
export declare function isFfmpegInstalled(ffmpegPath: string): Promise<boolean>;
|
|
11
|
-
export declare function getHwaccelInfo(
|
|
4
|
+
export declare function getHwaccelInfo(ffmpegPath: string, targetCodec?: 'h264' | 'h265', fullhw?: boolean): Promise<FfmpegArgs>;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { exec } from 'node:child_process';
|
|
2
2
|
import { promisify } from 'node:util';
|
|
3
|
+
import { FFMpegHardware } from './codec-hardware.js';
|
|
3
4
|
const execAwait = promisify(exec);
|
|
4
5
|
export async function doesFfmpegSupportCodec(codec, ffmpegPath) {
|
|
5
6
|
const output = await execAwait(`${ffmpegPath} -codecs`);
|
|
@@ -14,70 +15,36 @@ export async function isFfmpegInstalled(ffmpegPath) {
|
|
|
14
15
|
return false;
|
|
15
16
|
}
|
|
16
17
|
}
|
|
17
|
-
export async function getHwaccelInfo(
|
|
18
|
+
export async function getHwaccelInfo(ffmpegPath, targetCodec = 'h264', fullhw = true) {
|
|
19
|
+
let codecName = targetCodec === 'h264' ? 'libx264' : 'libx265';
|
|
18
20
|
let hwaccel = 'auto';
|
|
19
21
|
let hwaccelArgs = [];
|
|
20
22
|
let hwaccelFilters = ['scale=640:-1'];
|
|
21
|
-
let
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
threads = '2';
|
|
32
|
-
hwaccel = 'vaapi';
|
|
33
|
-
hwaccelArgs = ['-vaapi_device', '/dev/dri/renderD128', '-hwaccel_output_format', 'vaapi'];
|
|
34
|
-
// hwaccelFilters = 'format=vaapi|nv12,hwupload,scale_vaapi=640:-1';
|
|
35
|
-
hwaccelFilters = ['format=vaapi|nv12', 'hwupload', 'scale_vaapi=640:-1'];
|
|
36
|
-
break;
|
|
37
|
-
}
|
|
38
|
-
else if (source.url.includes('videotoolbox')) {
|
|
39
|
-
threads = '2';
|
|
40
|
-
hwaccel = 'videotoolbox';
|
|
41
|
-
// hwaccelArgs = ['-hwaccel_output_format', 'videotoolbox_vld'];
|
|
42
|
-
// hwaccelFilters = 'scale=640:-1';
|
|
43
|
-
break;
|
|
44
|
-
}
|
|
45
|
-
else if (source.url.includes('dxva2')) {
|
|
46
|
-
threads = '2';
|
|
47
|
-
hwaccel = 'dxva2';
|
|
48
|
-
hwaccelArgs = ['-hwaccel_output_format', 'dxva2_vld'];
|
|
49
|
-
// hwaccelFilters = 'scale=640:-1';
|
|
50
|
-
// threads = '1';
|
|
51
|
-
break;
|
|
52
|
-
}
|
|
53
|
-
else if (source.url.includes('cuda')) {
|
|
54
|
-
threads = '2';
|
|
55
|
-
hwaccel = 'cuda';
|
|
56
|
-
hwaccelArgs = ['-hwaccel_output_format', 'nv12'];
|
|
57
|
-
// hwaccelFilters = 'hwupload,scale_cuda=640:-1';
|
|
58
|
-
hwaccelFilters = ['hwupload', 'scale_cuda=640:-1'];
|
|
59
|
-
break;
|
|
60
|
-
}
|
|
61
|
-
else if (source.url.includes('v4l2m2m')) {
|
|
62
|
-
// hwaccel = 'v4l2m2m';
|
|
63
|
-
// hwaccelArgs = [];
|
|
64
|
-
// hwaccelFilters = 'scale=640:-1';
|
|
65
|
-
// threads = '1';
|
|
66
|
-
break;
|
|
67
|
-
}
|
|
68
|
-
else if (source.url.includes('rkmpp')) {
|
|
69
|
-
hwaccel = 'rkmpp';
|
|
70
|
-
// hwaccelArgs = [];
|
|
71
|
-
// hwaccelFilters = 'scale=640:-1';
|
|
72
|
-
// threads = '1';
|
|
73
|
-
break;
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
}
|
|
23
|
+
let hwDeviceArgs = [];
|
|
24
|
+
const threads = '1';
|
|
25
|
+
const ffmpeg = new FFMpegHardware(ffmpegPath);
|
|
26
|
+
await ffmpeg.initHWSupport();
|
|
27
|
+
const supportedCodecs = ffmpeg.hwCodecSupport;
|
|
28
|
+
const preferredH264Codecs = FFMpegHardware.H264Codecs;
|
|
29
|
+
const preferredH265Codecs = FFMpegHardware.H265Codecs;
|
|
30
|
+
let codec;
|
|
31
|
+
if (targetCodec === 'h264') {
|
|
32
|
+
codec = preferredH264Codecs.find((c) => supportedCodecs.includes(c));
|
|
77
33
|
}
|
|
78
|
-
|
|
79
|
-
|
|
34
|
+
else if (targetCodec === 'h265') {
|
|
35
|
+
codec = preferredH265Codecs.find((c) => supportedCodecs.includes(c));
|
|
36
|
+
}
|
|
37
|
+
if (codec) {
|
|
38
|
+
codecName = codec.codecName;
|
|
39
|
+
hwaccelArgs = ffmpeg.hwDeviceInit([], codec);
|
|
40
|
+
const vf = { width: 1280, height: 720 }; // Todo
|
|
41
|
+
const reqHeight = 360;
|
|
42
|
+
const filter = ffmpeg.hwMaxResFilter(codec, vf, reqHeight, fullhw);
|
|
43
|
+
hwaccelFilters = filter.split(',');
|
|
44
|
+
hwaccel = ffmpeg.getHwaccelMethod(codec);
|
|
45
|
+
hwDeviceArgs = ffmpeg.hwDeviceArgs(codec);
|
|
46
|
+
// threads = '1';
|
|
80
47
|
}
|
|
81
|
-
return { hwaccel, hwaccelArgs, hwaccelFilters, threads };
|
|
48
|
+
return { codec: codecName, hwaccel, hwaccelArgs, hwaccelFilters, hwDeviceArgs, threads };
|
|
82
49
|
}
|
|
83
50
|
//# sourceMappingURL=ffmpeg.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ffmpeg.js","sourceRoot":"","sources":["../../src/cameraUtils/ffmpeg.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"ffmpeg.js","sourceRoot":"","sources":["../../src/cameraUtils/ffmpeg.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAKrD,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAElC,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,KAAa,EAAE,UAAkB;IAC5E,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,UAAU,UAAU,CAAC,CAAC;IACxD,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,UAAkB;IACxD,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,GAAG,UAAU,UAAU,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,UAAkB,EAAE,cAA+B,MAAM,EAAE,MAAM,GAAG,IAAI;IAC3G,IAAI,SAAS,GAAG,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/D,IAAI,OAAO,GAAG,MAAM,CAAC;IACrB,IAAI,WAAW,GAAa,EAAE,CAAC;IAC/B,IAAI,cAAc,GAAa,CAAC,cAAc,CAAC,CAAC;IAChD,IAAI,YAAY,GAAa,EAAE,CAAC;IAChC,MAAM,OAAO,GAAG,GAAG,CAAC;IAEpB,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,UAAU,CAAC,CAAC;IAE9C,MAAM,MAAM,CAAC,aAAa,EAAE,CAAC;IAE7B,MAAM,eAAe,GAAG,MAAM,CAAC,cAAc,CAAC;IAE9C,MAAM,mBAAmB,GAAG,cAAc,CAAC,UAAU,CAAC;IACtD,MAAM,mBAAmB,GAAG,cAAc,CAAC,UAAU,CAAC;IAEtD,IAAI,KAA+B,CAAC;IAEpC,IAAI,WAAW,KAAK,MAAM,EAAE,CAAC;QAC3B,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,CAAC;SAAM,IAAI,WAAW,KAAK,MAAM,EAAE,CAAC;QAClC,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,IAAI,KAAK,EAAE,CAAC;QACV,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;QAC5B,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAE7C,MAAM,EAAE,GAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO;QAC7D,MAAM,SAAS,GAAG,GAAG,CAAC;QACtB,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,CAAE,CAAC;QAEpE,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnC,OAAO,GAAG,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACzC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAE1C,iBAAiB;IACnB,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;AAC3F,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cameraUtils/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cameraUtils/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,UAAU,CAAC"}
|
|
@@ -17,7 +17,8 @@ export class RtpSplitter {
|
|
|
17
17
|
this.type = type;
|
|
18
18
|
const socket = createSocket(type);
|
|
19
19
|
const port = await bindToPort(socket, address);
|
|
20
|
-
socket.
|
|
20
|
+
socket.setRecvBufferSize(5 * 1024 * 1024);
|
|
21
|
+
socket.setSendBufferSize(5 * 1024 * 1024);
|
|
21
22
|
this.socket = socket;
|
|
22
23
|
this.address = address;
|
|
23
24
|
this.port = port;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rtp-splitter.js","sourceRoot":"","sources":["../../src/cameraUtils/rtp-splitter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AACvD,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEvD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAmBnE,MAAM,OAAO,WAAW;IACf,MAAM,CAAU;IAChB,OAAO,CAAU;IACjB,IAAI,CAAU;IACd,IAAI,CAAmB;IAEvB,SAAS,CAKb;IAEK,MAAM,GAAG,KAAK,CAAC;IACf,SAAS,GAAG,KAAK,CAAC;IAElB,OAAO,GAAG,IAAI,aAAa,EAAO,CAAC;IAE3C,gBAAe,CAAC;IAET,KAAK,CAAC,OAAO,CAAC,IAAqB,EAAE,OAAO,GAAG,WAAW,EAAE,cAAkC;QACnG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QAEjB,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAE/C,MAAM,CAAC,iBAAiB,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"rtp-splitter.js","sourceRoot":"","sources":["../../src/cameraUtils/rtp-splitter.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,13 +1,6 @@
|
|
|
1
|
-
export * from './cameraUtils/
|
|
2
|
-
export * from './cameraUtils/ffmpeg.js';
|
|
3
|
-
export * from './cameraUtils/mp4.js';
|
|
4
|
-
export * from './cameraUtils/ports.js';
|
|
5
|
-
export * from './cameraUtils/rtp-splitter.js';
|
|
6
|
-
export * from './cameraUtils/rtp.js';
|
|
1
|
+
export * from './cameraUtils/index.js';
|
|
7
2
|
export * from './logger/index.js';
|
|
8
3
|
export * from './net/index.js';
|
|
9
4
|
export * from './network/index.js';
|
|
10
5
|
export * from './npm/index.js';
|
|
11
|
-
export * from './utils/
|
|
12
|
-
export * from './utils/subscribed.js';
|
|
13
|
-
export * from './utils/utils.js';
|
|
6
|
+
export * from './utils/index.js';
|
package/dist/index.js
CHANGED
|
@@ -1,14 +1,7 @@
|
|
|
1
|
-
export * from './cameraUtils/
|
|
2
|
-
export * from './cameraUtils/ffmpeg.js';
|
|
3
|
-
export * from './cameraUtils/mp4.js';
|
|
4
|
-
export * from './cameraUtils/ports.js';
|
|
5
|
-
export * from './cameraUtils/rtp-splitter.js';
|
|
6
|
-
export * from './cameraUtils/rtp.js';
|
|
1
|
+
export * from './cameraUtils/index.js';
|
|
7
2
|
export * from './logger/index.js';
|
|
8
3
|
export * from './net/index.js';
|
|
9
4
|
export * from './network/index.js';
|
|
10
5
|
export * from './npm/index.js';
|
|
11
|
-
export * from './utils/
|
|
12
|
-
export * from './utils/subscribed.js';
|
|
13
|
-
export * from './utils/utils.js';
|
|
6
|
+
export * from './utils/index.js';
|
|
14
7
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camera.ui/common",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.20",
|
|
4
4
|
"description": "camera.ui utilities",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
"systeminformation": "^5.23.5"
|
|
56
56
|
},
|
|
57
57
|
"devDependencies": {
|
|
58
|
-
"@camera.ui/types": "^0.0.
|
|
58
|
+
"@camera.ui/types": "^0.0.75",
|
|
59
59
|
"@rushstack/eslint-patch": "^1.10.4",
|
|
60
60
|
"@types/fs-extra": "^11.0.4",
|
|
61
61
|
"@types/node": "^22.7.4",
|