@autorecord/douyin-recorder 1.0.0 → 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/lib/douyin_api.js +10 -0
- package/lib/douyin_api.js.map +1 -1
- package/lib/index.js +59 -23
- package/lib/index.js.map +1 -1
- package/package.json +1 -1
package/lib/douyin_api.js
CHANGED
|
@@ -53,6 +53,16 @@ function getRoomInfo(webRoomId, retryOnSpecialCode = true) {
|
|
|
53
53
|
(0, utils_1.assert)(res.data.status_code === 0, `Unexpected resp, code ${res.data.status_code}, msg ${res.data.data}`);
|
|
54
54
|
const data = res.data.data;
|
|
55
55
|
const room = data.data[0];
|
|
56
|
+
if (room.stream_url == null) {
|
|
57
|
+
return {
|
|
58
|
+
living: false,
|
|
59
|
+
roomId: webRoomId,
|
|
60
|
+
owner: data.user.nickname,
|
|
61
|
+
title: room.title,
|
|
62
|
+
streams: [],
|
|
63
|
+
sources: [],
|
|
64
|
+
};
|
|
65
|
+
}
|
|
56
66
|
const { options: { qualities }, stream_data, } = room.stream_url.live_core_sdk_data.pull_data;
|
|
57
67
|
const streamData = JSON.parse(stream_data).data;
|
|
58
68
|
const streams = qualities.map((info) => ({
|
package/lib/douyin_api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"douyin_api.js","sourceRoot":"","sources":["../src/douyin_api.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,kDAAyB;AACzB,qEAAiD;AACjD,+CAAwC;AACxC,mCAAgC;AAEhC,MAAM,GAAG,GAAG,IAAI,wBAAS,EAAE,CAAA;AAC3B,MAAM,SAAS,GAAG,IAAA,iCAAO,EACvB,eAAK,CAAC,MAAM,CAAC;IACX,OAAO,EAAE,IAAI;IACb,GAAG;CACJ,CAAC,CACH,CAAA;AAED,SAAsB,WAAW,CAC/B,SAAiB,EACjB,kBAAkB,GAAG,IAAI;;QASzB,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,GAAG,CAC7B,4CAA4C,EAC5C;YACE,MAAM,EAAE;gBACN,GAAG,EAAE,IAAI;gBACT,OAAO,EAAE,CAAC;gBACV,eAAe,EAAE,KAAK;gBACtB,QAAQ,EAAE,OAAO;gBACjB,UAAU,EAAE,UAAU;gBACtB,cAAc,EAAE,MAAM;gBACtB,YAAY,EAAE,IAAI;gBAClB,aAAa,EAAE,IAAI;gBACnB,gBAAgB,EAAE,OAAO;gBACzB,gBAAgB,EAAE,UAAU;gBAC5B,YAAY,EAAE,QAAQ;gBACtB,eAAe,EAAE,WAAW;gBAC5B,OAAO,EAAE,SAAS;gBAClB,iBAAiB;gBACjB,0BAA0B,EAAE,CAAC;gBAC7B,qBAAqB,EAAE,OAAO;aAC/B;SACF,CACF,CAAA;QAED,0BAA0B;QAC1B,IAAI,GAAG,CAAC,IAAI,CAAC,WAAW,KAAK,KAAK,IAAI,kBAAkB,EAAE;YACxD,mBAAmB;YACnB,MAAM,SAAS,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAA;YAC1D,OAAO,WAAW,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;SACrC;QAED,IAAA,cAAM,EACJ,GAAG,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,EAC1B,yBAAyB,GAAG,CAAC,IAAI,CAAC,WAAW,SAAS,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CACtE,CAAA;QAED,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAA;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"douyin_api.js","sourceRoot":"","sources":["../src/douyin_api.ts"],"names":[],"mappings":"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"}
|
package/lib/index.js
CHANGED
|
@@ -23,7 +23,7 @@ function createRecorder(opts) {
|
|
|
23
23
|
// 内部实现时,应该只有 proxy 包裹的那一层会使用这个 recorder 标识符,不应该有直接通过
|
|
24
24
|
// 此标志来操作这个对象的地方,不然会跳过 proxy 的拦截。
|
|
25
25
|
const recorder = Object.assign(Object.assign(Object.assign({ id: (_a = opts.id) !== null && _a !== void 0 ? _a : (0, manager_1.genRecorderUUID)(), extra: (_b = opts.extra) !== null && _b !== void 0 ? _b : {} }, (0, mitt_1.default)()), opts), { availableStreams: [], availableSources: [], state: 'idle', getChannelURL() {
|
|
26
|
-
return `https://live.
|
|
26
|
+
return `https://live.douyin.com/${this.channelId}`;
|
|
27
27
|
}, checkLiveStatusAndRecord: (0, utils_1.singleton)(checkLiveStatusAndRecord), toJSON() {
|
|
28
28
|
return (0, manager_1.defaultToJSON)(exports.provider, this);
|
|
29
29
|
} });
|
|
@@ -84,35 +84,30 @@ const checkLiveStatusAndRecord = function ({ getSavePath }) {
|
|
|
84
84
|
// TODO: 弹幕录制
|
|
85
85
|
const recordSavePath = savePath;
|
|
86
86
|
(0, utils_1.ensureFolderExist)(recordSavePath);
|
|
87
|
-
const
|
|
87
|
+
const onEnd = (...args) => {
|
|
88
88
|
var _a;
|
|
89
|
-
|
|
89
|
+
this.emit('DebugLog', {
|
|
90
|
+
type: 'common',
|
|
91
|
+
text: `ffmpeg end, reason: ${JSON.stringify(args)}`,
|
|
92
|
+
});
|
|
90
93
|
(_a = this.recordHandle) === null || _a === void 0 ? void 0 : _a.stop();
|
|
91
94
|
};
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
*/
|
|
97
|
-
const command = (0, manager_1.createFFMPEGBuilder)()
|
|
98
|
-
.input(stream.url)
|
|
99
|
-
.addInputOptions('-user_agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:107.0) Gecko/20100101 Firefox/107.0', '-headers', 'Referer: https://live.bilibili.com/')
|
|
95
|
+
const isInvalidStream = createInvalidStreamChecker();
|
|
96
|
+
const timeoutChecker = createTimeoutChecker(() => onEnd('ffmpeg timeout'), 10e3);
|
|
97
|
+
const command = (0, manager_1.createFFMPEGBuilder)(stream.url)
|
|
98
|
+
.inputOptions('-user_agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36')
|
|
100
99
|
.outputOptions(ffmpegOutputOptions)
|
|
101
100
|
.output(recordSavePath)
|
|
102
|
-
.on('error',
|
|
103
|
-
.on('end', () =>
|
|
101
|
+
.on('error', onEnd)
|
|
102
|
+
.on('end', () => onEnd('end'))
|
|
104
103
|
.on('stderr', (stderrLine) => {
|
|
104
|
+
(0, utils_1.assertStringType)(stderrLine);
|
|
105
105
|
this.emit('DebugLog', { type: 'ffmpeg', text: stderrLine });
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
// createNotice(channel.profile, channelInfo.title)
|
|
112
|
-
// }
|
|
113
|
-
// // TODO: 在此处对长时间无frame时的情况做检查。
|
|
114
|
-
// }
|
|
115
|
-
});
|
|
106
|
+
if (isInvalidStream(stderrLine)) {
|
|
107
|
+
onEnd('invalid stream');
|
|
108
|
+
}
|
|
109
|
+
})
|
|
110
|
+
.on('stderr', timeoutChecker);
|
|
116
111
|
const ffmpegArgs = command._getArguments();
|
|
117
112
|
extraDataController.setMeta({
|
|
118
113
|
recordStartTimestamp: Date.now(),
|
|
@@ -153,6 +148,47 @@ const checkLiveStatusAndRecord = function ({ getSavePath }) {
|
|
|
153
148
|
return this.recordHandle;
|
|
154
149
|
});
|
|
155
150
|
};
|
|
151
|
+
function createTimeoutChecker(onTimeout, time) {
|
|
152
|
+
let lastTime = Date.now();
|
|
153
|
+
let called = false;
|
|
154
|
+
return () => {
|
|
155
|
+
if (called)
|
|
156
|
+
return;
|
|
157
|
+
const now = Date.now();
|
|
158
|
+
if (now - lastTime > time) {
|
|
159
|
+
called = true;
|
|
160
|
+
onTimeout();
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
lastTime = now;
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
function createInvalidStreamChecker() {
|
|
168
|
+
let prevFrame = 0;
|
|
169
|
+
let frameUnchangedCount = 0;
|
|
170
|
+
return (ffmpegLogLine) => {
|
|
171
|
+
const streamInfo = ffmpegLogLine.match(/frame=\s*(\d+) fps=.*? q=.*? size=\s*(\d+)kB time=.*? bitrate=.*? speed=.*?/);
|
|
172
|
+
if (streamInfo != null) {
|
|
173
|
+
const [, frameText] = streamInfo;
|
|
174
|
+
const frame = Number(frameText);
|
|
175
|
+
if (frame === prevFrame) {
|
|
176
|
+
if (++frameUnchangedCount >= 10) {
|
|
177
|
+
return true;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
prevFrame = frame;
|
|
182
|
+
frameUnchangedCount = 0;
|
|
183
|
+
}
|
|
184
|
+
return false;
|
|
185
|
+
}
|
|
186
|
+
if (ffmpegLogLine.includes('HTTP error 404 Not Found')) {
|
|
187
|
+
return true;
|
|
188
|
+
}
|
|
189
|
+
return false;
|
|
190
|
+
};
|
|
191
|
+
}
|
|
156
192
|
exports.provider = {
|
|
157
193
|
id: 'DouYin',
|
|
158
194
|
name: '抖音',
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,gDAAuB;AACvB,gDAAuB;AACvB,iDAa4B;AAC5B,qCAA6C;AAC7C,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|