Nginx學習之配置RTMP模塊搭建推流服務

来源:https://www.cnblogs.com/smallSevens/archive/2018/01/04/8191238.html
-Advertisement-
Play Games

寫在開始 小程式升級實時音視頻錄製及播放能力,開放 Wi Fi、NFC(HCE) 等硬體連接功能。同時提供按需載入、自定義組件和更多訪問層級等新特性,增強了第三方平臺的能力,以滿足日趨豐富的業務需求。 為更高效地連接用戶與商家,小程式提供了實時音視頻錄製及播放組件。符合類目要求的小程式自助開通後,可 ...


寫在開始

小程式升級實時音視頻錄製及播放能力,開放 Wi-Fi、NFC(HCE) 等硬體連接功能。同時提供按需載入、自定義組件和更多訪問層級等新特性,增強了第三方平臺的能力,以滿足日趨豐富的業務需求。

為更高效地連接用戶與商家,小程式提供了實時音視頻錄製及播放組件。符合類目要求的小程式自助開通後,可自建或使用雲服務,實現單向、雙向甚至多向的音視頻功能,如線上授課、遠程咨詢、視頻客服,以及多人會議等。

2017-12-26微信小程式推送了這樣一條消息,文檔,代碼也是簡單的一筆帶過,用戶需要自建或使用雲服務,實現單向、雙向甚至多向的音視頻功能。目前僅支持 flv, rtmp 格式。

本篇博客通過介紹使用nginx的rtmp模塊來使nginx服務支持rtmp協議,可以完成推流和播放的功能。

開發環境

Linux (centos7),Nginx (openresty),nginx-rtmp-module

安裝

由於之前已經安裝過了openresty,詳見博文。這裡我們只需要安裝nginx-rtmp-module模塊即可。

下載並解壓模塊:

wget https://github.com/arut/nginx-rtmp-module/archive/master.zip
unzip  master.zip

停止原來的Nginx服務:

nginx -s stop

配置並編輯:

./configure --add-module=/home/nginx-rtmp-module-master
make

複製Nginx:

## 路徑根據自己軟體路徑自行配置
cp /home/openresty/build/nginx-1.11.2/objs/nginx /usr/local/openresty/nginx/sbin

配置rtmp服務:

rtmp {                #RTMP服務
    server {
       listen 1935;  #//服務埠
       chunk_size 4096;   #//數據傳輸塊的大小
       application vod {
           play /opt/video; #//視頻文件存放位置。
       }
       application live{ #直播
           live on;
       }
   }
}

檢查並啟動服務:

nginx -t
nginx

播放

上傳一個視頻文件test.flv至/opt/video目錄。

下載一個VLC media player,工具欄-媒體-打開網路串流-網路,然後偶輸入網路URL(rtmp://ip:port/vod/test.flv),點擊播放。

回看

實時回看視頻伺服器的配置:

events {
    use epoll;# 選擇epoll模型可以達到最佳的IO性能
    worker_connections  1024;
}

rtmp {                #RTMP服務
    server {
       listen 1935;  #//服務埠
       chunk_size 4096;   #//數據傳輸塊的大小
       application vod {
           play /opt/video; #//視頻文件存放位置。
       }
       application live{ #直播
           live on;
           hls on; #這個參數把直播伺服器改造成實時回放伺服器。
           wait_key on; #對視頻切片進行保護,這樣就不會產生馬賽克了。
           hls_path /opt/video/hls; #切片視頻文件存放位置。
           hls_fragment  600s;     #設置HLS片段長度。
           hls_playlist_length 10m;  #設置HLS播放列表長度,這裡設置的是10分鐘。
           hls_continuous on; #連續模式。
           hls_cleanup on;    #對多餘的切片進行刪除。
           hls_nested on;     #嵌套模式。
       }
   }
}

HTTP服務:

server {
        listen       80;
        server_name  rtmp.52itstyle.com;

        location /stat {
          rtmp_stat all;
           rtmp_stat_stylesheet stat.xsl;
        }

        location /stat.xsl {
            root /home/nginx-rtmp-module-master/;
        }

        location / {
            root   html;
            index  index.html index.htm;
        }
        location /live {  #這裡也是需要添加的欄位。
            types {  
               application/vnd.apple.mpegurl m3u8;  
               video/mp2t ts;  
            }
            alias /opt/video/hls;
            expires -1;
            add_header Cache-Control no-cache; 
            add_header Access-Control-Allow-Origin *;
        }  
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

微信推流

<live-pusher webviewId="push" url="rtmp://ip:port/live/itstyle" 
    mode="HD" 
    autopush ="true"
    bindstatechange="statechange" 
    beauty = "10"
    whiteness="10"
    style="width: 300px; height: 225px;" />

手機打開小程式頁面,進行視頻推流服務,稍後我們會在/opt/video/hls/itstyle 目錄下發現一些ts文件和index.m3u8文件。

註意 url中的itstyle可以隨便定義,相當於一個房間標識。

PC推流

PC 直播是在 PC(windows/mac)上藉助安裝的推流軟體 OBS(推薦)或者 XSplit 向RTMP視頻雲的推流地址,推送經過壓縮編碼現場活動、教學、投影或者游戲等畫面,同時觀眾可以通過和推流地址相對應的播放地址收看實時畫面。

PC 直播流程非常簡單,主要步驟:

  • 通過RTMP自定義一個推流地址,解決往哪推流的問題;
  • 採用第三方的推流軟體,設置推流音視頻源以及編碼參數,解決推什麼內容的問題;
  • 觀眾就可以使用我們提供的 RTMP DEMO 通過設置播放地址即可進行觀看,解決內容觸達到觀眾那裡的問題。

推薦閱讀:第三方推流工具使用指南

Web播放

xiaozhibo.html:

<!DOCTYPE html>
<html lang="zh-cmn-Hans">
    <head>
        <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, shrink-to-fit=no">
        <title>小直播</title>
        <meta name="keywords" content="">
        <meta name="description" content="小直播——直播分享">
        <meta name="format-detection" content="telephone=no">
        <meta name="apple-mobile-web-app-capable" content="yes">
        <meta name="apple-mobile-web-app-status-bar-style" content="black">
        <meta name="msapplication-tap-highlight" content="no">
        <script src="//imgcache.qq.com/open/qcloud/video/vcplayer/TcPlayer-2.2.1.js" charset="utf-8"></script>
    </head>
    <body>
        <div id="id_test_video" style="width:100%; height:auto;"></div>
        <script type="text/javascript">
           var player =  new TcPlayer('id_test_video', {
                "m3u8": "http://rtmp.52itstyle.com/live/itstyle002/index.m3u8",
                "autoplay" : true,//iOS下safari瀏覽器,以及大部分移動端瀏覽器是不開放視頻自動播放這個能力的
                "coverpic" : "https://blog.52itstyle.com/usr/uploads/2017/12/2652725976.jpg",
                "width" :  '480',//視頻的顯示寬度,請儘量使用視頻解析度寬度
                "height" : '320'//視頻的顯示高度,請儘量使用視頻解析度高度
            });
        </script>
    </body>
</html>

跨域問題crossdomain.xml放置在網站根目錄:

<cross-domain-policy>
  <allow-access-from domain="*.qq.com" secure="false"/>
</cross-domain-policy>

測試訪問地址:http://rtmp.52itstyle.com/xiaozhibo.html

參考文檔:

http://www.cnblogs.com/zx-admin/p/5783523.html

https://cloud.tencent.com/document/product/267

https://github.com/arut/nginx-rtmp-module/wiki/Directives#rtmp

作者: 小柒

出處: https://blog.52itstyle.com

分享是快樂的,也見證了個人成長歷程,文章大多都是工作經驗總結以及平時學習積累,基於自身認知不足之處在所難免,也請大家指正,共同進步。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 文檔對象模型是用於HTML和XML文檔的應用程式編程介面,它定義文檔的邏輯結構,以及訪問和操作文檔的方式。 ...
  • 前言 (以下內容為一個朋友所述)今天我想跟大家分享幾個前端經典的面試題,為什麼我突然想寫這麼一篇文章呢?今天我應公司要求去面試了下幾位招聘者,然後又現場整不出幾個難題,就搜了一下前端變態面試題! HAHA,前提我並不是一個變態,欺負人的面試官.只是我希望看看對方的邏輯能力! 從而又拿這些面試題進行了 ...
  • 前面的話 集合、字典和散列表可以存儲不重覆的值。在集合中,我們感興趣的是每個值本身,並把它當作主要元素。在字典中,我們用[鍵,值]的形式來存儲數據。在散列表中也是一樣(也是以[鍵,值]對的形式來存儲數據)。但是兩種數據結構的實現方式略有不同,本文將詳細介紹字典和散列表這兩種數據結構 字典 集合表示一 ...
  • json相信大家都用的多,jsonp我就一直沒有機會用到,但也經常看到,只知道是“用來跨域的”,一直不知道具體是個什麼東西。今天總算搞明白了。下麵一步步來搞清楚jsonp是個什麼玩意。 同源策略 首先基於安全的原因,瀏覽器是存在同源策略這個機制的,同源策略阻止從一個源載入的文檔或腳本獲取或設置另一個 ...
  • 對於一個多人團隊來說,制定一個統一的規範是必要的,因為個性化的東西無法產生良好的聚合效果,規範化可以提高編碼工作效率,使代碼保持統一的風格,以便於代碼整合和後期維護。 2.1 瀏覽器相容 根據公司業務要求而定,一般: 主流程測試:Chrome 30+、IE9+; 完整測試: Chrome 21、IE ...
  • 1、vertical-align基本認識 支持的屬性值: ①線類:baseline(預設),top,middle,bottom ②文本類:text-top,text-bottom ③上標下標類:sub,super ④數值百分比類: 數值和百分比的共性:ⅰ都帶數字;ⅱ都支持負值;ⅲ行為表現一致(都是在 ...
  • 一、表單輸入綁定 1.1、基礎用法 你可以用 v-model 指令在表單控制項元素上創建雙向數據綁定。它會根據控制項類型自動選取正確的方法來更新元素。儘管有些神奇,但 v-model 本質上不過是語法糖,它負責監聽用戶的輸入事件以更新數據,並特別處理一些極端的例子。 v-model 並不關心表單控制項初始 ...
  • 上文說到,有了Spring之後,通過依賴註入的方式,我們的業務代碼不用自己管理關聯對象的生命周期。業務代碼只需要按照業務本身的流程,走啊走啊,走到哪裡,需要另外的對象來協助了,就給Spring說,我想要個對象——於是Spring就很貼心的給你個對象。聽起來似乎很簡單,使用起來也不難,但是如果僅僅是這 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...