为了方便测试,找到下面链接中介绍的方法,通过Nodejs流API,创建了一个基本的视频流服务器用来测试。
原始链接如下:
## stream-large-mp4
https://www.geeksforgeeks.org/how-to-stream-large-mp4-files/
## install-node-js
https://www.digitalocean.com/community/tutorials/how-to-install-node-js-on-ubuntu-20-04
## streamvideo
https://github.com/varaprasadh/gfg-blogs/tree/master/streamvideo
下载代码后,进入server.js目录,启动server:
cd ~/disk4t/media-test/samples.mplayerhq.hu/gfg-blogs/streamvideo
# 启动server
$ node server.js
server listening on port:3000
server.js的代码:
const http=require('http');
const fs=require("fs");
const path=require("path");
const server=http.createServer((req,res)=>{
// return res.end(req.url+req.method);
if(req.method==='GET' && req.url==="/"){
// res.writeHead(200);
fs.createReadStream(path.resolve("index.html")).pipe(res);
return;
}
if(req.method==='GET' && req.url==="/video"){
const filepath = path.resolve("video.mp4");
const stat = fs.statSync(filepath)
const fileSize = stat.size
const range = req.headers.range
if (range) {
const parts = range.replace(/bytes=/, "").split("-")
const start = parseInt(parts[0], 10)
const end = parts[1] ?parseInt(parts[1], 10) :fileSize - 1
const chunksize = (end - start) + 1
const file = fs.createReadStream(filepath, {start,end})
const head = {
'Content-Range': `bytes ${start}-${end}/${fileSize}`,
'Accept-Ranges': 'bytes',
'Content-Length': chunksize,
'Content-Type': 'video/mp4',
}
res.writeHead(206, head);
file.pipe(res);
}else{
const head = {
'Content-Length': fileSize,
'Content-Type': 'video/mp4',
}
res.writeHead(200, head);
//path -> filepath
fs.createReadStream(filepath).pipe(res);
}
}
else{
res.writeHead(400);
res.end("bad request");
}
})
const PORT = process.env.PORT || 3000;
server.listen(PORT,() => {
console.log(`server listening on port:${PORT}`);
})
- 这里,video.mp4换成flv,mkv等文件都是可以的。
然后通过http服务就可以播放了,这里,前提条件是已经把index.html代码放到我的http服务器上了,所以浏览器就可以直接访问:
google-chrome http://192.168.31.124/gfg-blogs/streamvideo/index.html
index.html是一个H5的video标签,不能自动播放的话,可以增加muted项:
<body>
<video width="640" height="360" muted controls autoplay="autoplay">
<source src="http://192.168.31.124:3000/video">
</video>
</body>
video autoplay不生效
- 高版本浏览器,对视频静音后,可以保证视频自动播放。