【问题标题】:How to stream a .m4v video with NodeJS如何使用 NodeJS 流式传输 .m4v 视频
【发布时间】:2017-10-07 20:57:36
【问题描述】:

我需要的是能够将服务器本地文件上的视频发送到客户端。我无法创建静态“视频”文件夹,因为这些视频只是暂时可用,这意味着我将拥有动态视频。

那么如何从服务器文件中检索可播放的 .m4v 视频文件(如果我知道路径)并将其发送到 angular.io 客户端播放

【问题讨论】:

标签: node.js angular express m4v


【解决方案1】:

这是一个简单的解决方案:

在服务器端:

app.get('/video', function(req, res) {
  const path = 'assets/sample.m4v'
  const stat = fs.statSync(path)
  const fileSize = stat.size
  const head = {
    'Content-Length': fileSize,
    'Content-Type': 'video/mp4',
  }
  res.writeHead(200, head)
  fs.createReadStream(path).pipe(res)
})

在客户端(html):

<video id="videoPlayer" controls>
  <source src="http://localhost:3000/video" type="video/mp4">
</video>

也许您应该设置不同的媒体类型,例如 video/x-m4v 而不是 video/mp4。

Source link

【讨论】:

    【解决方案2】:

    这对我来说已经足够了。 MP4 具有对修剪(伪流)的本机支持。它非常适合通过流媒体在浏览器中观看视频。

    const router    = require('express').Router();
    ...
    router.get('/video/:acckey', async (req, res, next)=>{
      ...
      let full_path = await myAccessControl.auth(acckey);
      ...
      if (fs.existsSync(full_path)) {
        res.setHeader('Content-Type', 'video/mp4');
        res.status(200).sendFile(full_path, function (err) {
          if (err) {...} else {...}
        });    
      }    
    }
    

    在 HTML 中(简化):

    <VIDEO controls src="domain.com/video/PSMAPKMDPAMDPSMPSD/">
    

    【讨论】:

    • 我没有使用 setHeader,当视频类型为 h.264 时它似乎工作正常,但对于 h.265/hevc,我在浏览器中得到 no video with supported format and MIM type found。虽然它们都是 mp4 文件...
    • @Michael 那是你傻逼的 MIME,而不是“MIM”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-25
    • 2020-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多