整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          瀏覽器播放rtsp視頻流解決方案

          近項目中需要實時播放攝像頭rtsp視頻流,于是就專門做了些研究。而瀏覽器不能直接播放,只有通過插件或者轉碼來實現這個需求。

          要實現這個目的,可以采用的方案非常得多,有商業的也有開源的,這里主要列舉一些開源的方案。這里的方案都是我嘗試過了的,有些成功,有些沒成功。但是因為每個項目情況不同,這次沒成的方法,換個項目也許就能成。

          方案一: html5 + websocket_rtsp_proxy 實現視頻流直播

          實現原理

          實現步驟

          1. 服務器安裝streamedian服務器
          2. 客戶端通過video標簽播放
          <video id="test_video" controls autoplay></video>
          
          <script src="free.player.1.8.4.js"></script>
          <script>
          
              if (window.Streamedian) {
                  var errHandler = function(err){
                      console.log('err', err.message);
                  };
          
                  var infHandler = function(inf) {
                      console.log('info', inf)
                  };
          
                  var playerOptions = {
                      socket: "ws://localhost:8088/ws/",
                      redirectNativeMediaErrors : true,
                      bufferDuration: 30,
                      errorHandler: errHandler,
                      infoHandler: infHandler
                  };
          
                  var html5Player  = document.getElementById("test_video");
                  html5Player.src = "rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov";
          
                  var player = Streamedian.player('test_video', playerOptions);
          
                  
                  window.onbeforeunload = function(){
                      player && player.destroy();
                      player = null;
                      Request = null;
                  }
              }
          </script>

          注意:測試時先從官網申請license key,否則socket 只能識別localhost和127.0.0.1

          優缺點

          • 優點:實現比較簡單
          • 缺點:收費的,免費版有很多限制

          參考鏈接

          • html5 + websocket_rtsp_proxy 實現視頻流直播
          • streamedian
          • html5_rtsp_player

          方案二:ffmpeg + nginx + video,rtsp轉rtmp播放

          rtmp是adobe開發的協議,一般使用adobe media server 可以方便的搭建起來;隨著開源時代的到來,有大神開發了nginx的rtmp插件,也可以直接使用nginx實現rtmp

          rtmp方式的最大的優點在于低延時,經過測試延時普遍在1-3秒,可以說很實時了;缺點在于它是adobe開發的,rtmp的播放嚴重依賴flash,而由于flash本身的安全,現代瀏覽器大多禁用flash

          相關學習資料推薦,點擊下方鏈接免費報名,先碼住不迷路~】

          音視頻免費學習地址:FFmpeg/WebRTC/RTMP/NDK/Android音視頻流媒體高級開發

          【免費分享】音視頻學習資料包、大廠面試題、技術視頻和學習路線圖,資料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以點擊788280672加群免費領取~

          實現步驟

          1. 安裝ffmpeg工具
          2. 安裝nginx 注意:linux系統需要安裝 nginx-rtmp-module 模塊,Windows系統安裝包含rtmp的(如nginx 1.7.11.3 Gryphon)
          3. 更改nginx配置
          rtmp{
              server{
              listen 1935;
          
                  application live{
                    live on;
                    record off;
                  }
                  application hls{
                    live on;
                    hls on;
                    hls_path nginx-rtmp-module/hls;
                    hls_cleanup off;
                  }
              }
          }

          ffmpeg轉碼

          ffmpeg -i "rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov" -f flv -r 25 -s 1080*720 -an "rtmp://127.0.0.1:1935/hls/mystream"

          video 播放

          <html>
          <head>
          <title>video</title>
          <!-- 引入css -->
          <link rel="stylesheet" type="text/css" href="./videojs/video-js.min.css" />
          
          </head>
          <body>
          <video id="test_video" class="video-js vjs-default-skin vjs-big-play-centered" controls autoplay>
              <source src='rtmp://127.0.0.1:1935/hls/mystream' type='rtmp/flv'/>
          </video>
          
          </body>
          </html>
          <!-- 引入js -->
          <script type="text/javascript" src="./videojs/video.min.js"></script>
          <script type="text/javascript" src="./videojs/videojs-flash.js"></script>
          
          <script>
          videojs.options.flash.swf = "./videojs/video-js.swf"
              var player = videojs('test_video', {"autoplay":true});
              player.play();
          </script>

          注意:使用谷歌瀏覽器播放時,需要開啟flash允許

          參考鏈接

          • 在 Nginx 中啟用 RTMP 服務
          • ffmpeg.org
          • videojs
          • videojs flash

          方案三:ffmpeg + video,rtsp轉hls播放

          HLS (HTTP Live Streaming) 直播 是有蘋果提出的一個基于http的協議。其原理是把整個流切分成一個個的小視頻文件,然后通過一個m3u8的文件列表來管理這些視頻文件

          HTTP Live Streaming 并不是一個真正實時的流媒體系統,這是因為對應于媒體分段的大小和持續時間有一定潛在的時間延時。在客戶端,至少在一個分段媒體文件被完全下載后才能夠開始播放,而通常要求下載完兩個媒體文件之后才開始播放以保證不同分段音視頻之間的無縫連接。

          此外,在客戶端開始下載之前,必須等待服務器端的編碼器和流分割器至少生成一個TS文件,這也會帶來潛在的時延。

          服務器軟件將接收到的流每緩存一定時間后包裝為一個新的TS文件,然后更新m3u8文件。m3u8文件中只保留最新的幾個片段的索引,以保證觀眾任何時候連接進來都會看到較新的內容,實現近似直播的效果。
          這種方式的理論最小延時為一個ts文件的時長,一般為2-3個ts文件的時長。
          實現步驟

          1. 安裝ffmpeg工具
          2. ffmpeg轉碼
          ffmpeg -i "rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov" -c copy -f hls -hls_time 2.0 -hls_list_size 0 -hls_wrap 15 "D:/Program Files/html/hls/test.m3u8"
          

          ffmpeg 關于hls方面的指令說明

          • -hls_time n: 設置每片的長度,默認值為2。單位為秒
          • -hls_list_size n:設置播放列表保存的最多條目,設置為0會保存有所片信息,默認值為5
          • -hls_wrap n:設置多少片之后開始覆蓋,如果設置為0則不會覆蓋,默認值為0.這個選項能夠避免在磁盤上存儲過多的片,而且能夠限制寫入磁盤的最多的片的數量
          • -hls_start_number n:設置播放列表中sequence number的值為number,默認值為0
          1. video 播放
          <html>
          <head>
          <title>video</title>
          <!-- 引入css -->
          <link rel="stylesheet" type="text/css" href="./videojs/video-js.min.css" />
          
          </head>
          <body>
          <div class="videoBox">
              <video id="my_video_1" class="video-js vjs-default-skin" controls>
                  <source src="http://localhost:8088/hls/test.m3u8" type="application/x-mpegURL"> 
              </video>
          </div>
          
          </body>
          </html>
          <script type="text/javascript" src="./videojs/video.min.js"></script>
          <script type="text/javascript" src="./videojs/videojs-contrib-hls.min.js"></script>
          <script>
          videojs.options.flash.swf = "./videojs/video-js.swf"
              var player = videojs('my_video_1', {"autoplay":true});
              player.play();
          </script>

          參考鏈接

          • ffmpeg hls
          • videojs
          • videojs-contrib-hls

          方案四:VLC插件播放

          播放步驟

          1. 下載安裝vlc
          2. 瀏覽器播放
          <object type='application/x-vlc-plugin' pluginspage="http://www.videolan.org/" id='vlc' events='false' width="720" height="410">
              <param name='mrl' value='rtsp://admin:12345@192.168.10.235:554/h264/ch1/main/av_stream' />
              <param name='volume' value='50' />
              <param name='autoplay' value='true' />
              <param name='loop' value='false' />
              <param name='fullscreen' value='false' />
              <param name='controls' value='false' />
          </object>

          優缺點

          • 優點: 可以直接播放RTSP,無需任何中介服務器的幫助
          • 缺點: 需要手動安裝插件; 基于NPAPI,不被最新的 Chrome 和 Firefox 支持
          • 如果你項目的其他功能都能兼容客戶電腦上的 IE 瀏覽器,這個方案就是首選。

          參考鏈接

          • VLC wiki
          • 插件安裝方法

          其他方案

          WebRTC

          WebRTC 是支持網頁瀏覽器進行實時音視頻的一套API,例如:HTML5 通過 webRTC 直接調用攝像頭,但是如果要實現遠程視頻流的顯示,則需要將 RTSP 轉換為 WebRTC 流,供 web 端顯示。
          參考地址:github.com/lulop-k/kur…

          h5stream

          參考地址:

          • github.com/liweilup/h5…
          • 使用H5Stream開發實時監控系統
          • H5Stream入門級應用,播放RTSP流視頻

          GB28181

          參考地址:

          • LiveGBS GB28181流媒體服務
          • github

          jsmpeg.js + ffmpeg + websocket + node

          參考地址

          • # 在web中播放rtsp視頻方案對比

          原文 瀏覽器播放rtsp視頻流解決方案 - 掘金

          .前言

          爬取視頻的時候發現,現在的視頻都是經過加密(m3u8),不再是mp4或者avi鏈接直接在網頁顯示,都是經過加密形成ts文件分段進行播放。

          今天就教大家如果通過python爬取下載m3u8加密視頻。

          2.分析網頁

          1.電影視頻來源

          
          http://www.caisetv.com/
          


          2.分析m3u8加密目錄

          
          http://www.caisetv.com/dongzuopian/chaidanzhuanjia/0-1.html
          




          在視頻播放的頁面,通過F12可以查看網絡數據包

          
          https://xigua-cdn.haima-zuida.com/20210219/19948_fcbc225a/1000k/hls/index.m3u8
          




          這里的ts就電影的加密分段視頻

          
          https://xigua-cdn.haima-zuida.com/20210219/19948_fcbc225a/1000k/hls/
          

          上面的m3u8鏈接掉index.m3u8后,在拼上075a34cccdd000000.ts等ts名稱就是分段視頻的鏈接

          如下所示:

          
          https://xigua-cdn.haima-zuida.com/20210219/19948_fcbc225a/1000k/hls/075a34cccdd000000.ts
          

          通過瀏覽器把這個分段視頻下載后打開:






          所以只要把所有的ts下載并合并就是完整的電影視頻!!!

          3.下載ts

          1.下載ts分段視頻

          剛剛已經把ts的所有名稱下載下來了






          接下來通過python代碼去讀取這個文件,提取出名稱,拼接鏈接后下載保存到一個文件夾里!

          
          headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0',}
          
          ###下載ts文件
          def download(url,name):
              r = requests.get(url, headers=headers)
              with open(name+"", "wb") as code:
                  code.write(r.content)
          
          with open("index.m3u8","r") as f:
              ts_list = f.readlines()
          
          #去掉前面沒用的信息
          ts_list = ts_list[5:]
          urlheader="https://xigua-cdn.haima-zuida.com/20210219/19948_fcbc225a/1000k/hls/"
          count = 0
          for i in ts_list:
              if "#" not in i:
                  i = i.replace("\n","")
                  download(urlheader+""+i,"cdzj2/"+str(count)+".ts")
                  count = count+1
                  print(count)
          




          這樣就可以把ts文件全部下載下來,但是一個一個下載很慢,下面通過多線程下載,提升下載速度!!!

          2.多線程下載ts視頻

          
          for i in ts_list:
              if "#" not in i:
                  i = i.replace("\n","")
                  n = i[-7:]
                  threading.Thread(target=download, args=(urlheader+""+i,"cdzj2/"+str(n),)).start()
                  #download(urlheader+""+i,"cdzj2/"+str(count)+".ts")
          




          通過多線程很快就可以將這些ts文件下載到本地!!!

          4.合并ts

          cmd合并文件

          
          copy /b   *.ts   new.mp4
          

          通過這個命令(cmd終端中運行),在含有ts文件的文件夾中就可以將ts文件合并(按名稱順序進行排列合并),并保存成new.mp4




          5.總結

          1.分析m3u8加密文件
          2.python下載ts文件
          3.cmd合并ts保存成mp4格式

          AVASCRIPT WEBUPLOADER 分塊上傳,JAVASCRIPT 分段上傳,WEBUPLOADER 分塊上傳,JAVASCRIPT WEBUPLOADER 分片上傳,JAVASCRIPT 分割上傳,WEBUPLOADER 切割上傳,JAVASCRIPT 分塊上傳斷點續傳,WEBUPLOADER 分片上傳,WEBUPLOADER 加密上傳,WEBUPLOADER 分片秒傳,WEBUPLOADER 斷點續傳,WEBUPLOADER 加密上傳,WEBUPLOADER 分片下載,WEBUPLOADER 多線程上傳,WEBUPLOADER 文件夾上傳,

          用戶上傳的文件比較大,有20G左右,直接用HTML傳的話容易失敗,服務器也容易出錯,需要分片,分塊,分割上傳。也就是將一個大的文件分成若干個小文件塊來上傳,另外就是需要實現秒傳功能和防重復功能,秒傳就是用戶如果上傳過這個文件,那么直接在數據庫中查找記錄就行了,不用再上傳一次,節省時間,實現的思路是對文件做MD5計算,將MD5值保存到數據庫,算法可以用MD5,或者CRC,或者SHA1,這個隨便哪個算法都行。

          分片還需要支持斷點續傳,現在HTML5雖然提供了信息記錄功能,但是只支持到了會話級,也就是用戶不能關閉瀏覽器,也不能清空緩存。但是有的政府單位上傳大文件,傳了一半下班了,明天繼續傳,電腦一關結果進度信息就丟失了,這個是他們的一個痛點。

          切片的話還有一點就是在服務器上合并,一個文件的所有分片數據上傳完后需要在服務器端進行合并操作。

          聊下HTML5吧,怎么說呢,HTML5也就是chrome提供的一個API來實現文件分片,反正基本的需求,小文件用是能用,但是用起來多多少少還是有點別扭,擴展性,安全性,穩定性用戶那陣都不太滿意,關鍵是什么,我們是沒辦法對HTML5進行擴展,個性化和定制化開發的,基本上被谷歌給限制死了,這也是現在國產化的意義,希望能夠打破這個限制。不然公司的一些產品和業務不太好開展,總不能用戶提個需求,我們就說谷歌Chrome沒提供API,所我們就無法開發吧。這不是跟客戶扯呢。

          功能的話支持20G文件上傳和續傳,支持秒傳,支持文件夾上傳,支持在服務端保存文件夾層級結構,支持將文件夾層級結構信息保存到數據庫中,支持下載時能夠將文件夾層級結構下載下來,支持下載文件夾,下載文件夾支持斷點續傳,支持VUE2,VUE3,React,支持IE,Chrome和信創國產化環境,比如銀河麒麟,統信UOS,龍芯,支持加密傳輸,包括加密上傳,加密下載,加密算法支持國密SM4,支持云對象存儲,比如華為云,阿里云,騰訊云,七牛云,AWS,MinIO,FastDFS,需要提供手機,QQ,微信,郵箱等聯系方式,提供7*24小時技術支持,提供長期技術支持和維護服務,提供遠程1對1技術指導,提供二次開發指導,提供文檔教程,提供視頻教程。

          1.下載示例

          https://gitee.com/xproer/up6-vue-cli



          將up6組件復制到項目中

          示例中已經包含此目錄



          1.引入up6組件



          2.配置接口地址

          接口地址分別對應:文件初始化,文件數據上傳,文件進度,文件上傳完畢,文件刪除,文件夾初始化,文件夾刪除,文件列表

          參考:http://www.ncmem.com/doc/view.aspx?id=e1f49f3e1d4742e19135e00bd41fa3de



          3.處理事件



          啟動測試



          啟動成功



          效果



          數據庫



          源碼工程文檔:https://drive.weixin.qq.com/s?k=ACoAYgezAAw1dWofra

          源碼報價單:https://drive.weixin.qq.com/s?k=ACoAYgezAAwoiul8gl

          控件源碼下載:https://drive.weixin.qq.com/s?k=ACoAYgezAAwbdKCskc


          主站蜘蛛池模板: 国产对白精品刺激一区二区 | 无码人妻一区二区三区精品视频| 精品无码综合一区二区三区| 毛片无码一区二区三区a片视频| 亚洲国产成人久久综合一区| 波多野结衣一区二区三区| 国产乱码一区二区三区四| 国精产品999一区二区三区有限| 性色AV一区二区三区无码| 日本高清无卡码一区二区久久| 亚洲第一区精品观看| 亚洲va乱码一区二区三区| 正在播放国产一区| 成人区精品一区二区不卡亚洲| 综合一区自拍亚洲综合图区| 久久国产香蕉一区精品 | 色婷婷一区二区三区四区成人网| 武侠古典一区二区三区中文| 国产乱码精品一区二区三区中文| 性色av闺蜜一区二区三区| 91国在线啪精品一区| 免费看AV毛片一区二区三区| 久久精品免费一区二区三区 | 国产在线不卡一区| 蜜桃无码AV一区二区| 一区二区三区精品高清视频免费在线播放| 亚洲夜夜欢A∨一区二区三区| 亚洲AV无码一区二区三区性色| 精品国产AⅤ一区二区三区4区| 欧美日韩国产免费一区二区三区| 精品一区二区久久久久久久网站| 日韩精品一区二区午夜成人版| 99热门精品一区二区三区无码| 久久久久人妻精品一区三寸蜜桃| 日本一区二区三区日本免费| 国产99久久精品一区二区| 久久精品一区二区东京热| 上原亚衣一区二区在线观看| 精品一区二区高清在线观看| 日本一区二区三区免费高清| 亚洲午夜电影一区二区三区 |