微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用NodeJS和HapiJS进行视频流

如何解决使用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 举报,一经查实,本站将立刻删除。