前端使用rtsp視頻流接入??低晹z像頭的具體步驟
前言
在純前端(Vue 2)中直接通過 RTSP 協(xié)議接入??低晹z像頭是不可行的,因?yàn)椋?/p>
- 瀏覽器限制:現(xiàn)代瀏覽器(Chrome、Firefox等)不支持直接播放 RTSP 流(基于 TCP/UDP 的協(xié)議)。
- 安全策略:瀏覽器通常禁止直接訪問本地網(wǎng)絡(luò)設(shè)備(如攝像頭)。
可行的前端解決方案
需要借助中轉(zhuǎn)服務(wù)將 RTSP 轉(zhuǎn)成瀏覽器支持的格式(如 HLS、WebRTC 或 FLV)。以下是具體實(shí)現(xiàn)方案:
方案 1:RTSP → WebSocket + flv.js(推薦)
使用 FFmpeg 或 Node.js 中轉(zhuǎn)服務(wù) 將 RTSP 轉(zhuǎn)成 FLV,前端用 flv.js 播放。
步驟
1. 后端中轉(zhuǎn)服務(wù)(Node.js + FFmpeg)
安裝 node-rtsp-stream 或自行搭建轉(zhuǎn)流服務(wù):
npm install node-rtsp-stream
示例代碼(Node.js 服務(wù)端):
const NodeRTSPStream = require('node-rtsp-stream');
const stream = new NodeRTSPStream({
name: '??禂z像頭',
streamUrl: 'rtsp://admin:password@192.168.1.64:554/Streaming/Channels/101', // 海康 RTSP 地址
wsPort: 9999, // WebSocket 端口
ffmpegOptions: { // FFmpeg 轉(zhuǎn)碼選項(xiàng)
'-stats': '',
'-r': 30,
'-f': 'flv',
},
});
注意:
streamUrl格式通常為:rtsp://[用戶名]:[密碼]@[IP地址]:[端口]/Streaming/Channels/[通道號(hào)]
??的J(rèn)端口554,通道號(hào)101通常代表主碼流。
2. 前端 Vue 2 使用flv.js播放
安裝 flv.js:
npm install flv.js
Vue 組件示例:
<template>
<div>
<video ref="videoPlayer" controls autoplay muted width="800"></video>
</div>
</template>
<script>
import flvjs from 'flv.js';
export default {
mounted() {
this.initVideo();
},
methods: {
initVideo() {
if (flvjs.isSupported()) {
const videoElement = this.$refs.videoPlayer;
const flvPlayer = flvjs.createPlayer({
type: 'flv',
url: 'ws://localhost:9999', // 對(duì)應(yīng) Node.js 服務(wù)的 WebSocket
});
flvPlayer.attachMediaElement(videoElement);
flvPlayer.load();
flvPlayer.play();
}
},
},
beforeDestroy() {
if (this.flvPlayer) {
this.flvPlayer.destroy();
}
},
};
</script>
方案 2:RTSP → HLS(HTTP Live Streaming)
使用 FFmpeg 將 RTSP 轉(zhuǎn)成 HLS(.m3u8 + .ts),前端用 hls.js 播放。
步驟
1. FFmpeg 轉(zhuǎn)碼
ffmpeg -i "rtsp://admin:password@192.168.1.64:554/Streaming/Channels/101" \ -c:v libx264 -c:a aac -f hls \ -hls_time 2 -hls_list_size 3 -hls_flags delete_segments \ ./stream/stream.m3u8
2. 前端 Vue 使用hls.js
<template>
<video ref="videoPlayer" controls></video>
</template>
<script>
import Hls from 'hls.js';
export default {
mounted() {
const video = this.$refs.videoPlayer;
const hls = new Hls();
hls.loadSource('http://your-server/stream.m3u8');
hls.attachMedia(video);
hls.on(Hls.Events.MANIFEST_PARSED, () => {
video.play();
});
},
};
</script>
方案 3:WebRTC 實(shí)時(shí)流(更復(fù)雜,需后端支持)
使用 WebRTC(如 Janus Gateway 或 Mediasoup)實(shí)現(xiàn)低延遲播放,但需要額外搭建信令服務(wù)器。
???RTSP 地址格式
海康威視攝像頭的 RTSP URL 通常為:
rtsp://[用戶名]:[密碼]@[IP地址]:[端口]/Streaming/Channels/[通道號(hào)]
- 主碼流:
/Streaming/Channels/101 - 子碼流:
/Streaming/Channels/102(低分辨率) - 默認(rèn)用戶名/密碼:
admin+ 設(shè)備背面密碼
總結(jié)
| 方案 | 技術(shù) | 延遲 | 適用場(chǎng)景 |
|---|---|---|---|
| RTSP → WebSocket + flv.js | Node.js + FFmpeg | 2-5s | 局域網(wǎng)/內(nèi)網(wǎng) |
| RTSP → HLS | FFmpeg + hls.js | 10-30s | 錄播/高兼容 |
| WebRTC | Janus/Mediasoup | <1s | 超低延遲 |
推薦:
- 內(nèi)網(wǎng)/低延遲 → flv.js
- 公網(wǎng)/高兼容 → HLS
如果有后端支持,可進(jìn)一步優(yōu)化(如鑒權(quán)、CDN 分發(fā))。
到此這篇關(guān)于前端使用rtsp視頻流接入??低晹z像頭的文章就介紹到這了,更多相關(guān)前端接入??低晹z像頭內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
利用vue對(duì)比兩組數(shù)據(jù)差異的可視化組件詳解
這篇文章主要給大家介紹了關(guān)于利用vue對(duì)比兩組數(shù)據(jù)差異的可視化組件的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用vue具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2021-09-09
vite打包去除console.log和debugge的方法實(shí)踐
本文主要介紹了vite打包去除console.log和debugge的方法實(shí)踐,vite 已經(jīng)將這個(gè)功能內(nèi)置了,所以我們只需要修改配置文件,下面就來介紹一下如何修改2023-12-12
Vue利用Mixin輕松實(shí)現(xiàn)代碼復(fù)用
Mixin,中文翻譯為"混入",在Vue中是一種非常有用的功能,可以解決許多開發(fā)中的常見問題,下面就讓我們一起深入了解一下Mixin在Vue中解決了哪些問題吧2023-06-06
Vue項(xiàng)目如何在js文件里獲取路由參數(shù)及路由跳轉(zhuǎn)
日常業(yè)務(wù)中路由跳轉(zhuǎn)的同時(shí)傳遞參數(shù)是比較常見的,下面這篇文章主要給大家介紹了關(guān)于Vue項(xiàng)目如何在js文件里獲取路由參數(shù)及路由跳轉(zhuǎn)的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-01-01
在Vue3項(xiàng)目中集成CodeMirror創(chuàng)建SQL編輯器的方法詳解
在這篇文章中,我們將學(xué)習(xí)如何在 Vue 3 項(xiàng)目中集成 CodeMirror,以創(chuàng)建一個(gè)支持 SQL 語法高亮和自動(dòng)補(bǔ)全的代碼編輯器,需要的朋友可以參考下2025-04-04
基于Vue+element-ui 的Table二次封裝的實(shí)現(xiàn)
這篇文章主要介紹了基于Vue+element-ui 的Table二次封裝的實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-07-07
使用命令行工具npm新創(chuàng)建一個(gè)vue項(xiàng)目的方法
Vue.js 提供一個(gè)官方命令行工具,可用于快速搭建大型單頁應(yīng)用。下面小編給大家分享使用命令行工具npm新創(chuàng)建一個(gè)vue項(xiàng)目的方法,需要的朋友參考下吧2017-12-12

