const exec = require(
'child_process'
).exec;
const superagent = require(
'superagent'
);
const { sleep } = require(
'sleep'
);
const fs = require(
'fs'
);
const glob = require(
"glob"
);
const videoDir =
'./MD-0030.mp4'
;
const tsDir =
'./tmp/'
;
const size = 1;
const content = `ffmpeg -i ${videoDir} -c copy -map 0 -f segment -segment_list ${tsDir}index.m3u8 -segment_time ${size} ${tsDir}%03d.ts`;
async
function
shell(content) {
return
new
Promise((resolve, reject) => {
exec(content, (error, stdout, stderr) => {
if
(error) {
reject(error);
}
else
{
resolve(stdout)
}
});
})
}
async
function
upload(path) {
try
{
let s = await superagent.post(
'https://cdn-ms.juejin.im/v1/upload'
)
.query({
bucket:
"gold-user-assets"
})
.attach(
'file'
, path,
'1.png'
)
let url = s.body.d.url.https
console.log(url)
return
url
}
catch
(error) {
sleep(3)
console.log(error)
return
upload(path)
}
}
(async () => {
console.log(
'开始视频切片'
)
await shell(content);
console.log(
'视频切片完成'
)
let tsList = glob.sync(`${tsDir}*.ts`);
let m3u8Content = fs.readFileSync(`${tsDir}index.m3u8`).toString();
console.log(
'开始上传切片'
)
for
(let index
in
tsList) {
let ele = tsList[index]
let tsName = ele.split(
'/'
)[ele.split(
'/'
).length - 1]
let url = await upload(ele)
m3u8Content = m3u8Content.replace(tsName, url)
fs.unlinkSync(ele)
console.log(`上传成功,当前上传进度:${parseInt(index) + 1}/${tsList.length}`)
console.log(
'=============================='
)
}
console.log(
'切片上传完成'
)
fs.writeFileSync(`${tsDir}main.m3u8`, m3u8Content);
let m3u8Url = await upload(`${tsDir}main.m3u8`)
console.log(
'm3u8文件上传成功'
)
let playUrl = `[url=https:
console.log(
'=============================='
)
fs.unlinkSync(`${tsDir}index.m3u8`)
fs.unlinkSync(`${tsDir}main.m3u8`)
console.log(`m3u8在线链接:${m3u8Url}`)
console.log(`视频在线播放器地址:${playUrl}`)
})()