GraceYang
  1. vue-webSocket转码配置
const express =  require("express");
const expressWebSocket = require("express-ws");
const ffmpeg = require("fluent-ffmpeg");
ffmpeg.setFfmpegPath("C:/bin/ffmpeg");
const webSocketStream = require("websocket-stream/stream");
const WebSocket = require("websocket-stream");
const http = require("http");
let app = express();
app.use(express.static(__dirname));
expressWebSocket(app, null, {
  perMessageDeflate: true
});
app.ws("/rtsp/:id/", rtspRequestHandle);
app.listen(8091);
console.log("express listened");
function rtspRequestHandle(ws, req) {
  console.log("rtsp request handle");
  let url = req.query.url;
  const stream = webSocketStream(ws, {
    binary: true,
    browserBufferTimeout: 1000000
  }, {
    browserBufferTimeout: 1000000
  });
  // console.log("rtsp url:", url);
  //console.log("rtsp params:", req.params);
  var ffmpegCommand=ffmpeg(url)
    .inputOptions([\'-r 30\',\'-rtsp_transport tcp\', \'-buffer_size 102400\', \'-fflags nobuffer\',\'-analyzeduration 1000000\'])  // 这里可以添加一些 RTSP 优化的参数
    .outputOptions([\'-fflags nobuffer\', \'-tune zerolatency\',\'-g 5\' ,\'-b:v 700000\'])
    .on("start", function () {
      console.log(url, "Stream started.");
    })
    .on("codecData", function () {
      console.log(url, "Stream codecData.")
      // 摄像机在线处理
    })
    .on("error", function (err) {
      console.log(url, "An error occured: ", err.message);
    })
    .on("end", function () {
      console.log(url, "Stream end!");
      // 摄像机断线的处理
    })
    .outputFormat("flv").videoCodec("copy").noAudio();
  try {
    ffmpegCommand.pipe(stream);
  } catch (error) {
    console.log(error);
  }
}
  1. 服务依赖
    npm install express express-ws fluent-ffmpeg websocket-stream -S -D
    npm install flv.js -S -D

分类:

技术点:

相关文章: