MCPcopy Create free account
hub / github.com/StreamerHelper/web-server / downloadStream

Function downloadStream

src/engine/message.ts:26–139  ·  view source on GitHub ↗
(stream: HuyaStreamInfo)

Source from the content-addressed store, hash-verified

24
25const logger = log4js.getLogger("message");
26export const downloadStream = (stream: HuyaStreamInfo) => {
27 // 每段视频持续时间,单位s
28 const partDuration = "1800"
29 // let huyaRoomId = getRoomArrInfo(infoJson.streamerInfo)[0].roomLink;
30 // let huyaRoomTitle = getRoomArrInfo(infoJson.streamerInfo)[0].roomTitle;
31 // console.log("开始下载 ", stream.streamName);
32 logger.info("开始下载 ", stream.streamName)
33 // const cmd = `ffmpeg -i "${streamUrl}" -f mp4 res.MP4`;
34 // 命名加上时间戳
35 // console.log("streamUrl", stream.streamUrl);
36 const timeV = dayjs().format("YYYY-MM-DD");
37 const cmd = `ffmpeg`;
38 // console.log("11", huyaRoomId + `${timeV}res.MP4`);
39 let savePath = join(rootPath, "/download")
40 let startNumber = 0
41 if (!fs.existsSync(savePath)) {
42 fs.mkdirSync(savePath)
43 }
44 let dirName = join(savePath, stream.streamName)
45 if (!fs.existsSync(dirName)) {
46 fs.mkdirSync(dirName)
47 }
48 dirName = join(dirName, timeV)
49 if (!fs.existsSync(dirName)) {
50 fs.mkdirSync(dirName)
51 } else { //文件夹存在,说明有视频未上传,接着前面的序号下载
52 let ps = fs.readdirSync(dirName);
53 startNumber = ps.length
54 }
55 const fileName: string = join(dirName, `${stream.streamName}-${timeV}-part-%03d.mp4`);
56 //伪装了请求头,避免服务器返回403
57 const fakeX: any = {
58 'Accept': '*/*',
59 'Accept-Encoding': 'gzip, deflate, br',
60 'Accept-Language': 'zh,zh-TW;q=0.9,en-US;q=0.8,en;q=0.7,zh-CN;q=0.6,ru;q=0.5',
61 'Origin': 'https://www.huya.com',
62 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36'
63 }
64 let fakeHeaders = ""
65 for (let key of Object.keys(fakeX)) {
66 fakeHeaders = `${fakeHeaders}${key}: ${fakeX[key]}\r\n`
67 }
68 const huyaApp = spawn(cmd, [
69 "-headers",
70 fakeHeaders,
71 "-i",
72 stream.streamUrl,
73 "-c:v",
74 "copy",
75 "-c:a",
76 "copy",
77 "-f",
78 "segment",
79 "-segment_time",
80 partDuration,
81 "-segment_start_number",
82 startNumber.toString(),
83 fileName,

Callers 1

app.tsFile · 0.90

Calls 3

getHuyaStreamFunction · 0.90
upload2bilibiliFunction · 0.90
deleteFolderFunction · 0.90

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…