Video streaming with HTML 5 via node.js

后端 未结 8 1996
青春惊慌失措
青春惊慌失措 2020-11-30 18:01

I\'m trying to set up a web server that will support streaming video to an HTML5 video tag using node.js. Here\'s my code so far:

var range = request.header         


        
8条回答
  •  青春惊慌失措
    2020-11-30 18:43

    when using express put this in your media_server.js or index.js which will serve the media on port 3000

    const express = require('express')
    const fs = require('fs')
    const path = require('path')
    const app = express()
    
    app.use(express.static(path.join(__dirname, 'public')))
    
    app.get('/', function(req, res) {
      res.sendFile(path.join(__dirname + '/index.html'))
    })
    
    app.get('/video', function(req, res) {
      const path = 'assets/sample.mp4'// your video path
      const stat = fs.statSync(path)
      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(path, {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)
        fs.createReadStream(path).pipe(res)
      }
    })
    
    app.listen(3000, function () {
      console.log('Listening on port 3000!')
    })
    

    then in your index.html

    
      
        Video stream sample
      
      
        
      
    
    

提交回复
热议问题