整合營銷服務商

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

          免費咨詢熱線:

          使用nginx如何來實現視頻的直播

          使用nginx如何來實現視頻的直播

          ginx 是一個高性能的 Web 服務器和反向代理服務器,它也可以作為視頻直播流媒體服務器使用。下面是如何利用 Nginx 實現視頻直播推流和拉流的方式,以及其中所涉及到的模塊和工具:

          1. 安裝 Nginx

          首先需要在服務器上安裝 Nginx,可以根據操作系統的不同,采取相應的包管理器安裝,例如在 Ubuntu 下可以執行以下命令進行安裝:

          復制代碼sudo apt-get update
          sudo apt-get install nginx
          
          1. 安裝相關模塊

          在開始配置之前,需要安裝幾個 Nginx 相關的模塊,其中最常用的是 RTMP 模塊,其實現了基于 RTMP 協議的視頻直播功能。可以通過以下命令下載和安裝 RTMP 模塊:

          復制代碼cd /usr/src/
          sudo git clone https://github.com/arut/nginx-rtmp-module.git
          

          另外,為了提供 HTTPS 支持,還需要安裝 SSL 模塊:

          復制代碼sudo apt-get install libssl-dev
          sudo apt-get install openssl
          
          1. 配置 Nginx

          在配置 Nginx 前,需要知道本地服務的 IP 地址。在Ubuntu 中,可以使用 ifconfig 命令來查看 IP 地址。

          打開 Nginx 的默認配置文件 /etc/nginx/nginx.conf,在頭部添加如下代碼:

          復制代碼rtmp {
              server {
                  listen 1935;
                  chunk_size 4000;
          
                  application live {
                      live on;
                      record off;
                  }
          	}
          }
          

          其中,listen 指定監聽的端口號,RTMP 握手協議的端口為 1935;chunk_size 是數據包分段的大小(單位是字節)。

          接下來要在 http 部分添加以下代碼:

          復制代碼http {
              ...
          	server {
          		listen      80;
          		server_name localhost;
          
          		location /rtmp_stat {
          			rtmp_stat all;   # enable the status module
          			rtmp_stat_stylesheet stat.xsl; # path to the stylesheet
          		}
          
          		location /rtmp_stat.xsl {
          			root /usr/src/nginx-rtmp-module/;
          		}
          		location / {
          			proxy_pass http://127.0.0.1:8080;
          			#root   /usr/share/nginx/html;	
          			index  index.html index.htm;
          		}
          
          		location /live {
          			flv_live on;
                      add_header 'Cache-Control' 'no-cache';
                      add_header 'Access-Control-Allow-Origin' '*' always;
                      add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
                      add_header 'Access-Control-Allow-Headers' 'Range';		
          		
          			chunked_transfer_encoding on;
          			types {
          				video/mp4 mp4;
          				video/x-flv flv;
          			}
          			root /usr/local/webrtc_files;
          			autoindex on;
          		}
          	}
          }
          

          這里添加了一個 HTTP 塊,用于提供統計信息功能。具體就是通過 /rtmp_stat 和 /rtmp_stat.xsl 節點來訪問 RTMP 狀態頁,可以實時獲取到當前連接和流狀態信息。

          /live 節點是用來開啟一個 HTTP Flv 轉發服務,提供對 RTMP 直播視頻的訪問支持。其中 add_header 'Cache-Control' 'no-cache'; 表示不緩存返回內容,add_header 'Access-Control-Allow-Origin' '*' always; 設置了允許跨域請求,并添加了幾個 Access-Control 標頭。

          1. 啟動 Nginx

          在修改完配置文件后,使用 sudo nginx -t 檢查是否有配置錯誤。如果沒有報錯,則可以通過以下命令啟動 Nginx 服務器:

          復制代碼sudo service nginx start
          

          現在已經可以通過 RTMP 協議發送和接收視頻直播流。

          1. 推流

          在推流前,需要先安裝推流工具,例如 OBS(https://obsproject.com/download)或 FFmpeg(https://ffmpeg.org/download.html)等。

          使用 OBS 進行推流時,將 RTMP URL 和推流密鑰輸入至設置中并進行測試即可:

          復制代碼rtmp://<server address>:1935/live/<stream_key>
          

          上述命令中的 <server address> 是服務器的 IP 地址或者域名,<stream_key> 是視頻流名稱或推流密鑰。

          1. 拉流

          在 Web 頁面中,可以通過 video 標簽進行拉流展示,首先需引入以下 JavaScript 庫:

          html復制代碼<script src="//cdn.bootcss.com/hls.js/0.9.1/hls.min.js"></script>
          

          然后使用以下代碼添加 source 標簽和 video 標簽:

          html復制代碼<video id="my-video" class="video-js" controls preload="auto" width="640" height="264"
              data-setup="{}">
              <source src="http://<server address>/live/<stream_key>.flv" type="video/flv">
          </video>
          

          其中 <server address> 是您的服務地址,<stream_key> 指的是您推出的視頻流名稱或推流密鑰。

          這樣,就能夠成功在 Web 端看到直播視頻流了。

          總之,Nginx 作為一款功能強大的反向代理服務器,可以通過整合 RTMP、SSL 等模塊輕松實現視頻直播推流和拉流等重要功能,方便開發者快速搭建直播系統。這些技術的應用也為直播領域提供了更加全面和豐富的解決方案。

          流只能用rtmp協議,拉流可以使用rtmp協議和hls協議。rtmp協議是adobe公司開發的開放協議,hls是蘋果公司推出的直播協議。我們使用nginx的rtmp插件來搭建推流服務器

          基于nginx的rtmp直播服務器

          安裝加載nginx-rtmp-module模塊的nginx

          • 首先下載nginx
          • 到 https://github.com/arut/nginx-rtmp-module 下載rtmp模塊(git clone https://github.com/arut/nginx-rtmp-module.git)
          • 分別解壓nginx和rtmp模塊,使他們在同一目錄下。
          • 編譯nginx./configure --prefix=/usr/local/nginx --add-module=../nginx-rtmp-module.1.1.4 --with-http_ssl_module
          • make && make install 安裝
          • 配置rtmp模塊
          rtmp {
              server {
                  listen 9999;
          ?
                  application myapp {
                      live on;
                  }
                 application live {
                       live on;   #開啟實時
                       hls on;    #開啟hls
                       hls_path /usr/local/etc/nginx/html/multimedia/hls;  #hls的ts切片存放路徑
                       hls_fragment 2s;         #本地切片長度
                       hls_playlist_length 6s;  #HLS播放列表長度
                 }
              }
          }

          使用rtmp協議并且監聽了9999端口,如果我們的推流地址填寫的是rtmp://ip:9999/myapp,那么就是純粹的rmtp協議的流,如果推流地址填寫的是rmtp://ip:9999/live,那么推流之后會在/usr/local/etc/nginx/html/multimedia/hls目錄下生成很多ts格式的視頻切片和一個m3u8格式的文件,我們想要用http協議訪問這個m3u8文件就需要再配置http模塊。

          • 配置http模塊
          location /live {
              types {
                  application/vnd.apple.mpegurl m3u8;
                  video/mp2t ts;
              }
              alias /usr/local/etc/nginx/html/multimedia/hls/;
              add_header Cache-Control no-cache;
          }

          當我們的推流地址填寫的是rtmp://ip:9999/live/room1時,使用http://ip:80/live/room1.m3u8就能把rtmp轉成hls訪問這個直播流了。

          • 新建文件夾 mkdir -p /usr/local/etc/nginx/html/multimedia/hls/
          • 重啟nginx nginx -s reload

          以上就完成了直播服務器的搭建。


          m3u8格式的直播流


          使用video.js在h5播放rtmp

          使用obs推流,推流地址可以填寫rtmp://ip:9999/myapp或者rtmp://ip:9999/live,如果用的是rtmp://ip:9999/myapp,在h5端播放的時候會涉及到h5播放rtmp協議的問題,h5安裝vide.js之后還要額外安裝videojs-flash插件。

          video.js版本是7.8.3

          安裝好之后在相關頁面引入:

          import videojs from 'video.js';
          import "videojs-flash"
          import 'video.js/dist/video-js.css'

          然后初始化videojs即可:

          player=videojs("myVideo", {
              poster: baseUrl + '/file/download?file_id='+that.props.videos.foreImg,
              controls: true,
              preload: 'auto',
              // fluid:false,
              fill: true,
              playsinline: true,
              languages: 'en',
              suppressNotSupportedError: false,
              sources: that.props.videos.url,
              techOrder: ['flash', 'html5']
          })

          在pc端播放rtmp時依賴flash播放器,所以要打開flash,這樣就解決了pc端rtmp協議直播流的問題。

          但問題是現在流行的是移動端直播,而蘋果就沒支持過flash播放器,所以目前正常方法解決不了在移動端使用rtmp協議拉流的問題。

          移動端使用rtmp協議拉流

          因為蘋果不支持flash所以使用rtmp拉流肯定是不行的,但是可能客戶給我們的就只有rtmp協議,那么我們就可以用到上面的另外一個地址,把rtmp協議轉成hls協議。

          搭建ffmpeg

          rtmp轉flv

          ffmpeg  -re -i rtmp://ip:9999/myapp/room1 
          -vcodec libx264 -vprofile baseline -acodec libmp3lame -ar 44100 -ac 1 -f flv rtmp://ip:9999/live/room1

          這樣當客戶給的拉流地址是rtmp://ip:9999/myapp/room1時,可以用ffmpeg 轉成http://ip:9999/live/room1.m3u8實現全平臺播放了。

          但是這樣還有個問題,因為客戶給地址的話,用戶拉流是從客戶平臺上拉,但是如果使用自己的服務器轉了一下的話,那就變成用戶從我們自己的服務器拉流了,如果用戶比較多的話那帶寬的問題就要考慮一下了。

          頻直播是借助流媒體及通信技術,通過采集、編碼、發布和播放等過程實現實時播放。近年來,隨著移動互聯網的發展,企業的移動端應用日漸增長,手機直播需求也應運而生。根據業務需求,需在App端和H5端調用攝像頭視頻流,來達到現場生產作業直播的目的。

          1 需求分析

          我廠安裝的攝像頭,主要由海康威視、大華和英飛拓三個品牌構成,輸出協議均為RTSP。App端支持直接播放RTSP協議的視頻流,但無法直接在H5端顯示。故欲達到在H5端直播的目的,需要將RTSP協議轉換成RTMP或HLS協議。

          常見流媒體協議:

          1、RTSP協議:英文全稱 Real Time Streaming Protocol,RFC2326,實時流傳輸協議,是TCP/IP協議體系中的一個應用層協議!協議主要規定定了一對多應用程序如何有效地通過IP網絡傳送多媒體數據。RTSP體系結位于RTP和RTCP之上(RTCP用于控制傳輸,RTP用于數據傳輸),使用TCP或UDP完成數據傳輸!

          2、RTMP協議:RTMP協議是Real Time Message Protocol(實時信息傳輸協議)的縮寫,它是由Adobe公司提出的一種應用層的協議,用來解決多媒體數據傳輸流的多路復用(Multiplexing)和分包(packetizing)的問題。

          3、HLS協議:HTTP Live Streaming,是Apple的開放標準,基于HTTP流,它最初是蘋果公司針對蘋果移動設備而開發的流,由于是基于HTTP的,因此很多HTTP的優點都得到了繼承。

          RTMP協議支持在Html播放,但是它依賴flash播放器,所以在移動端H5不能采用RTMP協議。HLS協議基于HTTP流,支持IOS、Android、HTML5,故采取將RTSP拉流并轉碼為HLS協議輸出的方式,下圖是HLS的工作原理:

          2 架構設計

          考慮到內網帶寬限制及多用戶并發以及便于管理,我們采用流媒體服務器(內外網映射、拉流/轉碼)+web服務器+手機App+H5的方案,其中流媒體服務器負責拉取攝像頭RTSP視頻流,并壓縮編碼成HLS,等待來自手機App+H5的request請求;WEB服務器用于管理攝像頭信息;H5端通過video.js開源插件實現播放,架構圖如下:

          3 具體實現

          為了保證系統穩定性及管理便捷性,我們使用了EasyNVR流媒體服務器軟件,EasyNVR集成了可視化web管理服務,能夠通過簡單的網絡攝像機通道配置,將傳統監控行業里面的高清網絡攝像機IP Camera、NVR等具有RTSP協議輸出的設備接入到EasyNVR,EasyNVR能夠將這些視頻源的音視頻數據進行拉取,轉換為RTMP或HLS,進行全平臺終端H5直播(Web、Android、iOS)

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

          音視頻免費學習地址:https://xxetb.xet.tech/s/2cGd0

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

          1、安裝流媒體服務器軟件EasyNVR

          在EasyNVR官網下載安裝包,解壓后運行ServiceInstall-EasyNVR.exe進行安裝,成功將啟動web管理界面。

          2 獲取攝像機的RTSP流

          我們以海康威視攝像頭為例,首先在攝像頭機web管理界面(默認入口是攝像頭ip地址),在網絡菜單配置里了,開通UPnP端口,以及RTSP視頻流的映射。

          開通映射以后,UPnP狀態顯示生效。

          根據海康威視攝像頭的視頻流格式,拼出該攝像頭的RTSP地址,如:rtsp://賬號:密碼@http://172.16.xxx.xxx:554/h264/ch35/main/av_stream

          可使用VLC media player軟件對攝像頭視頻流進行測試,看看是否正常輸出。

          3、添加攝像頭信息

          將攝像頭rtsp視頻流,配置到easyNvr的通道后,點擊預覽查看視頻能否正確輸出。

          4、HLS轉碼

          在預覽界面,其他設置一欄中,可以查看HLS的.m3u8地址。

          5、demo測試

          采用video.js開源的視頻插件編碼,調用.m3u8地址,在H5端成功展示視頻。

          通過項目中實際的應用,HLS直播在無論是在實時性、連續性還是多用戶并發控制方面都達到了我們預期的目標。


          原文 H5直播RTSP攝像頭視頻流解決方案 - 掘金


          主站蜘蛛池模板: 中文字幕一区二区三匹| 国产乱码精品一区二区三区四川| 亚洲乱码av中文一区二区| 日本一区二区三区四区视频| 人体内射精一区二区三区| 精品无码成人片一区二区| 日韩欧美一区二区三区免费观看| 国产裸体歌舞一区二区 | 国产成人精品一区二区三在线观看| 久久一区二区明星换脸| 99精品国产高清一区二区三区 | 久久久精品人妻一区二区三区四| 国产成人无码AV一区二区| 精品国产日韩亚洲一区| 一区二区三区视频免费| 无码欧精品亚洲日韩一区夜夜嗨 | 精品一区二区三区高清免费观看| 国产精品成人一区无码| 丰满爆乳无码一区二区三区| 无码少妇A片一区二区三区| 国产成人欧美一区二区三区| 国产欧美一区二区精品仙草咪| 无码乱码av天堂一区二区| 国产乱人伦精品一区二区| 亚州AV综合色区无码一区| 亚洲AV日韩AV一区二区三曲| 精品无人乱码一区二区三区 | 亚洲一区二区精品视频| 99久久精品国产免看国产一区 | 国产日韩视频一区| 日本精品一区二区三区在线视频一 | 日本片免费观看一区二区| 亚洲av无码一区二区三区四区 | 人体内射精一区二区三区| 久久精品一区二区三区AV| 国内精品视频一区二区三区八戒| 波多野结衣AV一区二区三区中文 | 亚洲AV无码国产一区二区三区| 中文字幕在线一区二区在线 | 亚洲日韩一区精品射精| 狠狠综合久久av一区二区|