6263960
首先我先建一个简单的视频流server, 浏览器请求就可以直接播放啦,但是。。。
var http = require('http')
var fs = require('fs')
http.createServer(function(request, response){
var mp4 = 'SX28_hd.mp4';
var stat = fs.statSync(mp4);
response.writeHead(200, {
'Content-Type': 'video/mp4',
'Content-Length': stat.size
})
var readableStream = fs.createReadStream(mp4);
readableStream.pipe(response);
}).listen(3000)
------------------------------我是美丽的分割线-------------------------------------------------------
我再建一个接受视频流的客户端, 代码如下,
var http = require('http')
var fs = require('fs')
var options = {
host:'localhost',
port:'3000',
path:'/',
method:'GET'
}
var writeStream = fs.createWriteStream('file.mp4')
var passedLength = 0;
var lastSize = 0;
var startTime = Date.now();
var totalSize = 0;
var req = http.request(options, function(res){
console.log('STATUS' + res.statusCode)
totalSize = res.headers['content-length'];
console.log(totalSize);
// console.log('HEADERS' + JSON.stringify(res.headers))
// res.setEncoding('utf8')
res.on('data', function(chunk){
// console.log('BODY' + chunk);
passedLength += chunk.length;
writeStream.write(chunk);
})
res.on('end', function(){
writeStream.end();
console.log('xx');
})
})
req.end();
var out = process.stdout;
setTimeout(function show() {
var percent = Math.ceil((passedLength / totalSize) * 100);
var size = Math.ceil(passedLength / 1000000);
var diff = size - lastSize;
lastSize = size;
out.clearLine();
out.cursorTo(0);
out.write('已完成' + size + 'MB, ' + percent + '%, 速度:' + diff * 2 + 'MB/s');
if (passedLength < totalSize) {
setTimeout(show, 50);
} else {
var endTime = Date.now();
console.log();
console.log('共用时:' + (endTime - startTime) / 1000 + '秒。');
}
}, 50);
------------------------------我是美丽的分割线------------------------------------------------------- 但是,如果视频还没有下完, 我就把进程关闭, 发现下载到本地的一部分视频是可以播放的, 我有两个疑问
- 如果时时下载, 客户端(ios 和安卓)一开始下载的那一部分能够播放吗?
- 这样能够支持多客户端播放吗?
------------------------------我是美丽的分割线-------------------------------------------------------
这看起来只是一个静态的文件服务器, 我想要实现一个能够任意跳转点播的视频服务器, 找了很多资料,java在这块很成熟, 有很多开源产品,但nodejs该怎么弄啊? 目前所知的两种协议:rtmp, http live stream, 但这两种协议在nodejs应用呢? 欢迎大家一起讨论啊!!!!