录像文件以视频切片上传到服务器,【Javascript】视频本地一键切片上传至掘金,搭建自己的视频床...

[JavaScript] 纯文本查看 复制代码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/';//切片及m3u8文件存储路径

const size = 1;//视频切片大小,数字越大单个切片时常越长体积越大,掘金图传限制最大图片大小为10M

const content = `ffmpeg -i ${videoDir} -c copy -map 0 -f segment -segment_list ${tsDir}index.m3u8 -segment_time ${size} ${tsDir}%03d.ts`;//切片命令

// 调用shell脚本方法

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) {

// 出错表示掘金上传频繁拒绝了,暂停3秒继续请求

sleep(3)

console.log(error)

return upload(path)

}

}

(async () => {

// 进行视频切片

console.log('开始视频切片')

await shell(content);

console.log('视频切片完成')

// 获取到切片列表

let tsList = glob.sync(`${tsDir}*.ts`);

// 获取到m3u8实体内容

let m3u8Content = fs.readFileSync(`${tsDir}index.m3u8`).toString();

// console.log(m3u8Content)

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)

// 删除已上传的ts

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://badyun.gitee.io?url=]https://badyun.gitee.io?url=[/url]${encodeURIComponent(m3u8Url)}`

console.log('==============================')

// 清空文件缓存

fs.unlinkSync(`${tsDir}index.m3u8`)

fs.unlinkSync(`${tsDir}main.m3u8`)

console.log(`m3u8在线链接:${m3u8Url}`)

console.log(`视频在线播放器地址:${playUrl}`)

})()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
方案是为解决特定问题或达成特定目标而制定的一系列计划或步骤。它的作用是提供一种系统性的方法,以有效地应对挑战、优化流程或实现目标。以下是方案的主要作用: 问题解决: 方案的核心目标是解决问题。通过系统性的规划和执行,方案能够分析问题的根本原因,提供可行的解决方案,并引导实施过程,确保问题得到合理解决。 目标达成: 方案通常与明确的目标相关联,它提供了一种达成这些目标的计划。无论是企业战略、项目管理还是个人发展,方案的制定都有助于明确目标并提供达成目标的路径。 资源优化: 方案在设计时考虑了可用资源,以最大化其效用。通过明智的资源分配,方案可以在有限的资源条件下实现最大的效益,提高效率并减少浪费。 风险管理: 方案通常会对潜在的风险进行评估,并制定相应的风险管理策略。这有助于减轻潜在问题的影响,提高方案的可行性和可持续性。 决策支持: 方案提供了决策者所需的信息和数据,以便做出明智的决策。这种数据驱动的方法有助于减少不确定性,提高决策的准确性。 团队协作: 复杂的问题通常需要多个人的协同努力。方案提供了一个共同的框架,帮助团队成员理解各自的职责和任务,促进协作并确保整个团队朝着共同的目标努力。 监控与评估: 方案通常包括监控和评估的机制,以确保实施的有效性。通过定期的评估,可以及时调整方案,以适应变化的环境或新的挑战。 总体而言,方案的作用在于提供一种有序、有计划的方法,以解决问题、实现目标,并在实施过程中最大化资源利用和风险管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值