web端播放flv視頻流demo(flv.js的使用)

需求:原本是需要前端播放RTMP視頻流的,但是現在的瀏覽器都不支持flash插件了,讓用戶安裝flash插件也不現實,所以直接讓后端將RTMP視頻流轉換成flv視頻流給到前端進行播放。

直接上demo,直接就能播放,如果遇到播放不了就是視頻流地址已失效

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>video.js播放FLV</title><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/4.6.1/css/bootstrap.min.css" /><link href="https://cdn.bootcdn.net/ajax/libs/video.js/7.21.0/video-js.min.css" rel="stylesheet"><style>/*剩余時長*/.video-js .vjs-remaining-time {margin-right: 7%;}/*截圖按鈕*/.screenshotBtn {position: absolute;top: 6px;right: 54px;}</style>
</head><body><div class="row"><div class="videoWarp col-md-4" id="videoWarp1"><video id="video1" class="video-js vjs-big-play-centered vjs-fluid" controls controlslist="nodownload"preload="auto" crossOrigin="Anonymous"></video></div></div><script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/4.6.1/js/bootstrap.min.js"></script><script src="https://cdn.bootcdn.net/ajax/libs/video.js/7.21.0/video.min.js"></script><script src="https://unpkg.com/videojs-flvjs/dist/videojs-flvjs.min.js"></script><script src="https://unpkg.com/flv.js/dist/flv.min.js"></script><script src="https://www.webrtc-experiment.com/screenshot.js"></script><script type="text/javascript">let videoUrlFLV = 'https://sf1-cdn-tos.huoshanstatic.com/obj/media-fe/xgplayer_doc_video/flv/xgplayer-demo-360p.flv';let videoPlayer = null;initVideoJS('video1', 'flvjs', videoUrlFLV);// 初始化Videojs插件function initVideoJS(vid, vtype, vurl) {let vSourceType = '';if (vtype === 'flvjs') {            //flv格式vSourceType = 'video/x-flv';} else {        //其它格式alert('Video Type Error ...');}videoPlayer = videojs(vid, {autoplay: true,        //自動播放controls: true,        //用戶可以與之交互的控件loop: true,            //視頻一結束就重新開始muted: true,           //默認情況下將使所有音頻靜音aspectRatio: '16:9',   //顯示比率disablePictureInPicture: true,    //禁用畫中畫techOrder: [vtype],    //['HTML5',''flvjs'] 播放模式及順序preload: "auto",           //預加載playsinline: true,  //解決在iPhone中播放時自動全屏問題controlBar: { // 設置控制條組件/* 設置控制條里面組件的相關屬性及顯示與否  */'remainingTimeDisplay': true,/* 使用children的形式可以控制每一個控件的位置,以及顯示與否 */children: [{ name: 'playToggle' },                // 播放/暫停按鈕{name: 'volumePanel',               // 音量控制inline: false,                             // 豎直方式},{ name: 'liveDisplay' },                    //直播流時,顯示LIVE{ name: 'progressControl' },            // 播放進度條{ name: 'remainingTimeDisplay' },    // 剩余時長{ name: 'FullscreenToggle' },            // 全屏]},flvjs: {mediaDataSource: {isLive: true,cors: true,withCredentials: false,},},sources: [{ src: vurl, type: vSourceType }],}, function () {});setTimeout(() => {videoPlayer.play();addScreenshotBtnHandle()}, 500)}//視頻區域禁用右鍵$("#video1").bind('contextmenu', function () {return false;});// 添加截圖按鈕function addScreenshotBtnHandle(params) {$('.vjs-control-bar').append("<div class='screenshotBtn'><svg t='1619515761104' class='icon' viewBox='0 0 1024 1024' version='1.1' xmlns='http://www.w3.org/2000/svg' p-id='11028' width='15' height='15'><path d='M512 384c55.6 0 107.8 21.6 147.1 60.9S720 536.4 720 592s-21.6 107.8-60.9 147.1S567.6 800 512 800s-107.8-21.6-147.1-60.9S304 647.6 304 592s21.6-107.8 60.9-147.1S456.4 384 512 384z m0-64c-150.2 0-272 121.8-272 272s121.8 272 272 272 272-121.8 272-272-121.8-272-272-272z' p-id='11029' fill='#ffffff'></path><path d='M650.9 128l4.4 23.6C666.7 212.1 719.6 256 781.1 256H896c35.3 0 64 28.7 64 64v512c0 35.3-28.7 64-64 64H128c-35.3 0-64-28.7-64-64V320c0-35.3 28.7-64 64-64h114.9c61.6 0 114.5-43.9 125.8-104.4l4.4-23.6h277.8z m39.8-64H333.3c-7.7 0-14.3 5.5-15.7 13.1l-11.8 62.7c-5.7 30.3-32.1 52.2-62.9 52.2H128C57.3 192 0 249.3 0 320v512c0 70.7 57.3 128 128 128h768c70.7 0 128-57.3 128-128V320c0-70.7-57.3-128-128-128H781.1c-30.8 0-57.2-21.9-62.9-52.2l-11.8-62.7c-1.4-7.6-8-13.1-15.7-13.1z' p-id='11030' fill='#ffffff'></path><path d='M224 352h-64c-17.7 0-32-14.3-32-32s14.3-32 32-32h64c17.7 0 32 14.3 32 32s-14.3 32-32 32zM512 560c17.6 0 32 14.4 32 32s-14.4 32-32 32-32-14.4-32-32 14.4-32 32-32z m0-64c-53 0-96 43-96 96s43 96 96 96 96-43 96-96-43-96-96-96z' p-id='11031' fill='#ffffff'>")}// 截圖按鈕點擊事件$(document).on('click', '.screenshotBtn', function () {const fileType = 'png';// 找到需要截圖的video標簽const video = $(this).parent().siblings("video")[0];//console.log(video);video.crossOrigin = "anonymous";const canvas = document.createElement('canvas');canvas.width = video.videoWidth;canvas.height = video.videoHeight;canvas.getContext('2d').drawImage(video, 0, 0, canvas.width, canvas.height);    // 圖片大小和視頻分辨率一致const strDataURL = canvas.toDataURL('image/' + fileType);            // canvas中video中取一幀圖片并轉成dataURLlet arr = strDataURL.split(','),mime = arr[0].match(/:(.*?);/)[1],bstr = atob(arr[1]),n = bstr.length,u8arr = new Uint8Array(n)while (n--) {u8arr[n] = bstr.charCodeAt(n)}const blob = new Blob([u8arr], {type: mime})const url = window.URL.createObjectURL(blob);downloadFile(url, 'png')})// 下載截圖function downloadFile(blob, fileType) {const a = document.createElement('a')a.style.display = 'none'a.href = blobconst time = new Date().getTime()a.download = `${time}.${fileType}`document.body.appendChild(a)a.click()setTimeout(function () {document.body.removeChild(a)window.URL.revokeObjectURL(blob)}, 1000)}</script>

用于測試的視頻流地址,不一定有效

直播流在線測試地址 m3u8,rtsp,rtmp,flv,mp4_直播測試地址-CSDN博客

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

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

相關文章

【拍攝學習記錄】04-拍攝模式/曝光組合

曝光組合全自動半自動光圈優先手動擋【固定物體長時間不變時候、閃光燈時候、】手機上的光學變焦與數碼變焦是不同的&#xff0c;使用檔位推薦可以提升畫質。手機夜景模式長曝光【車流軌跡、星軌】HDR 大光比【日落時候使用】專業模式&#xff0c;【感光度iso、快門可以調節】…

新liunx部署mysql過程問題

首先看下是什么發行版 cat /etc/os-release CentOS Linux 7 ################################## 使用 yum下載包 發現不行 源不行 那就換成阿里的 # 進入 yum 源配置目錄 cd /etc/yum.repos.d/ # 備份所有默認 repo 文件&#xff08;以 CentOS 為例&#xff0c;其他系統…

Python 第三方庫:Beautiful Soup(HTML/XML 解釋提取)

Beautiful Soup 是一個 用于從 HTML 和 XML 文件中提取數據的 Python 第三方庫。它為復雜的網頁結構提供了簡單易用的解析接口&#xff0c;尤其適合網頁爬蟲和數據提取任務。Beautiful Soup 提供樹型結構訪問、標簽搜索、屬性提取等功能&#xff0c;并支持多種解析器&#xff0…

使用STM32CubeMX使用CAN驅動無刷電機DJI3508

簡介 文章為筆記性質 硬件包括 大疆C板 電機調速器C620 DJI3508電機 CAN知識介紹 CAN的概念 CAN是控制器區域網絡&#xff08;Controller Area Network&#xff09;的縮寫。CAN總線是一種適用于工業設備的高性能總線網絡。說白了就是也就是一種通訊方式而已。 把多個設…

Wi-Fi 802.11s自組網/EasyMesh自組網/802.11ah物聯網

一、前期調研結論 前面詳細探討了自組網和5G無線通信網絡、WiFi無線通信網絡的差異&#xff1a; 自組網 v.s 5G v.s WiFi-CSDN博客 從“分級道路”角度理解無線通信網絡拓撲包括從當前工業應用場景具體案例了解終端無線通信網絡&#xff1a; 5G無線通信網絡場景&#xff08;…

【基于hyperledger fabric的教育證書管理系統】

教育證書管理系統 系統概述 項目背景 隨著數字化轉型的深入推進&#xff0c;教育證書作為個人學術成就和專業資質的重要憑證&#xff0c;在就業市場、高等教育和職業發展中扮演著關鍵角色。然而&#xff0c;傳統教育證書管理體系面臨著數據孤島、證書偽造、驗證流程繁瑣以及跨機…

【Flask】測試平臺開發,集成禪道

概述&#xff1a; 由于公司多數測試人員還是在使用禪道&#xff0c;為了方便&#xff0c;就將禪道直接集成在我們的測試平臺中 一般可以有幾種實現方法 調用禪道的API集成集成本地部署的禪道-可能有跨域問題&#xff0c;需要解決 由于我這里已經部署了一臺本地的禪道系統&…

《UE5_C++多人TPS完整教程》學習筆記45 ——《P46 待機與跳躍(Idle And Jumps)》

本文為B站系列教學視頻 《UE5_C多人TPS完整教程》 —— 《P46 待機與跳躍&#xff08;Idle And Jumps&#xff09;》 的學習筆記&#xff0c;該系列教學視頻為計算機工程師、程序員、游戲開發者、作家&#xff08;Engineer, Programmer, Game Developer, Author&#xff09; St…

用html+js下拉菜單的demo,當鼠標點擊后展開,鼠標點擊別的地方后折疊

使用html js實現下拉菜單demo&#xff0c;因為copy的網站菜單功能失效&#xff0c;就需要自己寫一個邏輯&#xff0c;點擊其他區域折疊菜單&#xff0c;可以參考&#xff1a;<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF…

OpenCV 核心技術:顏色檢測與幾何變換實戰

在計算機視覺任務中&#xff0c;顏色空間轉換和圖像幾何變換是兩大基礎且高頻的操作 —— 前者用于精準分割特定顏色目標&#xff08;如交通信號燈、物體追蹤&#xff09;&#xff0c;后者用于調整圖像的尺寸、位置和視角&#xff08;如文檔矯正、圖像拼接&#xff09;。本文將…

[HFCTF2020]EasyLogin

文章目錄TRYWP總結TRY 注冊admin報錯username wrong。 隨便注冊一個用戶點擊GetFlag&#xff0c;permission deny。 猜測可能是需要admin權限。 看cookie發現有&#xff1a; sses:aok&#xff1a;eyJ1c2VybmFtZSI6ImEiLCJfZXhwaXJlIjoxNzU2NDU1NjczMTAxLCJfbWF4QWdlIjo4NjQwM…

Java接口和抽象類的區別,并舉例說明

Java接口和抽象類是面向對象編程中實現抽象的兩種機制&#xff0c;它們在語法、設計目的和使用場景上有顯著區別&#xff1a;一、核心區別?定義方式?抽象類&#xff1a;使用abstract class聲明&#xff0c;可包含抽象方法和具體方法45。接口&#xff1a;使用interface聲明&am…

docker-相關筆記

1: 導入鏡像 docker load -i myimage.tar# 導出鏡像 docker save myimage:latest > myimage.tar # 導入鏡像 docker load -i myimage.tardocker load -i <文件> 功能&#xff1a;用于導入通過 docker save 命令導出的鏡像歸檔文件&#xff08;通常是 .tar 格式&#…

自然語言提取PDF表格數據

自然語言提取PDF表格數據PDF v8.2的文檔解決方案與OpenAI實現了無縫的AI集成&#xff0c;可將非結構化PDF轉換為可用數據。MESCIUS 推出的 PDF 文檔解決方案 (DsPdf) 是一款軟件開發工具包&#xff0c;它提供了 .NET Core 庫和一個 JavaScript PDF 查看器&#xff0c;用于處理和…

飛牛Nas每天定時加密數據備份到網盤,基于restic的Backrest筆記分享

1. 前言 受前輩“RAID≠備份”的經驗&#xff0c;也考慮到硬盤故障時 RAID 重建步驟繁瑣&#xff0c;我干脆放棄陣列&#xff0c;直接單盤運行。 重要數據則加密后上傳至大廠云盤&#xff1a;一方面文件對外不可讀&#xff0c;規避掃描和諧&#xff1b;另一方面依靠大廠的數據安…

C#連接SQL-Server數據庫超詳細講解以及防SQL注入

C#連接SQL Server數據庫完整指南&#xff0c;整合了ADO.NET原生連接與Entity Framework Core兩種實現方式。這篇文件詳細介紹C#代碼連接數據庫的通用操作數據庫鏈接功能 數據庫的增刪改查操作1 配置全局數據庫鏈接字符串 App.config2 獲取數據庫鏈接字符串先在App.config配置連…

Pico2?ICE FPGA 開發板:從開箱到跑通示例的全歷程

FPGA 和 MCU 結合的開發板不多&#xff0c;而 Pico2?ICE 則把小巧、靈活和易上手完美結合。搭載 RP2350 雙核 RISC-V MCU Lattice iCE40UP5K FPGA&#xff0c;配合官方 SDK&#xff0c;你可以一步步跑通各種示例&#xff0c;從 LED 到 VGA&#xff0c;再到 MCU 與 FPGA 協作應…

Java圖形圖像處理【Swing圖像拖拽】【五】

Java圖形圖像處理【Swing圖像拖拽】 18.3.3 Swing圖像對象拖拽功能 18.3.3 Swing圖像對象拖拽功能 上文討論的是java.awt.dnd包中提供的拖拽API接口&#xff0c;也可稱之為AWT組件的拖拽功能。下面我們要討論的是Swing框架的拖拽功能&#xff1a;Swing組件也提供了對拖拽功能的…

狀態模式與幾個經典的C++例子

1. 狀態模式定義與核心思想 狀態模式解決的是當控制一個對象狀態轉換的條件表達式過于復雜時的情況。通過將狀態的判斷邏輯轉移到表示不同狀態的一系列類中,可以把復雜的判斷邏輯簡化。 核心思想: 狀態抽象:將對象的每個狀態都封裝到一個獨立的類中。 委托代替條件判斷:…

SyncBackPro 備份及同步軟件中的腳本功能簡介

腳本提供了一種靈活而簡單的方法來自動執行任務和擴展應用程序的功能。腳本是一個小程序&#xff0c;能夠自定義和控制備份作業。例如&#xff0c;用戶可以編寫腳本來復制、重命名或刪除特定文件、自定義用戶界面或更改配置文件設置。SyncBackPro 的腳本功能類似于 Microsoft O…