nodejs實現(xiàn)大文件(在線視頻)的讀取
nodejs進(jìn)行視頻讀取時不能像讀取圖片之類的一次性讀取,而是必須讀取一部分返回一部分,這樣客戶端的播放才會邊緩沖邊播放,而不必等待全部緩沖完再播放。
老規(guī)矩,直接貼代碼講解:
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方法,拿到視頻流,然后綁定關(guān)閉事件:當(dāng)流讀取到結(jié)尾的時候結(jié)束response請求,最后通過pipe方法進(jìn)行小塊小塊的讀取。這里的head信息不能添加Content-Length屬性,因為必須分段讀取,如果加了這個屬性,瀏覽器就會以為請求結(jié)束了從而關(guān)閉請求。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
詳解Node.js利用node-git-server快速搭建git服務(wù)器
本篇文章主要介紹了詳解Node.js利用node-git-server快速搭建git服務(wù)器,非常具有實用價值,需要的朋友可以參考下2017-09-09
Node.js 實現(xiàn)搶票小工具 & 短信通知提醒功能
這篇文章主要介紹了Node.js 實現(xiàn)搶票小工具 & 短信通知提醒功能,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-10-10
輕松創(chuàng)建nodejs服務(wù)器(5):事件處理程序
這篇文章主要介紹了輕松創(chuàng)建nodejs服務(wù)器(5):事件處理程序,本系列文章將一步一步創(chuàng)建一個完整的nodejs服務(wù)器,需要的朋友可以參考下2014-12-12
一文詳解Node中module.exports和exports區(qū)別
這篇文章主要介紹了一文詳解Node中module.exports和exports區(qū)別2023-03-03
Nodejs關(guān)于gzip/deflate壓縮詳解
本文主要向大家介紹了nodejs中關(guān)于gzip/deflate壓縮的2種方法,分別是管道壓縮和非管道壓縮,十分詳細(xì),并附帶示例,這里推薦給大家參考下。2015-03-03
node.JS的crypto加密模塊使用方法詳解(MD5,AES,Hmac,Diffie-Hellman加密)
本文將詳細(xì)介紹node.JS的加密模塊crypto實現(xiàn)MD5,AES,Hmac,Diffie-Hellman加密的詳解方法,需要的朋友可以參考下2020-02-02

