1. 程式人生 > >Car-eye-http-flv-module 實現nginx-rtmp-mudule HTTP方式的FLV直播功能

Car-eye-http-flv-module 實現nginx-rtmp-mudule HTTP方式的FLV直播功能

nginx-rtmp-mudule RTMP 是一款優秀的Car-eye-http-flv-module 是在nginx-rtmp-mudule RTMP基礎上修改的流媒體伺服器,除了支援flash播放器外,還支援現在常見的播放器。完美實現了HTTP方式的FLV直播功能。

本文簡單介紹下該模組的主要功能和使用:

功能

  • 基於HTTP協議的FLV直播流播放。

  • GOP快取,降低播放延遲 (H.264視訊和AAC音訊)。

  • 支援Transfer-Encoding: chunked方式的HTTP回覆。

  • rtmp配置的server塊中可以省略listen配置項。

  • 支援虛擬主機。

支援的系統

  • Linux(推薦)/FreeBSD/MacOS/Windows(受限)。

支援的播放器

依賴

  • 在類Unix系統上,需要GNU make,用於呼叫編譯器來編譯軟體。

  • 在類Unix系統上,需要GCC/在Windows上,需要MSVC,用於編譯軟體。

  • 在類Unix系統上,需要GDB,用於除錯軟體(可選)。

  • FFmpeg,用於釋出媒體流。

  • VLC播放器(推薦),用於播放媒體流。

  • 如果NGINX要支援正則表示式,需要PCRE庫。

  • 如果NGINX要支援加密訪問,需要OpenSSL庫。

  • 如果NGINX要支援壓縮,需要zlib庫。

建立

在Windows上

編譯步驟請參考Building nginx on the Win32 platform with Visual C,不要忘了在Run configure script步驟中新增--add-module=/path/to/nginx-http-flv-module

在類Unix系統上

下載NGINX和nginx-http-flv-module。

將它們解壓到某一路徑。

開啟NGINX的原始碼路徑並執行:

將模組編譯進NGINX

./configure --add-module=/path/to/nginx-http-flv-module
make
make install

將模組編譯為動態模組

./configure --add-dynamic-module=/path/to/nginx-http-flv-module
make
make install

注意

如果將模組編譯為動態模組,那麼NGINX的版本號必須大於或者等於1.9.11。

釋出

ffmpeg -re -i example.mp4 -vcodec copy -acodec copy -f flv rtmp://example.com[:port]/appname/streamname

appname用於匹配rtmp配置塊中的application塊(更多詳情見下文)。

streamname可以隨意指定。

RTMP預設埠1935,如果要使用其他埠,必須指定:port

播放(HTTP)

http://example.com[:port]/dir?[port=xxx&]app=myapp&stream=mystream

引數dir用於匹配http配置塊中的location塊(更多詳情見下文)。

HTTP預設埠80, 如果使用了其他埠,必須指定:port

RTMP預設埠1935,如果使用了其他埠,必須指定port=xxx

引數app用來匹配application塊,但是如果請求的app出現在多個server塊中,並且這些server塊有相同的地址和埠配置,那麼還需要用匹配主機名的server_name配置項來區分請求的是哪個application塊,否則,將匹配第一個application塊。

引數stream用來匹配發布流的streamname。

例子

假設在http配置塊中的listen配置項是:

http {
    ...
    server {
        listen 8080; #不是預設的80埠
        ...

        location /live {
            flv_live on;
        }
    }
}

rtmp配置塊中的listen配置項是:

rtmp {
    ...
    server {
        listen 1985; #不是預設的1935埠
        ...

        application myapp {
            live on;
        }
    }
}

那麼基於HTTP的播放url是:

http://example.com:8080/live?port=1985&app=myapp&stream=mystream

注意

如果使用的是HTTP版本1.1(HTTP/1.1),chunked_transfer_encoding配置項預設是開啟的。

由於一些播放器不支援HTTP塊傳輸,這種情況下最好在指定了flv_live on;的location中指定chunked_transfer_encoding off,否則播放會失敗。

nginx.conf例項

注意

配置項rtmp_auto_pushrtmp_auto_push_reconnectrtmp_socket_dir在Windows上不起作用,除了Windows 10 17063以及後續版本之外,因為多程序模式的relay需要Unix domain socket的支援,詳情請參考Unix domain socket on Windows 10

worker_processes  4; #執行在Windows上時,設定為1,因為Windows不支援Unix domain socket
worker_cpu_affinity  0001 0010 0100 1000; #執行在Windows上時,省略此配置項

error_log logs/error.log error;

#如果此模組被編譯為動態模組並且要使用與RTMP相關的功
#能時,必須指定下面的配置項並且它必須位於events配置
#項之前,否則NGINX啟動時不會載入此模組或者載入失敗
#load_module modules/ngx_rtmp_module.so;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    keepalive_timeout  65;

    server {
        listen       80;

        location / {
            root   /var/www;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        location /live {
            flv_live on; #開啟HTTP播放FLV直播流功能
            chunked_transfer_encoding on; #支援'Transfer-Encoding: chunked'方式回覆

            add_header 'Access-Control-Allow-Origin' '*'; #新增額外的HTTP頭
            add_header 'Access-Control-Allow-Credentials' 'true'; #新增額外的HTTP頭
        }

        location /stat {
            #push和pull狀態的配置

            rtmp_stat all;
            rtmp_stat_stylesheet stat.xsl;
        }

        location /stat.xsl {
            root /var/www/rtmp; #指定stat.xsl的位置
        }
    }
}

rtmp_auto_push on;
rtmp_auto_push_reconnect 1s;
rtmp_socket_dir /tmp;

rtmp {
    out_queue   4096;
    out_cork    8;
    max_streams 64;

    server {
        listen 1935;
        server_name www.test.*; #用於虛擬主機名字尾通配

        application myapp {
            live on;
            gop_cache on; #開啟GOP快取,降低播放延遲
        }
    }

    server {
        listen 1935;
        server_name *.test.com; #用於虛擬主機名字首通配

        application myapp {
            live on;
            gop_cache on; #開啟GOP快取,降低播放延遲
        }
    }

    server {
        listen 1935;
        server_name www.test.com; #用於虛擬主機名完全匹配

        application myapp {
            live on;
            gop_cache on; #開啟GOP快取,降低播放延遲
        }
    }
}

相關推薦

Car-eye-http-flv-module 實現nginx-rtmp-mudule HTTP方式FLV直播功能

nginx-rtmp-mudule RTMP 是一款優秀的Car-eye-http-flv-module 是在nginx-rtmp-mudule RTMP基礎上修改的流媒體伺服器,除了支援flash播放器外,還支援現在常見的播放器。完美實現了HTTP方式的FLV直播功能。本文

Dump Rtmp Stream To FLV File (從Rtmp流儲存為FLV檔案)

    一、準備工作   搭建本地rtmp服務:   https://www.cnblogs.com/doudouyoutang/p/6602430.html   獲取使用到的庫,openssl 和 librtmp   參考:   https://www.jianshu.co

Nginx-rtmp+ FFmpeg +Dodker + vue.js 直播系統搭建

進入 doc tex fas rtmp服務器 服務器搭建 display controls export 思路(如圖): 1,開啟推流服務器(這裏我的Nginx-rtmp服務器搭建成功) 進入docker 開啟推流服務器 docker run -it -p 193

基於nginx-rtmp-module模塊實現HTTP-FLV直播模塊(nginx-http-flv-module

發現 app1 多播 git app 命令 避免 put 編譯 本文後續的內容將在這裏更新:《基於nginx-rtmp-module模塊實現的HTTP-FLV直播模塊(nginx-http-flv-module)續》。註意:下文的配置很多已經不能用了,因為現在的實現跟早期

基於nginx-rtmp-module模組實現HTTP-FLV直播模組nginx-http-flv-module(二)

      由於《基於nginx-rtmp-module模組實現的HTTP-FLV直播模組nginx-http-flv-module(一)》內容已經很長,所以後續的更新將記錄在這兒。非常感謝網友們的測試反饋和程式碼提交!專案地址

基於nginx-rtmp-module模組實現HTTP-FLV直播模組nginx-http-flv-module(一)

      本文後續的內容將在這裡更新:《基於nginx-rtmp-module模組實現的HTTP-FLV直播模組nginx-http-flv-module(二)》。注意:下文的配置很多已經不能用了,因為現在的實現跟早期的實現相差有點大。而為了看到整個專案的變遷史,所以保留了

obs nginx-rtmp-module搭建流媒體服務器實現直播 ding

video 接下來 監聽 comm 地址 什麽 ip地址 automake text 接下來我就簡單跟大家介紹一下利用nginx來搭建流媒體服務器。 我選擇的是騰訊雲服務器 1、下載nginx-rtmp-module: nginx-rtmp-module的官方gith

利用nginxnginx-rtmp-module搭建流媒體伺服器實現直播

轉自:https://www.cnblogs.com/suiyuewuxin/p/7256972.html 使用環境是centos 7.0+nginx;可以實現簡單的流媒體服務。 先下載nginx-rtmp-module拓展: nginx-rtmp-module的官方github地址:h

nginx+nginx-rtmp-module實現直播服務

環境 centos 6.8 nginx 1.10.3 nginx-rtmp-module 下載nginx-rtmp-module 當前目錄/opt git clone https://github.c

通過nginx,nginx-rtmp-module實現流媒體直播

1、 下載nginx http://nginx.org/en/download.html 下載nginx-rtmp-module: nginx-rtmp-module的官方github地址:https://github.com/arut/nginx-rtmp-module

nginx-rtmp-module授權機制實現直播推流多房間授權認證

假設nginx直播伺服器已經搭建完畢,如果還沒有搭建完畢可以查閱利用nginx的nginx-rtmp-module搭建流媒體直播伺服器這篇文章。在開發直播專案時推流應該是需要做許可權認證的,不是任何人都可以隨意向直播伺服器推流,這就需要許可權認證,實現起來也不復雜,只需要在nginx配置檔案中的rt

obs nginx-rtmp-module搭建流媒體伺服器實現直播 ding

歡迎大家來此瀏覽,希望大家一塊在此學習,共同交流進步。 接下來我就簡單跟大家介紹一下利用nginx來搭建流媒體伺服器。 我選擇的是騰訊雲伺服器 1、下載nginx-rtmp-module: 使用命令: git clone https://github.com/

HTTP協議下可拖動時間軸播放FLV實現(偽流媒體)

prot pac -m method bytes encoding 編寫 時間軸 delay HTTP協議下實現FLV的播放其實並不復雜,當初實現的原理是使用了flowPlayer插件實現的,效果還不錯。但仍有兩大問題影響著客戶的訪問情緒: 1.預加載時頁面卡死,似乎沒有

Windows下編譯nginx-rtmp-module

win10 threshold tar ram 1.2 openss direct down 0.11 http://nginx.org/en/docs/howto_build_on_win32.html 官網上的操作說明。 官網的方法Nginx編譯方法,思路是一致的,只是

nginx使用replace-filter-nginx-module實現內容替換

http nts fix replace 約定 roo ips 添加 ace 有時候我們想對響應(例如PHP接口)返回的內容做些字符串,雖然可以使用各語言代碼相關方法(例如PHP的str_replace)進行替換,但是在nginx層面替換是更方便的,無需修改代碼。 約定

nginxnginx-rtmp-module搭建流媒體服務器

vedio sans nginx配置 mark dir pen isp 自己 需要 轉載自my student 克明zhang 現在,一起學習一下如何自己搭建一個流媒體服務器吧! 本次搭建流媒體使用的環境是centos 7.0+nginx; 讓我們一起開始奇妙的流媒體之

nginx安裝報錯:configure: error: the HTTP rewrite module requires the PCRE library

error: config pcr nginx 參考 body post iam sta 參考:http://blog.51cto.com/williamx/958398 需要安裝pcre-devel與openssl-devel yum -y install pcre-de

windows下搭建ffmpeg+nginx+rtmp-module搭建實時視頻環境

target ati 靜態 hub 標簽 int 性能 pan href 下載ffmpeg的Windows靜態版; https://ffmpeg.zeranoe.com/builds/win64/static/下載nginx-rtmp-windows版:https://gi

2.Nginx學習-The HTTP Core module

nginx module http core module是Ngnix提供WEB服務的最核心模塊,默認被開啟。本篇文章將講述該模塊的一些配置配置文件結構:http { server {// virtual website location{ } }

流媒體技術學習筆記之(三)Nginx-Rtmp-Module統計某頻道在線觀看流的客戶數

sele lec rest uri class origin 客戶 擴展 raw 獲得訂閱者人數,可以方便地顯示觀看流的客戶數。 查看已經安裝好的模塊 /usr/local/nginx/sbin/nginx -V 安裝從源編譯Nginx和Nginx-RTMP所