mb-rrvideo-server 1.0.2

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/.dockerignore ADDED
@@ -0,0 +1,48 @@
1
+ # Node modules
2
+ node_modules/
3
+ npm-debug.log
4
+ yarn-error.log
5
+ package-lock.json
6
+
7
+ # 日志文件
8
+ logs/
9
+ *.log
10
+
11
+ # 临时文件
12
+ temp/
13
+ __rrvideo__temp__/
14
+ __rrvideos__temp__/
15
+ tasks/
16
+ Video/
17
+
18
+ # 配置文件(用户自己提供)
19
+ config.json
20
+
21
+ # 测试文件
22
+ test-*.js
23
+ test-*.sh
24
+ *.test.js
25
+
26
+ # Git
27
+ .git/
28
+ .gitignore
29
+
30
+ # IDE
31
+ .vscode/
32
+ .idea/
33
+ *.swp
34
+ *.swo
35
+
36
+ # 系统文件
37
+ .DS_Store
38
+ Thumbs.db
39
+
40
+ # 文档
41
+ *.md
42
+ !README.md
43
+ !CHANGELOG.md
44
+
45
+ # Docker 文件(避免递归)
46
+ Dockerfile
47
+ docker-compose.yml
48
+ .dockerignore
package/CHANGELOG.md ADDED
@@ -0,0 +1,335 @@
1
+ # 更新日志
2
+
3
+ ## [1.0.2] - 2025-02-06
4
+
5
+ ### 新增
6
+
7
+ #### 配置文件支持注释
8
+
9
+ 现在配置文件支持添加注释,方便理解和维护:
10
+
11
+ **支持的注释格式:**
12
+
13
+ 1. **单行注释** - 使用 `//`
14
+ ```json
15
+ {
16
+ "server": {
17
+ "port": 24203, // 服务端口
18
+ "host": "0.0.0.0" // 监听所有网卡
19
+ }
20
+ }
21
+ ```
22
+
23
+ 2. **多行注释** - 使用 `/* */`
24
+ ```json
25
+ {
26
+ /*
27
+ * 服务器配置
28
+ * 包括端口和监听地址
29
+ */
30
+ "server": {
31
+ "port": 24203,
32
+ "host": "0.0.0.0"
33
+ }
34
+ }
35
+ ```
36
+
37
+ 3. **尾随逗号** - 支持 JSON5 风格
38
+ ```json
39
+ {
40
+ "server": {
41
+ "port": 24203,
42
+ "host": "0.0.0.0", // 最后一项可以有逗号
43
+ },
44
+ }
45
+ ```
46
+
47
+ **实现细节:**
48
+ - 自动移除单行注释(`//`)
49
+ - 自动移除多行注释(`/* */`)
50
+ - 自动移除尾随逗号
51
+ - 智能识别字符串内的 `//`(如 URL)不会被当作注释
52
+ - 完全向后兼容标准 JSON
53
+
54
+ **使用示例:**
55
+
56
+ ```json
57
+ {
58
+ // ==================
59
+ // 服务器配置
60
+ // ==================
61
+ "server": {
62
+ "port": 24203, // 服务端口
63
+ "host": "0.0.0.0" // 监听地址
64
+ },
65
+
66
+ // ==================
67
+ // 存储配置
68
+ // ==================
69
+ "storage": {
70
+ "type": "local", // 存储类型: "local" 或 "minio"
71
+
72
+ /* 本地存储配置 */
73
+ "local": {
74
+ "video_dir": "./Video", // 视频存储目录
75
+ "temp_dir": "./temp" // 临时文件目录
76
+ },
77
+
78
+ /* MinIO 对象存储配置 */
79
+ "minio": {
80
+ "endpoint": "172.168.1.2",
81
+ "port": 9000,
82
+ "useSSL": false,
83
+ "accessKey": "your-access-key",
84
+ "secretKey": "your-secret-key",
85
+ "bucket": "record-prod",
86
+ "public_host": "https://oss-bbx.17maibaoxian.com:10008" // 公开访问地址
87
+ }
88
+ },
89
+
90
+ // rrvideo 播放器配置
91
+ "rrvideo": {
92
+ "speed": 1, // 播放速度
93
+ "skipInactive": true, // 跳过不活跃时间
94
+ "mouseTail": false, // 鼠标轨迹
95
+ }
96
+ }
97
+ ```
98
+
99
+ **测试工具:**
100
+
101
+ ```bash
102
+ # 测试配置文件解析
103
+ node test-config.js
104
+ ```
105
+
106
+ ### 改进
107
+
108
+ - 优化了配置文件解析逻辑
109
+ - 增强了错误提示信息
110
+ - 更新了配置文件示例(添加注释)
111
+
112
+ ### 技术细节
113
+
114
+ #### 注释解析算法
115
+
116
+ ```javascript
117
+ // 1. 移除多行注释
118
+ jsonString = jsonString.replace(/\/\*[\s\S]*?\*\//g, '');
119
+
120
+ // 2. 移除单行注释(智能识别字符串内的 //)
121
+ const lines = jsonString.split('\n');
122
+ const cleanedLines = lines.map(line => {
123
+ // 跟踪字符串状态,避免移除字符串内的 //
124
+ let inString = false;
125
+ let stringChar = null;
126
+
127
+ for (let i = 0; i < line.length - 1; i++) {
128
+ // 检测字符串边界
129
+ if ((char === '"' || char === "'") && line[i - 1] !== '\\') {
130
+ if (!inString) {
131
+ inString = true;
132
+ stringChar = char;
133
+ } else if (char === stringChar) {
134
+ inString = false;
135
+ }
136
+ }
137
+
138
+ // 在字符串外找到 //
139
+ if (!inString && char === '/' && nextChar === '/') {
140
+ return line.substring(0, i).trimEnd();
141
+ }
142
+ }
143
+ return line;
144
+ });
145
+
146
+ // 3. 移除尾随逗号
147
+ jsonString = jsonString.replace(/,(\s*[}\]])/g, '$1');
148
+
149
+ // 4. 解析 JSON
150
+ return JSON.parse(jsonString);
151
+ ```
152
+
153
+ ### 向后兼容性
154
+
155
+ ✅ **完全向后兼容**
156
+
157
+ - 标准 JSON 格式继续有效
158
+ - 不影响现有配置文件
159
+ - 可选功能,不强制使用注释
160
+
161
+ ### 已知限制
162
+
163
+ 1. 不支持嵌套的多行注释
164
+ 2. 字符串内的 `//` 和 `/* */` 会被正确保留(如 URL)
165
+ 3. 注释内容不会被保存(仅用于阅读)
166
+
167
+ ---
168
+
169
+ ## [1.0.1] - 2025-02-06
170
+
171
+ ### 新增
172
+
173
+ #### 1. 命令行启动支持
174
+
175
+ 现在可以通过 `rrvideo-server` 命令直接启动服务:
176
+
177
+ ```bash
178
+ # 全局安装
179
+ npm link
180
+
181
+ # 启动服务
182
+ rrvideo-server
183
+ ```
184
+
185
+ **实现细节:**
186
+ - 添加了 `bin/rrvideo-server` 可执行文件
187
+ - 在 `package.json` 中配置了 `bin` 字段
188
+ - 自动设置工作目录为项目根目录
189
+
190
+ **使用场景:**
191
+ - 开发测试时快速启动
192
+ - 系统服务配置(systemd, supervisor)
193
+ - Docker 容器入口点
194
+
195
+ #### 2. 智能配置文件处理
196
+
197
+ 解决了 rrvideo 配置文件格式问题,支持两种配置方式:
198
+
199
+ **方式 1:使用全局配置(推荐)**
200
+
201
+ 在 `config.json` 中配置 rrvideo 参数:
202
+
203
+ ```json
204
+ {
205
+ "rrvideo": {
206
+ "speed": 1,
207
+ "skipInactive": true,
208
+ "mouseTail": false
209
+ }
210
+ }
211
+ ```
212
+
213
+ 服务会自动生成临时配置文件传递给 rrvideos 命令。
214
+
215
+ **方式 2:使用独立配置文件**
216
+
217
+ 在请求中指定配置文件路径:
218
+
219
+ ```json
220
+ {
221
+ "input": "/path/to/input.data",
222
+ "output": "/path/to/output.mp4",
223
+ "config": "/path/to/rrvideo.config.json"
224
+ }
225
+ ```
226
+
227
+ **实现细节:**
228
+ - 自动检测配置类型(对象 vs 文件路径)
229
+ - 对象配置自动生成临时文件
230
+ - 进程结束后自动清理临时文件
231
+ - 临时文件存储在系统临时目录(`/tmp/rrvideo-server/`)
232
+ - 使用唯一文件名避免冲突
233
+
234
+ **优势:**
235
+ - ✅ 无需手动管理配置文件
236
+ - ✅ 配置集中管理
237
+ - ✅ 自动清理,无残留
238
+ - ✅ 多进程安全
239
+
240
+ ### 改进
241
+
242
+ - 优化了配置文件处理逻辑
243
+ - 增强了日志输出(记录临时配置文件路径)
244
+ - 改进了错误处理
245
+
246
+ ### 技术细节
247
+
248
+ #### 临时配置文件生成
249
+
250
+ ```javascript
251
+ // 从 config.rrvideo 读取配置
252
+ const rrvideoConfig = config.get('rrvideo');
253
+
254
+ // 自动生成临时配置文件
255
+ const { command, tempConfigFile } = buildConvertCommand(
256
+ inputList,
257
+ outputList,
258
+ rrvideoConfig // 传递对象,自动生成临时文件
259
+ );
260
+
261
+ // 进程结束后自动清理
262
+ if (tempConfigFile) {
263
+ cleanupTempConfigFile(tempConfigFile);
264
+ }
265
+ ```
266
+
267
+ #### 配置文件格式
268
+
269
+ **原始格式(config.json):**
270
+ ```json
271
+ {
272
+ "rrvideo": {
273
+ "speed": 1,
274
+ "skipInactive": true,
275
+ "mouseTail": false
276
+ }
277
+ }
278
+ ```
279
+
280
+ **生成的临时文件(rrvideos 期望的格式):**
281
+ ```json
282
+ {
283
+ "speed": 1,
284
+ "skipInactive": true,
285
+ "mouseTail": false
286
+ }
287
+ ```
288
+
289
+ ### 迁移指南
290
+
291
+ 如果你之前使用独立的 rrvideo 配置文件,现在有两个选择:
292
+
293
+ **选项 1:迁移到全局配置(推荐)**
294
+
295
+ 将配置内容移到 `config.json` 的 `rrvideo` 字段下:
296
+
297
+ ```json
298
+ {
299
+ "server": { ... },
300
+ "storage": { ... },
301
+ "rrvideo": {
302
+ "speed": 1,
303
+ "skipInactive": true,
304
+ "mouseTail": false
305
+ }
306
+ }
307
+ ```
308
+
309
+ **选项 2:继续使用独立文件**
310
+
311
+ 保持现有配置文件,在请求中指定路径即可。
312
+
313
+ ### 已知问题
314
+
315
+
316
+
317
+ ### 下一步计划
318
+
319
+ - [ ] 支持配置热重载
320
+ - [ ] 添加配置验证
321
+ - [ ] 支持环境变量覆盖配置
322
+
323
+ ---
324
+
325
+ ## [1.0.0] - 2025-02-06
326
+
327
+ ### 初始版本
328
+
329
+ - ✅ V1/V2 转码支持
330
+ - ✅ 视频合并功能
331
+ - ✅ MinIO/本地存储
332
+ - ✅ 文件系统任务管理
333
+ - ✅ 缓冲式日志系统
334
+ - ✅ HTTP 回调通知
335
+ - ✅ 完整文档