网上有把rtsp流通过websocket发送到前端的方法,就是用rtspStream,具体代码如下:
var stream = require('node-rtsp-stream')
stream = new stream({
服务器托管网 name: 'name',
streamUrl: 'rtsp://xxxxx',
wsPort: 9999,
})
我们还需要给视频加上水印,比如我需要给视频进行画框,可以采用ffmpeg来进行画框
ffmpeg的代码如下
ffmpeg -i ${rtspUrl} -vf "drawbox=${watermarkX}:${watermarkY}:${watermarkWidth}:${watermarkHeight}:red@0.5"
你可以使用ffplay试播放一下
ffplay -i ${rtspUrl} -vf "drawbox=${watermarkX}:${watermarkY}:${watermarkWidth}:${watermarkHeight}:red@0.5"
但是如果将ffmpeg的这个代码推至留一个rtsp流中就会报错,而且报错没有报错信息,只有一些奇怪的东西报错上来(目前还不知道原因,如果知道了原因会补上)
ffmpeg -i ${rtspUrl} -vf "drawbox=${watermarkX}:${watermarkY}:${watermarkWidth}:${watermarkHeight}:red@0.5" -f rtsp rtsp://localhost:8554/output
stderr: Input #0, rtsp, from ‘rtsp://admin:shuju12345@192.168.120.201:554/Streaming/Channels/101’:
Metadata:
title : Media Presentation
Duration: N/A, start: 0.040000, bitrate: N/Astderr: Stream #0:0: Video: hevc (Main), yuv420p(tv), 1920×1080, 25 fps, 25 tbr, 90k tbn
stderr: Stream mapping:
Stream #0:0 -> #0:0 (hevc (native) -> mpeg4 (native))
后来在网上找了很多办法,最后发现可以在rtspstream里面使用ffmpeg,不用再新建一条rtsp流,代码如下:
stream = new stream({
name: 'name',
streamUrl: 'rtsp://xxx',
wsPort: 9999,
ffmpegOptions: { // options ffmpeg flags
'-stats': '', // 没有必要值的选项使用空字符串
'-vf': `drawbox=${watermarkX}:${watermarkY}:${watermarkWidth}:${watermarkHeight}:red@0.5`,
'-s': '19服务器托管网20*1080', // 视频窗口大小 1920*1080 或 2560*1920
'-r': 25, // 视频帧率
}
})
这样就可以在传输的过程中直接绘制图形。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net