前端使用rtsp視頻流接入??低晹z像頭的具體步驟
前言
在純前端(Vue 2)中直接通過 RTSP 協(xié)議接入??低晹z像頭是不可行的,因為:
- 瀏覽器限制:現(xiàn)代瀏覽器(Chrome、Firefox等)不支持直接播放 RTSP 流(基于 TCP/UDP 的協(xié)議)。
- 安全策略:瀏覽器通常禁止直接訪問本地網(wǎng)絡(luò)設(shè)備(如攝像頭)。
可行的前端解決方案
需要借助中轉(zhuǎn)服務(wù)將 RTSP 轉(zhuǎn)成瀏覽器支持的格式(如 HLS、WebRTC 或 FLV)。以下是具體實現(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)碼選項
'-stats': '',
'-r': 30,
'-f': 'flv',
},
});
注意:
streamUrl格式通常為:rtsp://[用戶名]:[密碼]@[IP地址]:[端口]/Streaming/Channels/[通道號]
??的J端口554,通道號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', // 對應 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 實時流(更復雜,需后端支持)
使用 WebRTC(如 Janus Gateway 或 Mediasoup)實現(xiàn)低延遲播放,但需要額外搭建信令服務(wù)器。
???RTSP 地址格式
海康威視攝像頭的 RTSP URL 通常為:
rtsp://[用戶名]:[密碼]@[IP地址]:[端口]/Streaming/Channels/[通道號]
- 主碼流:
/Streaming/Channels/101 - 子碼流:
/Streaming/Channels/102(低分辨率) - 默認用戶名/密碼:
admin+ 設(shè)備背面密碼
總結(jié)
| 方案 | 技術(shù) | 延遲 | 適用場景 |
|---|---|---|---|
| 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
如果有后端支持,可進一步優(yōu)化(如鑒權(quán)、CDN 分發(fā))。
到此這篇關(guān)于前端使用rtsp視頻流接入??低晹z像頭的文章就介紹到這了,更多相關(guān)前端接入??低晹z像頭內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue3結(jié)合TypeScript項目開發(fā)實戰(zhàn)記錄
聽說有的公司已經(jīng)開始用vue3了 趕緊打開B站學一下,下面這篇文章主要給大家介紹了關(guān)于Vue3結(jié)合TypeScript項目開發(fā)實戰(zhàn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下2021-09-09
Vue服務(wù)端渲染實踐之Web應用首屏耗時最優(yōu)化方案
這篇文章主要介紹了Vue服務(wù)端渲染實踐之Web應用首屏耗時最優(yōu)化方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-03-03
vue中用js如何實現(xiàn)循環(huán)可編輯表格
這篇文章主要介紹了vue中用js如何實現(xiàn)循環(huán)可編輯表格,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09
vue實現(xiàn)分環(huán)境打包步驟(給不同的環(huán)境配置相對應的打包命令)
這篇文章主要介紹了vue實現(xiàn)分環(huán)境打包步驟(給不同的環(huán)境配置相對應的打包命令),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-06-06

