如何解决使用NodeJS和HapiJS进行视频流
我想使用NodeJS而不是Express使用HapiJs流视频文件。
这是我想使用HapiJS实现的目标
const fs = require('fs');
const path = require('path');
const express = require('express');
const app = express();
app.use(express.static(path.join(__dirname,'public')));
const videoFilePath = path.join(__dirname,'vid.mp4');
const fileSize = fs.statSync(videoFilePath).size;
app.get('/video',(req,res) => {
const { range } = req.headers;
const [s,e] = range.replace('bytes=','').split('-');
const start = Number(s);
const end = Number(e) || fileSize - 1;
res.append('Accept-Ranges','bytes');
res.append('Content-Range',`bytes ${start}-${end}/${fileSize}`);
res.append('Content-Length',end - start + 1);
res.append('Content-Type','video/mp4');
res.status(206);
const fileStream = fs.createReadStream(videoFilePath,{ start,end });
fileStream.pipe(res);
});
app.listen(3000,() => {
console.log('Server is up...');
});
我如何使用HapiJS(版本> 17)完全做到这一点?
解决方法
找到了解决方案:
const fs = require("fs")
const Path = require("path");
downloadFile = async (request,h) => {
try {
const path = Path.join(__dirname,`../../path`)
const { size } = fs.statSync(path)
const { range } = request.headers
const start = Number((range || '').replace(/bytes=/,"").split("-")[0])
const end = size - 1
const chunkSize = (end - start) + 1
const stream = fs.createReadStream(path,{ start,end })
return h.response(stream)
.type("video/mp4")
.header("Pragma","no-cache")
.header("Cache-Control","public,must-revalidate,max-age=0")
.header("Content-Range",`bytes ${start}-${end}/${size}`)
.header("Accept-Ranges","bytes")
.header("Content-Length",chunkSize)
.header("Content-Description",'File Transfer')
.header("Content-Disposition",`attachment; filename=${request.params.filename};`)
.header("Content-Transfer-Encoding","binary")
}
catch (err) {
console.log(err)
}
}
module.exports = [
{
method: "GET",path: "/api/url/endpoint/{filename}",handler: downloadFile
}
]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。