1、軟件需求php
一、nginx源碼包 下載地址:http://nginx.org/。筆者下載的是1.10.3。html
二、pcre源碼包。這是一個正則表達式庫。nginx會用到這個開源庫來作正則匹配。不少軟件都會引用,好比php引擎編譯的時候也會用到。nginx
下載地址:https://ftp.pcre.org/pub/pcre/pcre-8.36.zipgit
三、nginx-rtmp-module源碼包 github
這才rtmp服務真正要的工具。正則表達式
下載地址:https://github.com/arut/nginx-rtmp-module服務器
四、openssl源碼包。這個不是必須。只有nginx 版本在1.3.14 - 1.5.0之間的,才須要安裝。nginx-rtmp-module的文檔特地提到了這點。網絡
在編譯nginx的時候,加上參數--with-http_ssl_module。如:./configure --add-module=rtmp模塊的源碼位置 --with-http_ssl_moduleapp
五、推流客戶端工具:ffmpeg。Ffmpeg工具下載官網:http://www.ffmpeg.org/download.htmlide
六、拉流播放工具:須要一個很經常使用的流媒體播放工具VLC。下載地址:http://www.videolan.org/vlc/
2、編譯nginx
解壓nginx。進入到nginx源碼目錄,執行以下命令:
第一步:
./configure --prefix=nginx安裝到哪一個目錄
--with-pcre=pcre庫的源碼目錄,注意是源碼目錄
--add-module=rtmp模塊的源碼目錄
注:預先將pcre庫、rtmp模塊解壓。以便上面使用。
通常兩種壓縮包。命令不一樣,以下:
tar.gz包命令:tax -xzvf 軟件包
zip包:unzip 軟件包
第二步:
make && make install
3、配置nginx
配置nginx.conf,增長rtmp與http是同級別的,內容以下:
user root; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; error_log logs/error.log error; pid logs/nginx.pid; events { worker_connections 1024; } #服務於rtmp協議的請求 rtmp://開頭 rtmp{ server{ listen 1395; chunk_size 4096; #自定義的直播名稱,路徑中將會用到 #rtmp://192.168.56.88:1395/my_live/rtmpstream中的my_live就是下面定義的名稱 application my_live{ #開啓直播功能 live on;
#接收的rtmp視頻流是否落地存儲到flv文件,不開啓就直接在內存中,存儲也是一個視頻拆成不少小flv文件 record all; #存儲路徑 record_path /tmp/nginx_rtmp_av; record_max_size 128K; #爲同一個視頻文件的視頻分片加時間戳 record_unique on; }
#hls協議,同樣是一個application後面接着自定義名稱,區別是hls on;
application hls {
live on;
#開啓hls
hls on;
#hls的視頻分片文件(.ts)存放路徑
hls_path /tmp/nginx_hls_av;
#每一個視頻分片文件包含多少秒
hls_fragment 5s;
#是否清理掉舊的ts文件。默認是開啓的。如今關閉
hls_cleanup off;
hls_playlist_length 5h;
}
} #這裏能夠加其餘server偵聽其餘端口 } #服務於http請求 http{ }
注:nginx-rtmp-module在nignx.conf中使用的指令有不少,須要慢慢消化。先搭建一個簡單的骨架。好比還能夠進行hls協議的服務。
使用指令的說明文檔:https://github.com/arut/nginx-rtmp-module/wiki/Directives
4、推流和拉流
怎麼推流
使用ffmpeg工具來推流。Ffmpeg是一套開源的庫:視頻採集功能、視頻格式轉換、視頻抓圖、給視頻加水印。不少軟件引入了這個庫來完成視頻的採集、轉碼。
命令格式以下:
ffmpeg -re -i E:\test.mp4 -f flv rtmp://192.168.56.88:1395/my_live/rtmpstream
上述命令,就會讀取-i參數指定的視頻文件,推流到指定地址去。須要將ffmpeg添加到環境變量中去。或者直接輸入ffmpeg的完整安裝路徑來執行也是能夠的。
其中,my_live是nginx.conf中配置的直播名稱。rtmpstream是自定義的名稱。後續拉流的時候,就必須使用這個名稱來拉流,nginx-rtmp落地存儲數據(若開啓了)的時候,就是使用這個名稱命名flv文件的。如一個視頻文件才服務器磁盤上被拆成了:rtmpstream-1502794875.flv、rtmpstream-1502794879.flv、rtmpstream-1502794885.flv.................。
-r設定幀速率,默認爲25。
-i 設定輸入流,也就是讀取哪一個文件推流到服務端。
運行命令後,會在命令行看到推流過程:
客戶端使用ffmpeg完成視頻的推流,接着能夠在另一端,輸入拉流地址,拉流觀看視頻。
怎麼拉流觀看視頻
須要一個很經常使用的流媒體工具:VLC。
軟件安裝好後(筆者安裝的是window下VLC工具),打開軟件,選擇"打開網絡串流",以下所示:
輸入拉流的地址,推流和拉流都是同一個地址(說的是rtmp協議)。如:rtmp://192.168.56.88:1395/my_live/rtmpstream
到此,完成了,一邊推流,一邊拉流的效果。
特別注意:
使用hls方式來推流給nginx,客戶端ffmpeg的參數要不同了:須要增長兩個參數-vcodec copy和-acodec copy。若是沒有這兩個參數,是不會把視頻落地到hls對應的目錄去的。
以下:
ffmpeg -re -i E:\test.mp4 -vcodec copy -acodec copy -f flv rtmp://192.168.56.88:1395/hls/hls_stream
-acodec表示音頻編碼,copy表示不改變編解碼器,只是改封裝器。
-vcodec表示視頻編碼,copy表示不改變編解碼器,只是改封裝器。