建立本地http流服务

为了方便测试,找到下面链接中介绍的方法,通过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不生效

  • 高版本浏览器,对视频静音后,可以保证视频自动播放。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值