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文件操作模块FS(File System)常用函数简明总结
Jun 05 NodeJs
Nodejs极简入门教程(一):模块机制
Oct 25 NodeJs
windows 下安装nodejs 环境变量设置
Feb 02 NodeJs
Nodejs+Socket.io实现通讯实例代码
Feb 13 NodeJs
Nodejs 获取时间加手机标识的32位标识实现代码
Mar 07 NodeJs
nodejs连接mysql数据库简单封装示例-mysql模块
Apr 10 NodeJs
详解nodejs微信公众号开发——4.自动回复各种消息
Apr 11 NodeJs
nodejs获取微信小程序带参数二维码实现代码
Apr 12 NodeJs
Nodejs之TCP服务端与客户端聊天程序详解
Jul 07 NodeJs
Nodejs实现爬虫抓取数据实例解析
Jul 05 NodeJs
Nodejs中的require函数的具体使用方法
Apr 02 NodeJs
nodejs使用socket5进行代理请求的实现
Feb 21 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中strlen和mb_strlen函数的区别
2014/03/07 PHP
php实现xml与json之间的相互转换功能实例
2016/07/07 PHP
日期函数扩展类Ver0.1.1
2006/09/07 Javascript
动态表格Table类的实现
2009/08/26 Javascript
收集的10个免费的jQuery相册
2011/02/26 Javascript
多种方法实现360浏览器下禁止自动填写用户名密码
2014/06/16 Javascript
javascript实现PC网页里的拖拽效果
2016/03/14 Javascript
jQuery实现摸拟alert提示框
2016/05/22 Javascript
jQuery+Ajax实现限制查询间隔的方法
2016/06/07 Javascript
Javascript中的arguments对象
2016/06/20 Javascript
随机生成10个不重复的0-100的数字(实例讲解)
2017/08/16 Javascript
JS简单实现父子窗口传值功能示例【未使用iframe框架】
2017/09/20 Javascript
移动端效果之IndexList详解
2017/10/20 Javascript
nodejs简单实现TCP服务器端和客户端的聊天功能示例
2018/01/04 NodeJs
小程序scroll-view组件实现滚动的示例代码
2018/09/20 Javascript
搭建Vue从Vue-cli到router路由护卫的实现
2019/11/14 Javascript
element-ui和vue表单(对话框)验证提示语(残留)清除操作
2020/09/11 Javascript
零基础写python爬虫之抓取百度贴吧代码分享
2014/11/06 Python
pandas每次多Sheet写入文件的方法
2018/12/10 Python
解决python Markdown模块乱码的问题
2019/02/14 Python
详解Python读取yaml文件多层菜单
2019/03/23 Python
PyQt5 控件字体样式等设置的实现
2020/05/13 Python
python接口自动化之ConfigParser配置文件的使用详解
2020/08/03 Python
只要五步 就可以用HTML5/CSS3快速制作便签贴特效(图)
2012/06/04 HTML / CSS
Finishline官网:美国一家领先的运动品牌鞋类、服装零售商
2016/07/20 全球购物
国外平面设计第一市场:99designs
2016/10/25 全球购物
去加拿大的旅行和假期:Canadian Affair
2016/10/25 全球购物
速卖通欧盟:Aliexpress EU
2020/08/19 全球购物
新文化运动的基本口号
2014/06/21 职场文书
预备党员对照检查材料思想汇报
2014/09/24 职场文书
2014群众路线学习笔记
2014/11/06 职场文书
2015年世界无烟日活动总结
2015/02/10 职场文书
品质保证书格式
2015/02/28 职场文书
留学推荐信(中英文版)
2015/03/26 职场文书
干货!开幕词的写作方法
2019/04/02 职场文书
Python数据分析入门之数据读取与存储
2021/05/13 Python