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 相关文章推荐
基于 Docker 开发 NodeJS 应用
Jul 30 NodeJs
NodeJS中利用Promise来封装异步函数
Feb 25 NodeJs
Nodejs多站点切换Htpps协议详解及简单实例
Feb 23 NodeJs
nodejs中使用HTTP分块响应和定时器示例代码
Mar 19 NodeJs
nodejs获取微信小程序带参数二维码实现代码
Apr 12 NodeJs
nodejs+websocket实时聊天系统改进版
May 18 NodeJs
nodejs创建简易web服务器与文件读写的实例
Sep 07 NodeJs
Nodejs中使用phantom将html转为pdf或图片格式的方法
Sep 18 NodeJs
nodejs更改项目端口号的方法
May 13 NodeJs
webstorm中配置nodejs环境及npm的实例
May 15 NodeJs
nodejs图片处理工具gm用法小结
Dec 12 NodeJs
基于NodeJS开发钉钉回调接口实现AES-CBC加解密
Aug 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 8小时时间差的解决方法小结
2009/12/22 PHP
PHP关于IE下的iframe跨域导致session丢失问题解决方法
2013/10/10 PHP
引用 js在IE与FF之间的区别详细解析
2013/11/20 Javascript
js对table的td进行相同内容合并示例详解
2013/12/27 Javascript
Javascript图片上传前的本地预览实例
2014/06/16 Javascript
通过Tabs方法基于easyUI+bootstrap制作工作站
2016/03/28 Javascript
微信小程序开发之选项卡(窗口底部TabBar)页面切换
2017/04/12 Javascript
vue-cli + sass 的正确打开方式图文详解
2017/10/27 Javascript
vue.js中$set与数组更新方法
2018/03/08 Javascript
微信小程序首页的分类功能和搜索功能的实现思路及代码详解
2018/09/11 Javascript
jQuery实现经典的网页3D轮播图封装功能【附源码下载】
2019/02/15 jQuery
深入了解JavaScript 私有化
2019/05/30 Javascript
VUE : vue-cli中去掉路由中的井号#操作
2020/09/04 Javascript
[01:33:14]LGD vs VP Supermajor 败者组决赛 BO3 第二场 6.10
2018/07/04 DOTA
python操作MongoDB基础知识
2013/11/01 Python
Python Trie树实现字典排序
2014/03/28 Python
python采集百度百科的方法
2015/06/05 Python
利用python将图片转换成excel文档格式
2017/12/30 Python
python numpy 按行归一化的实例
2019/01/21 Python
python修改字典键(key)的方法
2019/08/05 Python
Python3 无重复字符的最长子串的实现
2019/10/08 Python
Python使用os.listdir和os.walk获取文件路径
2020/05/21 Python
Python pip 常用命令汇总
2020/10/19 Python
python爬虫使用scrapy注意事项
2020/11/23 Python
国际知名军事风格休闲装品牌:Alpha Industries(阿尔法工业)
2017/05/24 全球购物
中专生的个人自我评价
2013/12/11 职场文书
四议两公开实施方案
2014/03/28 职场文书
实习生评语
2014/04/26 职场文书
爱护花草树木的标语
2014/06/11 职场文书
医院护士党的群众路线教育实践活动对照检查材料思想汇报
2014/10/04 职场文书
病危通知单
2015/04/17 职场文书
幼儿园科学课教学反思
2016/03/03 职场文书
在python中实现导入一个需要传参的模块
2021/05/12 Python
js基础语法与maven项目配置教程案例
2021/07/15 Javascript
JavaScript原型链详解
2021/11/07 Javascript
Java 实战项目之家居购物商城系统详解流程
2021/11/11 Java/Android