利用nginx搭建RTMP视频点播、直播、HLS服务器
開發環境
- Ubuntu 14.04 server
- nginx-1.8.1
- nginx-rtmp-module
nginx的服務器的搭建
安裝nginx的依賴庫
sudo apt-get update sudo apt-get install libpcre3 libpcre3-dev sudo apt-get install openssl libssl-dev- 1
- 2
- 3
配置并編譯nginx?
使用nginx的默認配置,添加nginx的rtmp模塊。?
- 1
- 2
- 3
運行測試nginx?
進入安裝目錄/usr/local/nginx,運行命令./sbin/nginx
注意:以后所有的命令都在/usr/local/nginx目錄運行,也nginx配置文件的相對目錄。
打開瀏覽器在地址欄輸入:localhost。如果,如下圖顯示那樣就證明您的nginx服務器搭建成功了。?
點播視頻服務器的配置
通過上一步nginx服務器已經搭建完成,然后我們就可以開啟一個視頻點播的服務了。打開配置文件nginx.conf,添加RTMP的配置。
worker_processes 1;events {worker_connections 1024; } rtmp { #RTMP服務server {listen 1935; #//服務端口 chunk_size 4096; #//數據傳輸塊的大小application vod {play /opt/vide/vod; #//視頻文件存放位置。}} } http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;server {listen 80;server_name localhost;location / {root html;index index.html index.htm;}error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}} }- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
配置目錄/opt/video/vod為存放視頻文件的位置了,那我們就往里面放一個文件吧。我放了一個qq.mp4文件。?
文件放好之后,那就讓我們重新啟動一下nginx
sudo ./sbin/nginx -s reload
打開視頻播放軟件選用的是VLC media-> open network stream….?
如圖填寫我們要點播的節目地址rtmp://localhost/vod/qq.mp4?如圖:?
點擊play就可以播放了。?
當然點播不使用RTMP插件nginx自身也是可以實現點播服務的。那就是配置location部分,由于下面我們要配置直播和回看功能所以選用了RTMP服務。
直播視頻服務器的配置
接著我們就在點播服務器配置文件的基礎之上添加直播服務器的配置。一共2個位置,第一處就是給RTMP服務添加一個application這個名字可以任意起,也可以起多個名字,由于是直播我就叫做它live吧,如果打算弄多個頻道的直播就可以live_cctv1、live_cctv2名字任意。第二處就是添加兩個location字段,字段的內容請直接看文件吧。
worker_processes 1;events {worker_connections 1024; }rtmp {server { listen 1935;chunk_size 4096;application vod {play /opt/video/vod;}application live{ #第一處添加的直播字段live on;}}}http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;server {listen 80;server_name localhost;location /stat { #第二處添加的location字段。rtmp_stat all;rtmp_stat_stylesheet stat.xsl;}location /stat.xsl { #第二處添加的location字段。root /usr/local/nginx/nginx-rtmp-module/;}location / {root html;index index.html index.htm;}error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}} }- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
添加完這兩處之后,重新啟動nginx打開瀏覽器看看,是否有如下圖顯示:?
有沒有看到紅框框的live字樣呢?如果可以顯示出來,證明你的配置生效了。
還等什么讓我們推送一個節目看看(其實專業詞叫錄制,后面將會使用錄制這個詞。)吧。
這次推送我使用的是OBS(Open Broadcaster Software)有關它的安裝請參考先前我寫的Ubuntu安裝OBS(Open Broadcaster Software)后面的博客里我會給大家介紹如何使用手機采集視頻并且推送到服務器上。
配置OBS如圖:
播放的地址就是“rtmp://localhost/live/test”,如果您本地有支持rtmp協議的播放器就可以試試了。最后奉上一張觀看直播的屏幕截圖。?
實時回看視頻服務器的配置
我們想一想如果直播服務能夠把節目錄制在本地,我們不就可以直接進行回看先前的節目了嗎?回看一分鐘、一小時甚至一天的。想想就興奮不用寫代碼有現成的可以使用。怎么用呢?繼續看nginx的配置吧。
worker_processes 1;events {worker_connections 1024; }rtmp {server {listen 1935;chunk_size 4096;application vod {play /opt/video/vod;}application live {live on;hls on; #這個參數把直播服務器改造成實時回放服務器。wait_key on; #對視頻切片進行保護,這樣就不會產生馬賽克了。hls_path /opt/video/hls; #切片視頻文件存放位置。hls_fragment 10s; #每個視頻切片的時長。hls_playlist_length 60s; #總共可以回看的事件,這里設置的是1分鐘。hls_continuous on; #連續模式。hls_cleanup on; #對多余的切片進行刪除。hls_nested on; #嵌套模式。}} }http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;server {listen 80;server_name localhost;location /stat {rtmp_stat all;rtmp_stat_stylesheet stat.xsl;}location /stat.xsl {root /usr/local/nginx/nginx-rtmp-module/;}location /live { #這里也是需要添加的字段。types { application/vnd.apple.mpegurl m3u8; video/mp2t ts; }alias /opt/video/hls; expires -1;add_header Cache-Control no-cache; } location / {root html;index index.html index.htm;}error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}} }- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
1.添加完成后需要重新啟動nginx,由于這次nginx需要向服務器寫切片視頻文件,但nginx我又沒有給nginx指定用戶名只能走默認的nobody用戶和nogroup用戶組,其實就是沒有組。所以我對需要寫入的目錄做了增大權限的修改。?
如下圖,這樣做就是為了避免由于權限問題而無法寫文件。?
?
2.如何給服務器錄制視頻,在上一節已經說過,這里就不再說了。?
3.查看視頻文件是否真的錄制上沒有,繼續看圖:?
?
已經產生切片視頻文件了。其中還有一個index.m3u8。?
4.播放視頻,這次可是http開頭的了,“http://localhost/live/test/index.m3u8”。?
5.已經可以播放了,如何回看呢?其實這個index.m3u8文件僅僅是目錄。想回看那個就播放那個.ts文件就可以了。
總結
以上是生活随笔為你收集整理的利用nginx搭建RTMP视频点播、直播、HLS服务器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 直播技术细节
- 下一篇: RTMP协议从入门到放弃