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 sublime text 3安装与配置
Jun 19 NodeJs
基于promise.js实现nodejs的promises库
Jul 06 NodeJs
在NodeJS中启用ECMAScript 6小结(windos以及Linux)
Jul 15 NodeJs
如何正确使用Nodejs 的 c++ module 链接到 OpenSSL
Aug 03 NodeJs
nodejs教程之异步I/O
Nov 21 NodeJs
nodejs加密Crypto的实例代码
Jul 07 NodeJs
详解nodejs 文本操作模块-fs模块(二)
Dec 22 NodeJs
详解nodejs中exports和module.exports的区别
Feb 17 NodeJs
nodejs集成sqlite使用示例
Jun 05 NodeJs
nodejs简单访问及操作mysql数据库的方法示例
Mar 15 NodeJs
nodejs 十六进制字符串型数据与btye型数据相互转换
Jul 30 NodeJs
nodejs检测因特网是否断开的解决方案
Apr 17 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
漫威DC即将合作联动,而双方早已经秘密开始
2020/04/09 欧美动漫
PHP获取当前页面完整URL的实现代码
2013/06/10 PHP
PHP反向代理类代码
2014/08/15 PHP
手把手编写PHP框架 深入了解MVC运行流程
2016/09/19 PHP
Laravel 微信小程序后端实现用户登录的示例代码
2019/11/26 PHP
鼠标移动到一张图片时变为另一张图片
2006/12/05 Javascript
Mootools 1.2教程 排序类和方法简介
2009/09/15 Javascript
JQuery打造PHP的AJAX表单提交实例
2009/11/03 Javascript
JS中动态添加事件(绑定事件)的代码
2011/01/09 Javascript
分享一道笔试题[有n个直线最多可以把一个平面分成多少个部分]
2012/10/12 Javascript
node.js中RPC(远程过程调用)的实现原理介绍
2014/12/05 Javascript
js实现点击图片将图片地址复制到粘贴板的方法
2015/02/16 Javascript
js数组与字符串常用方法总结
2017/01/13 Javascript
如何为你的JavaScript代码日志着色详解
2019/04/08 Javascript
ES6的异步操作之promise用法和async函数的具体使用
2019/12/06 Javascript
vue修改Element的el-table样式的4种方法
2020/09/17 Javascript
python中django框架通过正则搜索页面上email地址的方法
2015/03/21 Python
MySQL适配器PyMySQL详解
2017/09/20 Python
Python爬虫信息输入及页面的切换方法
2018/05/11 Python
python dataframe向下向上填充,fillna和ffill的方法
2018/11/28 Python
python解析json串与正则匹配对比方法
2018/12/20 Python
在python中获取div的文本内容并和想定结果进行对比详解
2019/01/02 Python
python 计算概率密度、累计分布、逆函数的例子
2020/02/25 Python
pandas按条件筛选数据的实现
2021/02/20 Python
英国蜡烛、蜡烛配件和家居香氛购买网站:Yankee Candle
2018/12/12 全球购物
Linux文件系统类型
2012/09/16 面试题
如果重写了对象的equals()方法,需要考虑什么
2014/11/02 面试题
学校消防安全制度
2014/01/30 职场文书
会计毕业自我鉴定
2014/02/05 职场文书
个人培训自我鉴定
2014/03/28 职场文书
《红军不怕远征难》教学反思
2014/04/14 职场文书
公司行政专员岗位职责
2014/08/24 职场文书
2016年大学生暑期社会实践方案
2015/11/26 职场文书
优秀员工演讲稿
2019/06/21 职场文书
Golang bufio详细讲解
2022/04/21 Golang
Python实现Matplotlib,Seaborn动态数据图
2022/05/06 Python