1. 程式人生 > >用nginx搭建http/rtmp/hls協議的MP4/FLV流媒體伺服器

用nginx搭建http/rtmp/hls協議的MP4/FLV流媒體伺服器

前前後後搭建了兩三個星期,終於可以告一段落,nginx實在是有點強大。寫一篇筆記來記錄一下這個過程中的思路和解決方案。 一.搭建nginx平臺: 基本是基於http://blog.csdn.net/xiaoliouc/article/details/8363984 一步步安裝nginx搭建流媒體伺服器 這篇部落格來搭建。 我的ubuntu是14.04LTS。各種包的版本是: nginx-1.9.9 nginx_mod_h264_streaming-2.2.7.tar.gz openssl-0.9.8zh.tar.gz pcre-8.12.tar.gz zlib-1.2.7.tar.gz 為了支援rtmp,還下載了一個模組nginx-rtmp-module-master,沒有版本的區別。 在安裝過程中的注意事項: 1.上述無非是./configure make make install. 2.記住如果要修改nginx的./configure的話只用make無需install因為不是覆蓋安裝。 3.要在sbin的目錄下檢查./nginx -V 才能看到nginx的配置。 4.nginx在make的時候注意把objs裡面的Makefile的許可權改成a+w,並且將-Werror刪掉,這樣就不會把warning看成error來對待。修改makefile是在configure之後make之前。 二.測試http、rtmp、hls的功能 1.配置檔案(僅支援http和rtmp) user  www www;  ##管理使用者

worker_processes 30;    ##後臺程序

error_log  /usr/local/nginx/logs/error.log;

##nginx錯誤日誌存放路徑

pid        /usr/local/nginx/logs/nginx.pid;

events {

        use epoll;

##輪訓方式

        worker_connections      65535;

##允許的最大連線數

        }

http {

    include       mime.types;

    default_type  application/octet-stream;



    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

                      '$status $body_bytes_sent "$http_referer" '

                      '"$http_user_agent" "$http_x_forwarded_for"';



    access_log  /usr/local/nginx/logs/access.log;



    sendfile        on;

    tcp_nopush     on;



    #keepalive_timeout  0;

    keepalive_timeout  65;



    gzip on;
    gzip_min_length 1000;
    gzip_buffers 4 8k;
    gzip_types text/plain;



    server {

        listen       80;

        server_name  192.168.16.69;
     #root html;
        root /usr/local/nginx/html/flv_file;
    

        #charset koi8-r;

        limit_rate_after 5m;

        limit_rate  512k;
     index  index.html;
         charset utf-8;

     #   access_log  /usr/local/nginx/logs/host.access.log  main;



    #    location / {

        #    root   /usr/local/nginx/html/flv_file;

   #            index  index.html;

           # limit_rate_after 5m;

           # limit_rate  512k;

       

        #error_page  404              /404.html;

       location ~ \.flv$ {    
     #     root /var/www/flv;
                       flv;
                        }

       location ~ \.mp4$ {
     #          root /var/www/mp4;
                        mp4;
                        }
}
}
rtmp {
        server {
            listen 1935;
            chunk_size 4000;

            # video on demand
            application vod {
                play /usr/local/nginx/html/flv_file;
            }

            # HLS
            # HLS requires libavformat & should be configured as a separate
            # NGINX module in addition to nginx-rtmp-module:
            # ./configure … –add-module=/path/to/nginx-rtmp-module/hls …
            # For HLS to work please create a directory in tmpfs (/tmp/app here)
            # for the fragments. The directory contents is served via HTTP (see
            # http{} section in config)
            #
            # Incoming stream must be in H264/AAC/MP3. For iPhones use baseline #H264
            # profile (see ffmpeg example).
            # This example creates RTMP stream from movie ready for HLS:
            #
            # ffmpeg -loglevel verbose -re -i movie.avi  -vcodec libx264
            #    -vprofile baseline -acodec libmp3lame -ar 44100 -ac 1
            #    -f flv rtmp://localhost:1935/hls/movie
            #
            # If you need to transcode live stream use ‘exec’ feature.
            #
            application hls {
                hls on;
                hls_path /usr/local/nginx/html/flv_file;
                hls_fragment 10s;
            }
        }
    }
2.配置檔案(可支援http,rtmp,hls)   #filename:nginx.conf     #user  nobody;

    worker_processes  1;

    error_log  logs/error.log;
    #error_log  logs/error.log  notice;
    #error_log  logs/error.log  info;

    pid        logs/nginx.pid;

    events {
        use epoll;
        worker_connections  1024;
    }

    rtmp {
        server {
            listen 1935;
            chunk_size 4000;

            # video on demand

            application vod {
                play /usr/local/nginx/html/flv_file;
            }

            # HLS
            # HLS requires libavformat & should be configured as a separate
            # NGINX module in addition to nginx-rtmp-module:
            # ./configure … –add-module=/path/to/nginx-rtmp-module/hls …

            # For HLS to work please create a directory in tmpfs (/tmp/app here)
            # for the fragments. The directory contents is served via HTTP (see
            # http{} section in config)
            #
            # Incoming stream must be in H264/AAC/MP3. For iPhones use baseline #H264
            # profile (see ffmpeg example).
            # This example creates RTMP stream from movie ready for HLS:
            #
            # ffmpeg -loglevel verbose -re -i movie.avi  -vcodec libx264
            #    -vprofile baseline -acodec libmp3lame -ar 44100 -ac 1
            #    -f flv rtmp://localhost:1935/hls/movie
            #
            # If you need to transcode live stream use ‘exec’ feature.
            #
            application hls {
                hls on;
                hls_path /usr/local/nginx/html/flv_file;
                hls_fragment 10s;
            }
        }
    }

    http {

        include mime.types;
        default_type application/octet-stream;
        sendfile on;
        keepalive_timeout 65;
        gzip on;

         #log format

        log_format  access  ‘$remote_addr – $remote_user [$time_local] “$request” ‘
                 ‘$status $body_bytes_sent “$http_referer” ‘
                 ‘”$http_user_agent” $http_x_forwarded_for’;   

         #定義一個名為addr的limit_zone,大小10M記憶體來儲存session
        limit_conn_zone $binary_remote_addr zone=addr:10m;    

        server {
            listen 8080;
             server_name localhost;

             # HTTP can be used for accessing RTMP stats
            # This URL provides RTMP statistics in XML
            location /stat {
                rtmp_stat all;
                rtmp_stat_stylesheet stat.xsl;
            }
            location /stat.xsl {
                root /home/nairely/Documents/nginxserver/nginx-rtmp-module-master;
            }
             location /control {
                rtmp_control all;
            }
            location / {
                root /home/nairely/Documents/nginxserver/nginx-rtmp-module-master/test/rtmp-publisher;
            }
        }

         server {
            listen 80;
             server_name localhost;

            location / {
                    root /usr/local/nginx/html/flv_file;
                    index index.html;
                  }        

             location ~ \.flv$ {
                   root /usr/local/nginx/html/flv_file;
                 flv;
                 limit_conn addr 20;
                 limit_rate 200k;
            }
            location ~ \.mp4$ {
                 root /usr/local/nginx/html/flv_file;
                 mp4;
                 limit_conn addr 20;
                 limit_rate 200k;
            }

             location /hls {
                # Serve HLS fragments
                alias /usr/local/nginx/html/flv_file;
            }

             access_log  logs/nginxflv_access.log access;
        }      
    } 3.如果視訊不能播放很有可能是許可權的問題,設定成644. root(read and write),group(read only)user(read only) 4.nginx作為一個後臺伺服器,使用者從html/flv_file的資料夾中取出視訊使用者點播。測試的播放器用的是vlc。 http的地址是http://192.168.16.46/yequ.flv rtmp的地址是rtmp://192.168.16.46:1935/vod/yequ.flv hls的地址是http://192.168.16.46/hls/sample.m3u8(在segment命令將output的URL設定為http://192.168.16.46/hls)將sample.m3u8檔案放在html/flv_file資料夾下,當然這取決與segment語句在哪個地址下進行。 5.如何啟動nginx: cd /usr/local/nginx/sbin ./nginx -t 檢查配置檔案的語法問題 如果發現配置檔案的路徑不對 ./nginx -c 路徑 ./nginx -s reload重新載入配置檔案 killall -9 nginx 殺掉所有程序從頭開始,如果遇到埠被佔用的問題的話。 ./nginx 啟動,注意在殺掉程序之後一定要重新啟動。 service nginx start 三.配置hls+ffmpeg的環境 在配置http和rtmp都比較簡單。在搭建nginx平臺的前提下就可以實現點播。配置hls出現的問題都比較簡單。只是會花一段時間。 主要的配置還是根據這篇來的http://www.lc365.net/blog/b/31519/ 基於HTTP Live Streaming(HLS) 搭建線上點播系統 這些包實在太多了,我簡直屬於無聊的階段。 1.faac的編譯問題 http://zhidao.baidu.com/link?url=ASyVwiBE-01ox_O0QascgPdqNNRlXpHCfI6cXyg71JIboOK5MTj3NLfHUPC31HH5b0FiE3tbWUetUfKL29HAzzXu4q0p75Iveu05HPp_ST3 2.在編譯ffmpeg的時候發現x264notfound的解決方法 在x264的./configure --enable-static --enable-shared --enable-visualize --system-libx264 --enable-gprof --enable-strip --enable-pic --enable-debug 就是把所以的開關都開啟。這簡直是誤打誤撞。 3.m3u8configure的時候總是會遇到error的問題,可以看到這些錯誤都是什麼東西過時的啥的,直接換ffmpeg。換ffmpeg版本到最新。ffmpeg-2.8.4 git clone https://github.com/johnf/m3u8-segmenter cd m3u8-segmenter 然後configure的時候 gcc -Wall -g m3u8-segmenter.c -o segmenter -lavformat -lavcodec -lavutil cp segmenter /usr/bin/  在html/flv_file路徑下 ffmpeg -i /var/flvs/baluobu.flv  -f mpegts -acodec libmp3lame -ar 48000 -ab 128k -vcodec libx264 -b 96k -flags +loop -cmp +chroma -partitions +parti4x4+partp8x8+partb8x8 -subq 5 -trellis 1 -refs 1 -coder 0 -me_range 16 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -bt 200k -maxrate 96k -bufsize 96k -rc_eq 'blurCplx^(1-qComp)' -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -level 30 -aspect 320:240 -g 30 -async 2 /var/app/baluobu/baluobu.ts 上述是把flv檔案轉換成ts檔案 下面用segmenter命令將ts轉換成10秒一個ts切片,segmenter_test是ts小切片的字首,-u制定URL地址。 segmenter -i vp5.ts -d 10 -p segmenter_test -m vp5.m3u8 -u http://192.168.16.46/hls/ 在segmenter的時候有一個紅色的ignore,之前一直認為是一個error,我去才發現是一個不用管的東西,然後在vlc上用http://192.168.16.46/hls/vp5.m3u8放,其實類似一個直播的功能,播完了就沒有ts檔案了。 再來一次測試就得再來一遍ffmpeg和segmenter. 總結到這兒。

相關推薦

nginx搭建http/rtmp/hls協議MP4/FLV媒體伺服器

前前後後搭建了兩三個星期,終於可以告一段落,nginx實在是有點強大。寫一篇筆記來記錄一下這個過程中的思路和解決方案。 一.搭建nginx平臺: 基本是基於http://blog.csdn.net/xiaoliouc/article/details/8363984 一步步安

nginx搭建http透明代理

web服務器 lis 計算機 centos cal out tcp 標簽 dport 背景 代理我們經常聽,在技術層面我們談論的代理往往是非透明代理,那麽既然有非透明代理那就存在有透明代理。我們先看看什麽是透明代理,引用百度百科的一句話可以描述明白 透明代理的意思是客戶端根

網易視訊雲:Nginx搭建flv,mp4,hls媒體伺服器

網易視訊雲是網易傾力打造的一款基於雲端計算的分散式多媒體處理叢集和專業音視訊技術,提供穩定流暢、低時延、高併發的視訊直播、錄製、儲存、轉碼及點播等音視訊的PAAS服務,線上教育、遠端醫療、娛樂秀場、線上金融等各行業及企業使用者只需經過簡單的開發即可打造線上音視訊平臺。今天,

nginx-rtmp-module搭建rtmp媒體伺服器

前言 利用開源的nginx-rtmp-module和Nginx搭建流媒體伺服器。Nginx是一個非常出色的http伺服器,nginx-rtmp-module是一個開源的Nginx擴充套件模組,擁有很多功能特性,像接收rtmp推流拉流,hls直播等: 1.RTMP/HLS/MPEG

Win10環境下采nginx-rtmp+obs搭建媒體伺服器

1.1、安裝並啟動nginx-rtmp模組 1、直接將下載好的nginx-rtmp檔案解壓 2、啟動nginx伺服器(例如:我將nginx-rtmp安裝在C盤) 注:start nginx也可以寫為nginx.exe 3、更改nginx-rtmp的co

基於Nginx+nginx-rtmp-module+ffmpeg搭建rtmphls媒體伺服器

Nginx及nginx-rtmp-module安裝新建目錄mkdir /usr/local/mginx下載cd /usr/local/nginx wget http://nginx.org/download/nginx-1.12.2.tar.gz wget https://c

iOS直播--Nginx伺服器搭建RTMP,HLS實現

Nginx介紹Nginx ("engine x") 是一個高效能的HTTP和反向代理伺服器,也是一個IMAP/POP3/SMTP伺服器。Nginx是由Igor Sysoev為俄羅斯訪問量第二的Rambler.ru站點開發的,第一個公開版本0.1.0釋出於2004年10月

在自己的電腦下搭建nginx+rtmp媒體伺服器java對推許可權驗證

因為公司任務需要讓做一個直播的系統,經過一段時間的研究,和方便以後撿起來所以把這個寫了下來 下載windows版本的nginx http://nginx-win.ecsds.eu/download/nginx 1.7.11.3 Gryphon.zip 解壓到c盤,最好

Nginx系列-10.采Nginx搭建正向代理服務

Linux Nginx 代理服務器 Nginx系列-10.采用Nginx搭建正向代理服務 目錄 - Nginx系列 Nginx系列-1.Linux下安裝Nginx Nginx系列-2.配置LNMP(Linux、Nginx、MySQL、PHP)架構 Nginx系列-3.配置Nginx虛擬主機

nginx搭建點播視頻(Mp4播放)

vid err 工作 gzip lis xtu 錯誤 tst not found 首先,環境中必然要有gcc-c++環境   yum -y install gcc-c++ 1 使用openresty 這裏使用的是1.11.2.1版本的openresty和1.0.2版本

使用Nginx+nginx-rtmp-module+OBS推搭建媒體伺服器

一、安裝Nginx 下載必備安裝包 建立安裝包存放資料夾 cd mkdir /usr/source #建立原始碼目錄 後面的原始碼都放在這個目錄 cd source yum -y install git #安裝git git clone https://github.

搭建基於nginx-rtmp-module的媒體伺服器

1.業務流程圖   2.軟體下載   2.1 windows下載obs   2.2 linux 安裝nginx(附加rtmp模組)      1.cd /usr/local      2.mkdir nginx      3.cd nginx      4.wget 

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

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

swoole2-swoole搭建http伺服器

一.執行緒和程序的模型 啟動swoole的時候會啟動Manager程序和Master程序。對於Manager程序,用於管理Worker程序(我們業務層的邏輯程式碼一般 放在這裡)和Task程序(用於在某個特定的時間或者條件下執行的程式碼)。對於Master程序,用於底層的開發,後面

(九) nginx rtmp媒體伺服器搭建

nginx 反向代理伺服器搭建(Ubuntu中):(除了nginx搭建流媒體伺服器(模組化配置),常用的還有red5(java配置)) nginx官網:http://nginx.org/ nginx中有很多模組,rtmp-module ffplay "rt

Nginx搭建一個可用的靜態資源Web伺服器

上一節中編譯好自己的nginx伺服器後, 現在要對nginx.conf檔案進行配置,搭建一個可用的靜態資源Web伺服器   1.放入可訪問的html檔案到nginx資料夾下,如圖1所示: 這裡我放入的是一個videojs示例;   2.修改conf/nginx.conf

Nginx搭建一個具備緩存功能的反向代理服務

gin 公網ip地址 aid ont charset 搭建 配置文件 ati 分享圖片 反向代理的理解:https://www.cnblogs.com/zkfopen/p/10126105.html 我是在一臺linux服務器上搭建了兩個nginx服務器A和B,把

Nginx搭建一個具備快取功能的反向代理服務

 反向代理的理解:https://www.cnblogs.com/zkfopen/p/10126105.html   我是在一臺linux伺服器上搭建了兩個nginx伺服器A和B,把靜態資原始檔甲放在A伺服器上,B作為反向代理伺服器。 外界訪問靜態資原始檔甲時直接訪問B,B從A上獲取

NodeJS/express-4.0實現的靜態檔案伺服器(serveStatic外掛直接支援HTTP Range請求,因此可用來做mp4媒體伺服器

var express = require('express'), serveIndex = require('serve-index'), //只能列表目錄,不能下載檔案? serveStatic = require('serve-stat

搭建直播伺服器,使用nginxnginx-rtmp-module搭建媒體伺服器

現在,一起學習一下如何自己搭建一個流媒體伺服器吧! 本次搭建流媒體使用的環境是centos 7.0+nginx; 讓我們一起開始奇妙的流媒體之旅吧! 1、下載nginx-rtmp-module: 使用命令: git clone https://gi