一、軟體需求
1、nginx源碼包 下載下傳位址:http://nginx.org/。筆者下載下傳的是1.10.3。
2、pcre源碼包。這是一個正規表達式庫。nginx會用到這個開源庫來做正則比對。很多軟體都會引用,比如php引擎編譯的時候也會用到。
3、nginx-rtmp-module源碼包
這才rtmp服務真正要的工具。
4、openssl源碼包。這個不是必須。隻有nginx 版本在1.3.14 - 1.5.0之間的,才需要安裝。nginx-rtmp-module的文檔特意提到了這點。
在編譯nginx的時候,加上參數--with-http_ssl_module。如:./configure --add-module=rtmp子產品的源碼位置 --with-http_ssl_module
二、編譯nginx
解壓nginx。進入到nginx源碼目錄,執行如下指令:
第一步:
./configure --prefix=nginx安裝到哪個目錄
--with-pcre=pcre庫的源碼目錄,注意是源碼目錄
--add-module=rtmp子產品的源碼目錄
注:預先将pcre庫、rtmp子產品解壓。以便上面使用。
一般兩種壓縮包。指令不同,如下:
tar.gz包指令:tax -xzvf 軟體包
zip包:unzip 軟體包
第二步:
make && make install
三、配置nginx
配置nginx.conf,增加rtmp與http是同級别的,内容如下:
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;
}
注:nginx-rtmp-module在nignx.conf中使用的指令有很多,需要慢慢消化。先搭建一個簡單的骨架。比如還可以進行hls協定的服務。
使用指令的說明文檔:https://github.com/arut/nginx-rtmp-module/wiki/Directives
四、推流和拉流
怎麼推流
指令格式如下:
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表示不改變編解碼器,隻是改封裝器。