背景
硬件海康旧监控, 编写node服务端以实现网页播放,调用了之前用C封装好的海康接口,视频数据由接口通过回调函数传参过来形成h64裸数据Buffer,本博客记录的就是如何从视频裸流 Buffer转码并回传给websocket。
直接上代码
代码自己参悟,不懂的地方见评论区
global.isWorking = false;
app_express.ws("/realplay", function(ws, req) {
console.log("[server] coonected to ws video")
if (global.isWorking) {
return;
}
// ws.send("hello client ")
var ret = hknode.realPlay(req.query.ch, function(type, buf) {
// console.log("node server", type, buf.length, buf[0], buf[1], buf[2]);
duplexStream.push(buf);
});
console.log('get node api realplay ret = ', ret);
if (ret == 0) {
global.isWorking = true;
// var ffmpegStream = ffmpeg("rtsp://admin:bc123123@192.168.0.103:554/h264/ch33/main/av_stream").noAudio().videoCodec('libx264').format('flv')
var ffmpegStream = ffmpeg(duplexStream).noAudio().videoCodec('libx264').format('flv')
.on('data', function(data) {
console.log("data len", data.length);
})
.on('error', function(error) {
console.log("error ffmpeg", error);
})
.on('end', function() {
console.log('exchanged end ffmpeg');
}).pipe();
ffmpegStream.on('data', (chunk) => {
// console.log(chunk.length, chunk);
// console.log("get the flv data", chunk.length, chunk[0], chunk[1], chunk[2]);
ws.send(chunk);
}).on('end', () => {
console.log("ffmpeg pipe end");
});
}
});
编程小白,如有不足之处,请在评论区指出,不胜感激。