一个视频监控的功能需要视频,音频都在,使用fluent-ffmpeg讲rtsp流转换成flv格式,但是没有声音。改如何配置
当前代码如下:
后端node:
var express = require("express");
var expressWebSocket = require("express-ws");
var ffmpeg = require("fluent-ffmpeg");
ffmpeg.setFfmpegPath("D:/ffmpeg/ffmpeg/bin/ffmpeg"); //本地windows
var webSocketStream = require("websocket-stream/stream");
var WebSocket = require("websocket-stream");
var http = require("http");
function localServer() {
let app = express();
app.use(express.static(__dirname));
expressWebSocket(app, null, {
perMessageDeflate: true
});
app.ws("/rtsp/:id/", rtspRequestHandle)
app.listen(8888);
console.log("express listened")
}
function rtspRequestHandle(ws, req) {
console.log("rtsp request handle");
const stream = webSocketStream(ws, {
binary: true,
browserBufferTimeout: 1000000
}, {
browserBufferTimeout: 1000000
});
let url = req.query.url;
console.log("rtsp url:", url);
console.log("rtsp params:", req.params);
try {
// ("-rtsp_transport", "tcp", "-buffer_size", "102400")
ffmpeg(url)
.addInputOption('-analyzeduration', '100000', '-max_delay', '1000000')
.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")
.audioBitrate(128).audioCodec('copy').audioChannels(1).audioFrequency(22050).audioQuality(0)
.pipe(stream); //noAudio(): 完全禁用音频
} catch (error) {
console.log(error);
}
}
localServer();
前端使用的是flv.js:
let players = flvjs.createPlayer({
type: "flv",
isLive: true,
hasAudio:true,
url: `ws://localhost:8888/rtsp/${index}/?url=${item.url}`
});
players.attachMediaElement(video);
players.load();
players.play();
求大佬解决,目前视频有的,但是没有声音