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中的非阻塞方法介绍
Jun 05 NodeJs
Nodejs sublime text 3安装与配置
Jun 19 NodeJs
nodejs个人博客开发第四步 数据模型
Apr 12 NodeJs
NodeJS创建最简单的HTTP服务器
May 15 NodeJs
深入浅析Nodejs的Http模块
Jun 20 NodeJs
详解IWinter 一个路由转控制器的 Nodejs 库
Nov 15 NodeJs
nodejs微信扫码支付功能实现
Feb 17 NodeJs
NodeJS实现自定义流的方法
Aug 01 NodeJs
nodejs require js文件入口,在package.json中指定默认入口main方法
Oct 10 NodeJs
nodejs实现日志读取、日志查找及日志刷新的方法分析
May 20 NodeJs
NodeJs实现简易WEB上传下载服务器
Aug 10 NodeJs
详解nodejs内置模块
May 06 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
ThinkPHP安装和设置
2015/07/27 PHP
php使用parse_str实现查询字符串解析到变量中的方法
2017/02/17 PHP
tp5框架基于ajax实现异步删除图片的方法示例
2020/02/10 PHP
JS俄罗斯方块,包含完整的设计理念
2010/12/11 Javascript
JS画5角星方法介绍
2013/09/17 Javascript
css配合jquery美化 select
2013/11/29 Javascript
Nodejs为什么选择javascript为载体语言
2015/01/13 NodeJs
JavaScript输出当前时间Unix时间戳的方法
2015/04/06 Javascript
javascript实现网页屏蔽Backspace事件,输入框不屏蔽
2015/07/21 Javascript
dedecms页面如何获取会员状态的实例代码
2016/03/15 Javascript
利用jQuery插件imgAreaSelect实现图片上传裁剪(放大缩小)
2016/12/02 Javascript
DOM事件探秘篇
2017/02/15 Javascript
JS简单实现获取元素的封装操作示例
2017/04/07 Javascript
如何理解Vue的作用域插槽的实现原理
2017/08/19 Javascript
MUI 实现侧滑菜单及其主体部分上下滑动的方法
2018/01/25 Javascript
JavaScript判断日期时间差的实例代码
2018/03/01 Javascript
vue draggable resizable gorkys与v-chart使用与总结
2019/09/05 Javascript
python数组复制拷贝的实现方法
2015/06/09 Python
Python_LDA实现方法详解
2017/10/25 Python
python3+PyQt5重新实现自定义数据拖放处理
2018/04/19 Python
查找python项目依赖并生成requirements.txt的方法
2018/07/10 Python
对python pandas 画移动平均线的方法详解
2018/11/28 Python
python 产生token及token验证的方法
2018/12/26 Python
使用celery执行Django串行异步任务的方法步骤
2019/06/06 Python
PyQt4编程之让状态栏显示信息的方法
2019/06/18 Python
python3 写一个WAV音频文件播放器的代码
2019/09/27 Python
jupyter notebook中美观显示矩阵实例
2020/04/17 Python
pytorch查看模型weight与grad方式
2020/06/24 Python
使用css创建三角形 使用CSS3创建3d四面体原理及代码(html5实践)
2013/01/06 HTML / CSS
IE10 Error.stack 让脚本调试更加方便快捷
2013/04/22 HTML / CSS
Daniel Wellington官方海外旗舰店:丹尼尔惠灵顿DW手表
2018/02/22 全球购物
blueseventy官网:铁人三项和比赛泳衣
2021/02/06 全球购物
食品安全宣传标语
2014/06/07 职场文书
2014年小学少先队工作总结
2014/12/18 职场文书
辞职信模板(中英文版)
2015/02/27 职场文书
PostGIS的安装与入门使用指南
2022/01/18 PostgreSQL