2017-10-08 62 views
1

我还是Node.js中的新手,试图弄清楚事情,所以如果我听起来语无伦次,请原谅。显示页面上的视频流块(node.js)

所以我读过一些关于流的初学者笔记,现在我正在测试它。 我在我的项目文件(公共/图像/视频/ Seinfeld.S09E07.720p.WebRip.ReEnc-DeeJayAhmed.mkv)中获得了这些Seinfeld剧集(.mkv文件),我希望在页面上展示这些剧集。现在,简单的选择就是将它放在我的ejs文件中的视频标签的'src'中。

但是,我想流式传输视频部分,以便它不必等待整个文件准备好显示该集。我以为我可以使用.createReadStream。但是,我不知道如何将那些已准备好的视频数据块传输到我的网页中,以便在视频播放器中显示它们。

index.js服务器端

var express = require('express'); 
var router = express.Router(); 
var fs = require('fs'); 

    /* GET home page. */ 
router.get('/', function(req, res, next) { 
    var myReadStream = fs.createReadStream(__dirname + '/../images/videos/Seinfeld.S09E07.720p.WebRip.ReEnc-DeeJayAhmed.mkv'); 

    myReadStream.on('data', function (chunk) { 
     // no idea what to do from here 
    }) 
    res.render('index', { 
     title: 'Express' 
     }); 
}); 

module.exports = router; 

EJS文件

<!DOCTYPE html> 
<html> 
    <head> 
    <title><%= title %></title> 
    <link rel='stylesheet' href='/stylesheets/style.css' /> 
    </head> 
    <body> 
    <h1><%= title %></h1> 
    <video src="" type="video/mkv" autoplay controls></video> 
    <p>Welcome to <%= title %></p> 
    </body> 
</html> 
+0

您可能需要将流传输给用户:例如'myReadStream.pipe(res)' –

+0

然后如何访问块? –

+0

通过使用以下建议的答案... –

回答

2

您可以使用fetch()Response.getReader()它在客户端返回ReadableStreamMediaSource从服务器读取响应流并附加一个或多个表示可以在<video>元素处呈现的一个或多个媒体资源的块的ArrayBuffer请参阅HTML5 audio streaming: precisely measure latency?

+1

好吧,现在我不明白这是什么意思,但我有一个起点,用你提到的东西进行研究。感谢您的回应! –

+1

@TijlDeclerck请参阅[媒体资源扩展™](https://w3c.github.io/media-source/) – guest271314