三种方法实现在VUE前端播放海康摄像头的监控视频

本文介绍了如何在VUE前端实现海康摄像头监控视频的播放,包括使用opencv通过http协议拉流,ffmpeg结合srs流媒体服务器通过http或rtmp协议播放的方法。
摘要由CSDN通过智能技术生成

经过几天的努力成功将海康的视频流推到了VUE前端播放(ps:三种方法按照复杂程度排序,小白,仅个人经验)

三种方法:
1.opencv拉取流,使用http协议播放(python)
2.ffmpeg拉取流,使用http协议播放 (srs流媒体服务器)
3.ffmpeg拉取流,使用rtmp协议播放(srs流媒体服务器)

一、opencv拉取流

拉流端(python)(这也是一个博主的代码,但是没到那页博客了)

from flask import Flask, render_template, Response
import cv2
app = Flask(__name__)

class VideoCamera(object):
    def \_\_init\_\_(self):
        # 通过opencv获取实时视频流
        self.video = cv2.VideoCapture("rtsp://账号:密码@ip:554/Streaming/Channels/101")

    def \_\_del\_\_(self):
        self.video.release()

    def get\_frame(self):
        success, image = self.video.read()
        # 因为opencv读取的图片并非jpeg格式,因此要用motion JPEG模式需要先将图片转码成jpg格式图片
        ret, jpeg = cv2.imencode('.jpg', image)
        return jpeg.tobytes()

def ge
### 实现海康威视摄像头视频流播放 由于浏览器并不直接支持RTSP协议,因此无法通过简单的HTML5 `<video>`标签来播放来自海康威视摄像机的实时传输控制协议(RTSP)视频流[^1]。为了克服这一限制,在Vue项目中可以采用间接的方式处理这个问题。 #### 使用FFmpeg转换RTSP至HTTP-FLV/HLS 一种解决方案是利用FFmpeg工具将RTSP流转码成适合网页播放的形式,比如HTTP-FLV或HLS(HTTP Live Streaming),之后再借助于特定的JavaScript库如flv.js或者hls.js前端解析这些格式的数据并呈现给用户观看[^3]。 ```bash # 假设已经正确设置了ffmpeg环境变量,则可以通过命令行启动转码服务 ffmpeg -i rtsp://your_rtsp_stream_url -c:v libx264 -f flv http://localhost:8080/live/stream.flv ``` 对于上述操作中的`http://localhost:8080/`部分,可能需要额外设置一个Nginx服务器或者其他形式的服务端组件用于接收推流并向客户端提供拉流地址;而具体的实现细节取决于实际部署情况和个人偏好。 #### WebRTC方案 另一种更为现代的方法则是运用WebRTC技术栈内的webrtc-streamer开源软件来进行RTSP到WebRTC(SDP/WebSocket)之间的桥接工作。这种方式的优势在于它能够更好地适应网络状况变化,并且通常具有更低延迟特性,非常适合实现实时性强的应用场景需求。 一旦完成了从RTSP向兼容Web的标准媒体流类型的转变过程后,就可以考虑如何把这些数据嵌入到Vue应用程序当中去了: ##### 获取监控点资源列表与预览链接 根据API文档描述可知,存在两个主要接口分别用来获取设备列表以及对应每台设备的具体预览URL[^2]。前者返回的是关于各个在线监视位置的基础信息集合,后者则提供了可以直接访问的画面源路径——这正是后续构建播放器所必需的关键要素之一。 ```javascript // 示例代码片段:调用API取得指定ID号下的相机预览地址 axios.get('/api/video/v1/cameras/previewURLs', { params: { cameraId } }).then(response => { const previewUrl = response.data.previewURL; }); ``` ##### 创建自定义Video Player Component 最后一步就是创建一个新的Vue组件负责渲染最终可见的内容区域了。在这个过程中可能会涉及到引入第三方UI框架(例如Element UI)、注册全局事件监听器、绑定生命周期钩子函数等一系列常规开发任务。当然也别忘了要确保所有必要的样式表都已经加载完毕! ```html <template> <div class="player-container"> <!-- 这里放置实际使用的播放控件 --> <video id="myPlayer" controls></video> </div> </template> <script> export default { mounted() { this.initPlayer(); }, methods: { initPlayer() { let videoElm = document.getElementById('myPlayer'); // 根据之前获得的previewUrl初始化播放... if (/* 判断是否为HLS */) { var player = new Hls(); player.loadSource(/* HLS URL */); player.attachMedia(videoElm); } else if (/* 或者其他条件判断 */) { /* 处理不同类型的流 */ } // 开始播放 videoElm.play().catch(err => console.error(`Failed to play video: ${err}`)); } } } </script> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值