nodejs实现大文件(在线视频)的读取


Posted in NodeJs onOctober 16, 2020

nodejs进行视频读取时不能像读取图片之类的一次性读取,而是必须读取一部分返回一部分,这样客户端的播放才会边缓冲边播放,而不必等待全部缓冲完再播放。

老规矩,直接贴代码讲解:

var fs = require('fs'); 

function readBigFileEntry(filename, response) { 
path.exists(filename, function(exists) { 
if (!filename || !exists) { 
response.writeHead(404); 
response.end(); 
return; 
} 

var readStream = fs.ReadStream(filename); 

var contentType = 'none'; 
var ext = path.extname(filename); 
switch (ext) { 
case ".flv": 
contentType = "video/flv"; 
break; 
} 

response.writeHead(200, { 
'Content-Type' : contentType, 
'Accept-Ranges' : 'bytes', 
'Server' : 'Microsoft-IIS/7.5', 
'X-Powered-By' : 'ASP.NET' 
}); 



readStream.on('close', function() { 
response.end(); 
console.log("Stream finished."); 
}); 
readStream.pipe(response); 
}); 
}

通过fs模块的ReadStream方法,拿到视频流,然后绑定关闭事件:当流读取到结尾的时候结束response请求,最后通过pipe方法进行小块小块的读取。这里的head信息不能添加Content-Length属性,因为必须分段读取,如果加了这个属性,浏览器就会以为请求结束了从而关闭请求。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

NodeJs 相关文章推荐
提高NodeJS中SSL服务的性能
Jul 15 NodeJs
Nodejs实现的一个简单udp广播服务器、客户端
Sep 25 NodeJs
Nodejs全栈框架StrongLoop推荐
Nov 09 NodeJs
Nodejs关于gzip/deflate压缩详解
Mar 04 NodeJs
Nodejs读取文件时相对路径的正确写法(使用fs模块)
Apr 27 NodeJs
nodejs后台集成ueditor富文本编辑器的实例
Jul 11 NodeJs
NodeJS简单实现WebSocket功能示例
Feb 10 NodeJs
nodejs 日志模块winston的使用方法
May 02 NodeJs
Nodejs使用Mongodb存储与提供后端CRD服务详解
Sep 04 NodeJs
nodejs图片处理工具gm用法小结
Dec 12 NodeJs
Nodejs libuv运行原理详解
Aug 21 NodeJs
浅谈使用nodejs搭建web服务器的过程
Jul 20 NodeJs
nodejs发送http请求时遇到404长时间未响应的解决方法
Dec 10 #NodeJs
NodeJs实现定时任务的示例代码
Dec 05 #NodeJs
windows系统下更新nodejs版本的方案
Nov 24 #NodeJs
nodejs项目windows下开机自启动的方法
Nov 22 #NodeJs
使用nodeJs来安装less及编译less文件为css文件的方法
Nov 20 #NodeJs
NodeJS实现视频转码的示例代码
Nov 18 #NodeJs
详解NODEJS基于FFMPEG视频推流测试
Nov 17 #NodeJs
You might like
特转载一高手总结PHP学习资源和链接.
2006/12/05 PHP
php笔记之常用文件操作
2010/10/12 PHP
php中url传递中文字符,特殊危险字符的解决方法
2013/08/17 PHP
php生出随机字符串
2017/07/06 PHP
PHP实现字符串大小写转函数的功能实例
2019/02/06 PHP
Maps Javascript
2007/01/22 Javascript
IE8 浏览器Cookie的处理
2009/01/31 Javascript
javascript学习之闭包分析
2010/12/02 Javascript
js给onclick赋值传参数的两种方法
2013/11/25 Javascript
jquery中使用循环下拉菜单示例代码
2014/09/24 Javascript
Javascript数组与字典用法分析
2014/12/13 Javascript
javascript实现uploadify上传格式以及个数限制
2015/11/23 Javascript
jQuery增加与删除table列的方法
2016/03/01 Javascript
JS+HTML5手机开发之滚动和惯性缓动实现方法分析
2016/06/12 Javascript
学习node.js 断言的使用详解
2019/03/18 Javascript
微信小程序开发之左右分栏效果的实例代码
2019/05/20 Javascript
nodejs中使用archive压缩文件的实现代码
2019/11/26 NodeJs
Node.js 中判断一个文件是否存在
2020/08/24 Javascript
[01:03:09]完美世界DOTA2联赛PWL S2 Forest vs SZ 第二场 11.25
2020/11/26 DOTA
[39:08]完美世界DOTA2联赛PWL S3 LBZS vs CPG 第一场 12.12
2020/12/16 DOTA
用Python解析XML的几种常见方法的介绍
2015/04/09 Python
Python随手笔记第一篇(2)之初识列表和元组
2016/01/23 Python
Python解惑之整数比较详解
2017/04/24 Python
Django Admin 实现外键过滤的方法
2017/09/29 Python
在Python web中实现验证码图片代码分享
2017/11/09 Python
详解Pytorch 使用Pytorch拟合多项式(多项式回归)
2018/05/24 Python
Python字典创建 遍历 添加等实用基础操作技巧
2018/09/13 Python
Parts Express:音频、视频和扬声器的第一来源
2017/04/25 全球购物
店长岗位职责
2013/11/21 职场文书
入党思想汇报
2014/01/05 职场文书
《草原》教学反思
2014/02/15 职场文书
小班秋游活动方案
2014/02/22 职场文书
市场部经理岗位职责
2014/04/10 职场文书
应届大学生求职信
2014/07/20 职场文书
关于保护环境的建议书
2014/08/26 职场文书
2015年派出所工作总结
2015/04/24 职场文书