watson / rtsp-stream

A transport agnostic RTSP serial multiplexer module for Node
MIT License
91 stars 28 forks source link

how to integrate with VLC? #4

Open brennongs opened 6 years ago

brennongs commented 6 years ago

I'm wondering if you know how to use your package in conjunction with VLC? I don't think i'm responding to the SETUP request correctly, and I'm pretty new to rtsp.. Would you be willing to help me out? I'd be willing to add what we figure out to the wiki or an example section. I've been googling for like two days with no success :(

here's my current code:

const net = require('net')
const rtsp = require('rtsp-stream')
const fs = require('fs')
const path = require('path')

const server = net.createServer(socket => {
  const decoder = new rtsp.Decoder()
  const encoder = new rtsp.Encoder()
  const video = fs.createReadStream(`${__dirname}/../assets/QRTest01.mp4`)

  decoder.on('request', req => {
    console.log(req.method, req)
    if (req.uri === `rtsp://localhost:5000/1`) {
      let res = encoder.response()

      switch (req.method) {
        case 'OPTIONS':
          res.setHeader('CSeq', req.headers['cseq'])
          res.setHeader('Public', 'SETUP, TEARDOWN, PLAY, PAUSE')

          res.end('listening')

        case 'SETUP':
          res.end()
      }
    }

    req.pipe(process.stdout)

    req.on('end', () => {
      let res = encoder.response()

      res.setHeader('CSeq', req.headers['cseq'])
      video.pipe(res)
    })
  })

  socket.pipe(decoder)
  encoder.pipe(socket)
})

server.listen(5000, () => {
  console.log(`rtsp active on ${server.address().port}`)
})

thanks in advance for your help.

brennongs commented 6 years ago

@watson I've made some progress, it looks like there's an issue with double-sending headers in outgoing-message. I'm working to resolve, any help would be appreciated. see below:

/Users/brennon/Codes/rtsp-streaming-server/node_modules/rtsp-stream/lib/outgoing-message.js:47
  if (this.headersSent) throw new Error('Headers already sent!')
                        ^

Error: Headers already sent!
    at module.exports.OutgoingMessage.setHeader (/Users/brennon/Codes/rtsp-streaming-server/node_modules/rtsp-stream/lib/outgoing-message.js:47:31)
    at ClientServer.describeRequest (/Users/brennon/Codes/rtsp-streaming-server/lib/ClientServer.js:60:7)
    at Server.ClientServer.server.Rtsp.createServer (/Users/brennon/Codes/rtsp-streaming-server/lib/ClientServer.js:16:18)
    at Server.emit (events.js:180:13)
    at module.exports.<anonymous> (/Users/brennon/Codes/rtsp-streaming-server/node_modules/rtsp-server/index.js:48:14)
    at module.exports.emit (events.js:180:13)
    at module.exports.Decoder._writeHead (/Users/brennon/Codes/rtsp-streaming-server/node_modules/rtsp-stream/decoder.js:77:30)
    at module.exports.Decoder._writeOffset (/Users/brennon/Codes/rtsp-streaming-server/node_modules/rtsp-stream/decoder.js:37:21)
    at module.exports.Decoder._write (/Users/brennon/Codes/rtsp-streaming-server/node_modules/rtsp-stream/decoder.js:27:8)
    at doWrite (/Users/brennon/Codes/rtsp-streaming-server/node_modules/readable-stream/lib/_stream_writable.js:406:64)