摄像头 rtsp 流转成 ws 使前端播放
萌新小秃头 2024-06-25 09:33:04 阅读 74
前言:
前端是不能直接播放 rtsp 流的,必须通过后端转成前端支持的形式,这里是转成Websocket
1、使用 Node.js 开启一个新进程 把 rtsp 转成 MPEG1 形式 再通过Websocket传输
使用node-rtsp-stream 链接:node-rtsp-stream - npm
const Stream = require("node-rtsp-stream")
new Stream({
name: "测试",
streamUrl: "rtsp://rtsp流地址",
wsPort: 8080,//端口号
// ffmpeg 的一些配置参数,比如转换分辨率等,大家可以去 ffmpeg 官网自行查询
ffmpegOptions: {
"-stats": "",
"-r": 20,
"-s": "1280 720", // 分辨率
},
})
注意:必须在服务器机器上(开启node.js的电脑)安装ffmpeg
2、客户端使用 @cycjimmy/jsmpeg-player 来实现获取流,也可以自己连Websocket
这里我简单的封装了一下使用的方法 链接:@cycjimmy/jsmpeg-player - npm
import JSMpeg from '@cycjimmy/jsmpeg-player';
import { PlayerWebsocket } from "./下面的Class"
// 第一个参数是 Div 的ID或者类名 第二个参数是 Ws 的地址
new PlayerWebsocket('#WebpackDom', 'ws的地址');
PlayerWebsocket 类
class PlayerWebsocket {
/**********************************
* 变量s
***********************************/
private m_VideoParentDom: Element | null;
private m_VideoDom!: HTMLCanvasElement;
private m_VideoSrc: string;
private m_JSMpeg: any;
/**********************************
* 方法s
***********************************/
constructor(videoParentDom: Element | string, src: string) {
super();
if (videoParentDom instanceof Element) {
this.m_VideoParentDom = videoParentDom;
} else if (typeof videoParentDom === 'string') {
let dom = document.querySelector(videoParentDom);
dom ? (this.m_VideoParentDom = dom) : (this.m_VideoParentDom = null);
} else {
this.m_VideoParentDom = null;
}
this.m_VideoSrc = src;
this.init();
}
play() {
this.m_JSMpeg.play();
}
pause() {
this.m_JSMpeg.pause();
}
stop() {
this.m_JSMpeg.stop();
}
destroy() {
this.m_JSMpeg.destroy();
this.m_VideoDom?.remove();
}
upDataSrc(src: string) {
this.destroy();
this.m_VideoSrc = src;
this.init();
}
protected init() {
if (!this.m_VideoParentDom) return;
this.m_VideoDom = document.createElement('canvas');
this.m_VideoParentDom.appendChild(this.m_VideoDom);
this.m_VideoDom.style.width = '100%';
this.m_VideoDom.style.height = '100%';
this.m_JSMpeg = new JSMpeg.Player(this.m_VideoSrc, {
canvas: this.m_VideoDom,
});
}
}
3、好吧其实已经好了 兄弟们直接CV就行
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。