一尘不染

通过node.js使用HTML 5进行视频流传输

node.js

我正在尝试设置一个网络服务器,该服务器将使用node.js将视频流传输到HTML5视频标签。到目前为止,这是我的代码:

var range = request.headers.range;
var total = file.length;

var parts = range.replace(/bytes=/, "").split("-");
var partialstart = parts[0];
var partialend = parts[1];

var start = parseInt(partialstart, 10);
var end = partialend ? parseInt(partialend, 10) : total-1;

var chunksize = (end-start)+1;

response.writeHead(206, { "Content-Range": "bytes " + start + "-" + end + "/" + total, "Accept-Ranges": "bytes", "Content-Length": chunksize, "Content-Type": type });
response.end(file);

其中“ request”代表http请求,类​​型是“ application / ogg”或“ video / ogg”(我都尝试过),而“
file”是已从文件系统读取的.ogv文件。这是响应头:

Content-Range   bytes 0-14270463/14270464
Accept-Ranges   bytes
Content-Length   14270464
Connection     keep-alive
Content-Type     video/ogg

我已经检查了响应头,并且此代码似乎运行良好,但是存在两个问题:

  1. 该视频在本地网络上的加载速度似乎非常慢。据我所知,使用Firebug检查响应时,文件似乎以约150 kb / sec的速度流传输。
  2. 该视频完全无法播放。即使我等待整个加载,HTML 5视频标签也只会显示一个大的“ x”,而不是firefox中的电影。

是否有人对我可以通过node.js进行视频流传输有什么想法?

谢谢!
克里斯


阅读 566

收藏
2020-07-07

共1个答案

一尘不染

我可以在nodejs论坛的一些帮助下使它起作用:

http://groups.google.com/group/nodejs/browse_thread/thread/8339e0dc825c057f/822b2dd48f36e890

Google网上论坛主题集锦:

众所周知,谷歌浏览器会先发出0-1024范围的请求,然后再请求“ 1024-”范围。

response.end(file.slice(start,chunksize),“ binary”);

然后:

通过将“连接”标头设置为“关闭”,我能够使视频在Firefox中正常播放

然后:

似乎您在错误地计算内容长度:

var chunksize =(end-start)+1;

如果开始为0,结束为1,则您的chunksize为2,应为1。

2020-07-07