歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux管理 >> Linux配置 >> Nginx rtmp協議的流媒體服務器配置

Nginx rtmp協議的流媒體服務器配置

日期:2017/2/27 14:57:34   编辑:Linux配置
rtmp協議介紹
rtmp(Real Time Messaging Protocol)實時消息傳送協議是Adobe Systems公司為Flash播放器和服務器之間音頻、視頻和數據傳輸開發的私有協議。
它有三種變種:
  1. 工作在TCP之上的明文協議,使用端口1935;
  2. RTMPT封裝在HTTP請求之中,可穿越防火牆;
  3. RTMPS類似RTMPT,但使用的是HTTPS連接;

RTMP協議就像一個用來裝數據包的容器,這些數據可以是AMF格式的數據,也可以是FLV中的視/音頻數據。一個單一的連接可以通過不同的通道傳輸多路網絡流。這些通道中的包都是按照固定大小的包傳輸的。
RTMP交互圖

現在主要有兩種rtmp server,商業的和開源的。商業的比開源的支持的功能多

商業的有FMS Wowza
FMS是Adobe公司的產品,license非常昂貴。下面就wowza這個商業軟件講下流媒體Server,不僅僅是RTMP Server,在達到生產環境所需要的功能。wowza最突出的特定是多終端適應性,這個在如今多媒體融合的網絡環境下有很強的實用意義。究其原理並無深 入研究。國內尚為視訊是其代理公司。

Wowza Media Server是一款高性能、多線程的流媒體服務器軟件。專為多種終端設備提供音視頻內容播放服務,支持iOS、windows、Android、 BlackMerry等系統的終端設備,以HTTP、RTSP/ RTP、RTMP傳輸協議的流播放,還支持利用機頂盒進行播放的IPTV。

開源RTMP server
  1. red5 java 有名
  2. crtmpserver c++ 支持多種rtmp協議,移動設備以及IPTV相關網絡協議; Erlyvideo erlong有開源和商業版本
  3. aXeVideo haXe 一個實驗性的,輕量級的服務器
  4. FluorineFx .Net To be defined
  5. nginx-rtmp c nginx模塊,支持rtmp和HLS

Nginx rtmp功能點
  • 支持音視頻直播
  • 支持flv/mp4視頻格式,輸入可以是文件或者HTTP流
  • 支持兩種流的分發模式 pushand pull
  • 可以將直播流錄制成flv文件
  • H264/AAC編碼
  • 支持在線轉碼 Online transcoding with FFmpeg
  • 支持HLS (HTTP LiveStreaming)需要 libavformat (>= 8. 53.31.100) from ffmpeg (ffmpeg.org)
  • HTTP callbacks (publish/play/record/update etc)
  • 支持外部程序(exec)
  • HTTP control module for recording audio/video and dropping clients
  • 先進內存控制技術,可以在使用少量內存的情況下完成流暢的直播功能。
  • 可 以和以下協同工作。FMS server(Wirecast, FMS, Wowza,)Player(JWPlayer, FlowPlayer, StrobeMediaPlayback,)外部程序(ffmpeg,avconv,rtmpdump,flvstreamer )
  • Statistics in XML/XSL in machine- & human- readable form
  • 支持跨平台 Linux/FreeBSD/MacOS

項目地址:https://github.com/arut/nginx-rtmp-module
nginx-rtmp-module Directives:https://github.com/arut/nginx-rtmp-module/wiki/Directives

總的來說Nginx-rtmp是個比較輕量的項目,可以滿足直播的采集,編碼和分發工作,該項目豐富的完善了nginx對視頻的支持,特別的nginx-rtmp實現了對HLS的支持。

Nginx下rtmp模塊安裝
基於《lnmp一鍵安裝包》環境下
cd lnmp/src

yum -y install git

wget http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz
tar xzf yasm-1.2.0.tar.gz
cd yasm-1.2.0
./configure
make && make install
cd ..

git clone git://git.videolan.org/x264.git
cd x264
./configure --enable-shared
make && make install
cd ..

wget http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
tar xzf lame-3.99.5.tar.gz
cd lame-3.99.5
./configure --enable-nasm
make && make install
cd ..

wget http://downloads.xiph.org/releases/ogg/libogg-1.3.1.tar.gz
tar xzf libogg-1.3.1.tar.gz
cd libogg-1.3.1
./configure
make && make install
cd ..

wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.3.tar.gz
tar xzf libvorbis-1.3.3.tar.gz
cd libvorbis-1.3.3
ldconfig
./configure
make && make install
cd ..

git clone http://git.chromium.org/webm/libvpx.git
cd libvpx
./configure --enable-shared
make && make install
cd ..

wget http://downloads.sourceforge.net/faac/faad2-2.7.tar.gz
tar xzf faad2-2.7.tar.gz
cd faad2-2.7
./configure
make && make install
cd ..

wget http://downloads.sourceforge.net/faac/faac-1.28.tar.gz
tar xzf faac-1.28.tar.gz
cd faac-1.28
sed -i 's@^char \*strcasestr@//char *strcasestr@' ./common/mp4v2/mpeg4ip.h
./configure
make && make install
cd ..

wget http://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz
tar xzf xvidcore-1.3.2.tar.gz
cd xvidcore/build/generic
./configure
make && make install
cd ../../../

git clone git://source.ffmpeg.org/ffmpeg.git
cd ffmpeg
./configure --prefix=/usr --enable-version3  --enable-libvpx --enable-libfaac --enable-libmp3lame  --enable-libvorbis --enable-libx264 --enable-libxvid --enable-shared --enable-gpl --enable-postproc --enable-nonfree  --enable-avfilter --enable-pthreads
make && make install
ldconfig
ffmpeg
cd ..

wget http://h264.code-shop.com/download/nginx_mod_h264_streaming-2.2.7.tar.gz
git clone git://github.com/arut/nginx-rtmp-module.git
tar xzf nginx_mod_h264_streaming-2.2.7.tar.gz
sed -i '158,161s@^@//@g' nginx_mod_h264_streaming-2.2.7/src/ngx_http_streaming_module.c
cd nginx-1.4.4
make clean

./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_stub_status_module --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module --with-ld-opt=-ljemalloc --with-http_mp4_module --add-module=../nginx_mod_h264_streaming-2.2.7 --add-module=../nginx-rtmp-module
make
if [ -e "objs/nginx" ];then
        /bin/mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx$(date +%m%d)
        /bin/cp objs/nginx /usr/local/nginx/sbin/nginx
        service nginx restart
fi

配置Nginx視頻點播
RTMP直播的一般格式是rtmp://www.linuxeye.com/app/name,其中app的名字對於application的名字,
rtmp {  #保存所有rtmp配置的塊
    server {  #聲明一個rtmp實例
        listen 1935;  #給Nginx添加一個監聽端口以接收rtmp連接
        chunk_size 4096;  #流整合的最大的塊大小。默認值為4096。這個值設置的越大CPU負載就越小。這個值不能低於128
        application mp4 {  #app的名字為mp4
                live on;  #切換直播模式,即一對多廣播
                play /home/wwwroot/www.linuxeye.com/mp4;  #播放指定mp4文件目錄
                }
        }
}
參考:
《Nginx rtmp模塊nginx-rtmp-module指令詳解》
《ffmpeg與rtmp流媒體連接用法》
原文地址:http://blog.linuxeye.com/383.html
Copyright © Linux教程網 All Rights Reserved