nginx+nginx-rtmp-module+ffmpeg搭建流媒體伺服器

來源:互聯網
上載者:User

標籤:

Nginx本身是一個非常出色的HTTP伺服器,FFMPEG是非常好的音視頻解決方案.這兩個東西通過一個nginx的模組nginx-rtmp-module,組合在一起即可以搭建一個功能相對比較完善的流媒體伺服器.

這個流媒體伺服器可以支援RTMP和HLS(Live Http Stream)

從安裝開始

Nginx的安裝參照我之前的這個: http://redstarofsleep.iteye.com/blog/2010391

不同的是在configure的時候需要增加nginx-rtmp-module的支援,下載好nginx-rtmp-module後解壓,然後nginx安裝時增加這個模組(--add-module),其它都是一樣的.

 

Java代碼  
  1. ./configure --prefix=/usr/local/nginx --with-pcre=/home/user/pcre/pcre-8.32 --with-zlib=/home/user/zlib/zlib-1.2.8 --with-openssl=/home/user/openssl/openssl-1.0.1i  --add-module=/home/user/nginx-rtmp-module  

FFMPEG的安裝參照上一篇: http://redstarofsleep.iteye.com/blog/2122612

 

nginx配合ffmpeg做流媒體伺服器的原理是: nginx通過rtmp模組提供rtmp服務, ffmpeg推送一個rtmp流到nginx, 然後用戶端通過訪問nginx來收看即時視頻流. HLS也是差不多的原理,只是最終用戶端是通過HTTP協議來訪問的,但是ffmpeg推送流仍然是rtmp的.

 

安裝完成後,開啟Nginx的設定檔nginx.conf進行配置

首先在裡面加入rtmp的配置

Java代碼  
  1. rtmp {  
  2.     server {  
  3.         listen 1935;  
  4.   
  5.         application myapp {  
  6.             live on;  
  7.         }  
  8.         application hls {  
  9.             live on;  
  10.             hls on;  
  11.             hls_path /tmp/hls;  
  12.         }  
  13.     }  
  14. }  

然後,針對hls,還需要在http裡面增加一個location配置

Java代碼  
  1. location /hls {  
  2.             types {  
  3.                 application/vnd.apple.mpegurl m3u8;  
  4.                 video/mp2t ts;  
  5.             }  
  6.             root /tmp;  
  7.             add_header Cache-Control no-cache;  
  8. }  

 

這是一個最簡單,最基礎的配置, rtmp監聽1935連接埠,如果是hls的話用hls on開啟hls,並且為hls設定一個臨時檔案目錄hls_path /tmp/hls; 其它更進階的配置可以參看nginx-rtmp-module的readme,裡面有比較詳細的介紹其它的配置,並且它還提供了一個通過JWPlayer在網頁上播放的例子.

 

儲存完設定檔後,啟動nginx,通過netstat -ltn命令可以看到增加了一個1935連接埠的監聽.8080是nginx預設的http監聽連接埠.

Java代碼  
  1. # netstat -ltn  
  2. Active Internet connections (only servers)  
  3. Proto Recv-Q Send-Q Local Address           Foreign Address         State        
  4. tcp        0      0 127.0.1.1:53            0.0.0.0:*               LISTEN       
  5. tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN       
  6. tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN       
  7. tcp        0      0 0.0.0.0:1935            0.0.0.0:*               LISTEN       
  8. tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN       
  9. tcp6       0      0 :::22                   :::*                    LISTEN       
  10. tcp6       0      0 ::1:631                 :::*                    LISTEN    

然後用ffmpeg推流到nginx:

第一個是推到了上面配置的myapp上:

Java代碼  
  1. ffmpeg -re -i "D:\download\film\aqgy\02.mp4" -vcodec libx264 -vprofile baseline -acodec aac  
  2.  -ar 44100 -strict -2 -ac 1 -f flv -s 1280x720 -q 10 rtmp://server:1935/  
  3. myapp/test1  

第二個推送到hls上:

Java代碼  
  1. ffmpeg -re -i "D:\download\film\aqgy\02.mp4" -vcodec libx264 -vprofile baseline -acodec aac  
  2.  -ar 44100 -strict -2 -ac 1 -f flv -s 1280x720 -q 10 rtmp://ip:1935/  
  3. hls/test2  

現在我們的流媒體伺服器有兩個即時資料流了,一個是rtmp的,另一個是hls的,用流媒體播放器播放一下,流媒體播放器可以用vlc也可以用ffmpeg帶的ffplay.手機也是可以播放的.

 

上面這兩個流的地址分別是:

第一個就是推送的地址: rtmp://serverIp:1935/myapp/test1

第二個是HTTP地址: http://serverIp:8080/hls/test2.m3u8

 

最後貼上一段對於HLS這個比較特殊的流媒體協議的解釋:

       (這段解釋來自: http://www.cnblogs.com/haibindev/archive/2013/01/30/2880764.html)

  HTTP Live Streaming(HLS)是蘋果公司(Apple Inc.)實現的基於HTTP的流媒體傳輸協議,可實現流媒體的直播和點播,相對於常見的流媒體直播協議,例如RTMP協議、RTSP協議、MMS協議等,HLS直播最大的不同在於,直播用戶端擷取到的,並不是一個完整的資料流。HLS協議在伺服器端將直播資料流儲存為連續的、很短時間長度的媒體檔案(MPEG-TS格式),而用戶端則不斷的下載並播放這些小檔案,因為伺服器端總是會將最新的直播資料產生新的小檔案,這樣用戶端只要不停的按順序播放從伺服器擷取到的檔案,就實現了直播。由此可見,基本上可以認為,HLS是以點播的技術方式來實現直播。由於資料通過HTTP協議傳輸,所以完全不用考慮防火牆或者代理的問題,而且分段檔案的時間長度很短,用戶端可以很快的選擇和切換碼率,以適應不同頻寬條件下的播放。不過HLS的這種技術特點,決定了它的延遲一般總是會高於普通的流媒體直播協議。

 

nginx+nginx-rtmp-module+ffmpeg搭建流媒體伺服器

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.