前端播放RTSP視頻流,使用FLV請求RTSP視頻流播放(Vue項目,在Vue中使用插件flv.js請求RTSP視頻流播放)

簡述:在瀏覽器中請求 RTSP 視頻流并進行播放時,直接使用原生的瀏覽器 API 是行不通的,因為它們不支持 RTSP 協議。為了解決這個問題,開發者通常會選擇使用像 flv.js 這樣的庫,它專為在瀏覽器中播放 FLV 和其他流媒體格式設計。然而,flv.js 本身并不直接支持 RTSP,這意味著我們需要一個額外的步驟來橋接 RTSP 和 flv.js。這里來記錄一下


詳細介紹:

  1. 在 Vue 中使用 flv.js 插件播放 RTSP 視頻流的主要原因是瀏覽器原生的 <video> 標簽并不直接支持 RTSP 協議,也不支持 FLV 容器格式。
  2. FLV 是一種流行的流媒體容器格式,主要用于在線視頻播放,而 RTSP 是一種用于控制實時流媒體會話的網絡協議。
  3. flv.js 是一個開源的 JavaScript 庫,它可以用于在現代瀏覽器中播放 FLV 格式的視頻流,同時它也支持 HLS (HTTP Live Streaming) 和 DASH (Dynamic Adaptive Streaming over HTTP)。
  4. flv.js 能夠在瀏覽器環境中解碼和播放 FLV 流,這是因為 flv.js 內部實現了對 FLV 文件結構的理解和相應的解碼邏輯。
  5. 當要在 Vue 中播放 RTSP 視頻流時,一般需要先將 RTSP 流轉換成瀏覽器能夠理解的格式,比如 FLV 或者 HLS。這個轉換過程通常發生在服務器端或者使用某種流媒體服務器軟件(如 FFmpeg、SRS、Nginx RTMP 等)。轉換后的流可以通過 HTTP 協議發送到客戶端,這樣 flv.js 就可以接收并解碼這些流了。
  6. flv.js 并不直接支持 RTSP 協議,所以仍然需要一個中間層來將 RTSP 轉換成 FLV 或其他 flv.js 支持的格式。這就是為什么在 Vue 中使用 flv.js 插件播放 RTSP 視頻流時,你不能直接請求 RTSP 地址的原因。

FLV特性:

  • 跨平臺兼容性:flv.js 支持多種瀏覽器,包括 Chrome, Firefox, Safari, IE11 和 Edge。
  • 硬件加速:flv.js 可以利用瀏覽器的硬件加速功能,提高播放效率。
  • 低開銷:flv.js 的設計考慮到了性能和資源消耗,可以有效管理內存和 CPU 使用。
  • 適應性:flv.js 支持自適應比特率流,可以根據網絡狀況自動調整視頻質量。


一. 首先,看下需要請求的API接口類型

http://localhost/dev-api/res/getVideo
+
rtsp://192.168.0.77:8554/Media/tingchhttp://localhost/dev-api/res/getVideo?path=rtsp://192.168.0.77:8554/Media/tingch

二. 安裝插件

npm i flv.js
//或者
cnpm i flv.js

三. HTML

//定義一個 HTML 視頻元素
<videoid="video_label1"controlsautoplaymuted@fullscreenchange="choseFullScreenChange"
></video>//屬性介紹
id="video_label1"               視頻元素的唯一標識符
controls                        顯示視頻控件(播放、暫停、音量等)
autoplay                        頁面加載時自動播放視頻
muted                           靜音播放視頻
@fullscreenchange="choseFullScreenChange" 
監聽全屏狀態變化事件,觸發 choseFullScreenChange 方法 

四. 請求播放函數

// 這里的flvPlayer為null
flvPlayer: null,// 引入 FLV.js 庫
import flvjs from "flv.js"; callvideoDserveJudge(ulr) {// console.log(ulr);// 這里的url就是API后面拼接的RTSP視頻流地址,rtsp://192.168.0.77:8554/Media/tingch// 檢查當前環境是否支持 FLV.jsif (flvjs.isSupported()) {// 選擇用于播放視頻的 HTML 元素var videoElement = document.querySelector("#video_label1");// console.log(videoElement);// 創建 FLV 播放器實例this.flvPlayer = flvjs.createPlayer({type: "flv", // 設置視頻類型為 FLVisLive: true, // 指定這是直播流hasAudio: false, // 指定視頻流中沒有音頻// 拼接視頻流的 URLurl: process.env.VUE_APP_BASE_API + "/res/getVideo?path=" + ulr, });// 將播放器綁定到 HTML 視頻元素this.flvPlayer.attachMediaElement(videoElement);// 加載視頻流this.flvPlayer.load();// 播放視頻this.flvPlayer.play();}
}

五. 點擊全屏函數

// 處理全屏變化的函數
choseFullScreenChange() {// 檢查當前是否處于全屏模式const isFullScreen =document.fullscreenElement ||              // 標準全屏 APIdocument.webkitFullscreenElement ||        // WebKit 內核瀏覽器全屏 APIdocument.mozFullScreenElement ||           // Firefox 全屏 APIdocument.msFullscreenElement;              // IE/Edge 全屏 APIif (isFullScreen) {// 如果當前處于全屏模式console.log("進入全屏模式");// 在進入全屏時執行的邏輯// this.$store.commit("IsStopFn", false);} else {// 如果當前不處于全屏模式console.log("退出全屏模式");// 在退出全屏時執行的邏輯// this.$store.commit("IsStopFn", true);}},

六. 點擊刪除函數

// 刪除視頻播放實例的函數
deleteVideo(flvPlayer) {// 這里的flvPlayer就是this.flvPlayer;// console.log(flvPlayer)if (flvPlayer) {// 暫停視頻播放flvPlayer.pause();// 卸載視頻流,釋放內存flvPlayer.unload();// 解除視頻元素和播放器的綁定flvPlayer.detachMediaElement();// 銷毀 FLV 播放器實例flvPlayer.destroy();// 將 flvPlayer 置為 null,避免內存泄漏flvPlayer = null;}},

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/40117.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/40117.shtml
英文地址,請注明出處:http://en.pswp.cn/web/40117.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySQL 代理層:ProxySQL

文章目錄 說明安裝部署1.1 yum 安裝1.2 啟停管理1.3 查詢版本1.4 Admin 管理接口 入門體驗功能介紹3.1 多層次配置系統 讀寫分離將實例接入到代理服務定義主機組之間的復制關系配置路由規則事務讀的配置延遲閾值和請求轉發 ProxySQL 核心表mysql_usersmysql_serversmysql_repli…

Java實現日志全鏈路追蹤.精確到一次請求的全部流程

廣大程序員在排除線上問題時,會經常遇見各種BUG.處理這些BUG的時候日志就格外的重要.只有完善的日志才能快速有效的定位問題.為了提高BUG處理效率.我決定在日志上面優化.實現每次請求有統一的id.通過id能獲取當前接口的全鏈路流程走向. 實現效果如下: 一次查詢即可找到所有關…

自定義一個背景圖片的高度,隨著容器高度的變化而變化,小于圖片的高度時裁剪,大于時拉伸100%展示

1、通過js創建<image?>標簽來獲取背景圖片的寬高比&#xff1b; 2、當元素的高度大于原有比例計算出來的高度時&#xff0c;背景圖片的高度拉伸自適應100%&#xff0c;否則高度為auto&#xff0c;會自動被裁減 3、背景圖片容器高度變化時&#xff0c;自動計算背景圖片的…

Android network - NUD檢測機制(Android 14)

Android network - NUD檢測機制 1. 前言2. 源碼分析2.1 ClientModeImpl2.2 IpClient2.3 IpReachabilityMonitor 1. 前言 在Android系統中&#xff0c;NUD&#xff08;Neighbor Unreachable Detection&#xff09;指的是網絡中的鄰居不可達檢測機制&#xff0c;它用于檢測設備是…

數據驅動測試實踐:Postman 中使用數據文件的指南

Postman 是一個強大的 API 開發和測試工具&#xff0c;它支持數據驅動測試&#xff0c;允許測試者使用外部數據文件來驅動測試&#xff0c;實現測試用例的參數化。數據驅動測試可以顯著提高測試效率&#xff0c;減少重復工作&#xff0c;并允許測試用例覆蓋更廣泛的輸入場景。本…

一文了解常見DNS問題

當企業的DNS出現故障時&#xff0c;為不影響企業的正常運行&#xff0c;團隊需要能夠快速確定問題的性質和范圍。那么有哪些常見的DNS問題呢&#xff1f; 域名解析失敗&#xff1a; 當您輸入一個域名&#xff0c;但無法獲取到與之對應的IP地址&#xff0c;導致無法訪問相應的網…

【代碼隨想錄算法訓練營第五十九天|卡碼網110.字符串接龍、105.有向圖的完全可達性、106.島嶼的周長】

文章目錄 卡碼網110.字符串接龍105.有向圖的完全可達性106.島嶼的周長 卡碼網110.字符串接龍 這題是在字符串上進行廣搜&#xff0c;字符串廣搜是對一個字符串按照位置來搜索&#xff0c;與原字符串只有一個位置字符不同那么就是在原字符串的基礎上距離加1。因此需要一個字典來…

獲取VC賬號,是成為亞馬遜供應商的全面準備與必要條件

成為亞馬遜的供應商&#xff0c;擁有VC&#xff08;Vendor Central&#xff09;賬號&#xff0c;是眾多制造商和品牌所有者的共同目標。這不僅代表了亞馬遜對供應商的高度認可&#xff0c;也意味著獲得了更多的銷售機會和更廣闊的市場前景。 全面準備與必要條件是獲取VC賬號的關…

代碼轉換成AST語法樹移除無用代碼console.log、import

公司中代碼存在大量,因此產生 可以使用 @babel/parser 解析代碼生成 AST (抽象語法樹),然后使用 @babel/traverse 進行遍歷并刪除所有的 console.log 語句,最后使用 @babel/generator 生成修改后的代碼。 這里有一個網址,可以線上解析代碼轉換成AST語法樹: https://astex…

Python爬蟲康復訓練——筆趣閣《神魂至尊》

還是話不多說&#xff0c;很久沒寫爬蟲了&#xff0c;來個bs4康復訓練爬蟲&#xff0c;正好我最近在看《神魂至尊》&#xff0c;爬個txt文件下來看看 直接上代碼 """ 神魂至尊網址-https://www.bqgui.cc/book/1519/ """ import requests from b…

【C++】 解決 C++ 語言報錯:未定義行為(Undefined Behavior)

文章目錄 引言 未定義行為&#xff08;Undefined Behavior, UB&#xff09;是 C 編程中非常危險且難以調試的錯誤之一。未定義行為發生時&#xff0c;程序可能表現出不可預測的行為&#xff0c;導致程序崩潰、安全漏洞甚至硬件損壞。本文將深入探討未定義行為的成因、檢測方法…

零基礎STM32單片機編程入門(七)定時器PWM波輸出實戰含源碼視頻

文章目錄 一.概要二.PWM產生框架圖三.CubeMX配置一個TIME輸出1KHZ&#xff0c;占空比50%PWM波例程1.硬件準備2.創建工程3.測量波形結果 四.CubeMX工程源代碼下載五.講解視頻鏈接地址六.小結 一.概要 脈沖寬度調制(PWM)&#xff0c;是英文“Pulse Width Modulation”的縮寫&…

通過營銷本地化解鎖全球市場

在一個日益互聯的世界里&#xff0c;企業必須接觸到全球各地的不同受眾。營銷本地化是打開這些全球市場的關鍵。它包括調整營銷材料&#xff0c;使其與不同地區的文化和語言細微差別產生共鳴。以下是有效的營銷本地化如何推動您的全球擴張&#xff0c;并用實際例子來說明每一點…

UrbanGPT: Spatio-Temporal Large Language Models

1.文章信息 本次介紹的文章是2024年arxiv上一篇名為《UrbanGPT: Spatio-Temporal Large Language Models》的文章&#xff0c;UrbanGPT旨在解決城市環境中的時空預測問題&#xff0c;通過大語言模型&#xff08;LLM&#xff09;的強大泛化能力來應對數據稀缺的挑戰。 2.摘要 Ur…

SQLAlchemy批量操作數據

批量插入 session.bulk_insert_mappings(ModelClass, list(dict()))批量更新 session.bulk_update_mappings(ModelClass, list(dict())

Flutter的生命周期方法

Flutter的生命周期執行時機可以分為兩個主要部分&#xff1a;Flutter本身的組件生命周期&#xff08;widget生命周期&#xff09;和平臺相關的應用程序生命周期&#xff08;APP生命周期&#xff09;。 Widget生命周期 Widget生命周期可以細分為三個階段&#xff1a; 初始化階…

centos ssh一鍵升級到9.8版本腳本

背景 前端時間暴露出ssh漏洞&#xff0c;需要將服務器ssh版本&#xff0c;目前ssh版本最新版為9.8&#xff0c;故在服務器測試&#xff0c;準備將所有服務器ssh版本升級。腳本在centos7.6上親測可用。#!/bin/bash #Author Mr zhangECHO_GREEN() {echo -e "\033[32m $1...…

昇思MindSpore學習總結九——FCN語義分割

1、語義分割 圖像語義分割&#xff08;semantic segmentation&#xff09;是圖像處理和機器視覺技術中關于圖像理解的重要一環&#xff0c;AI領域中一個重要分支&#xff0c;常被應用于人臉識別、物體檢測、醫學影像、衛星圖像分析、自動駕駛感知等領域。 語義分割的目的是對圖…

【楚怡杯】職業院校技能大賽 “Python程序開發”賽項樣題三

Python程序開發實訓 &#xff08;時量&#xff1a;240分鐘&#xff09; 中國XX 實訓說明 注意事項 1. 請根據提供的實訓環境&#xff0c;檢查所列的硬件設備、軟件清單、材料清單是否齊全&#xff0c;計算機設備是否能正常使用。 2. 實訓結束前&#xff0c;在實訓平臺提供的…

從數據到智能,英智私有大模型助力企業實現數智化發展

在數字化時代&#xff0c;數據已經成為企業最重要的資源。如何將這些數據轉化為實際的業務價值&#xff0c;是每個企業面臨的重要課題。英智利用業界領先的清洗、訓練和微調技術&#xff0c;對企業數據進行深度挖掘和分析&#xff0c;定制符合企業業務場景的私有大模型&#xf…