HTTP Live Streaming(HLS)是由Apple Inc.實施的很是強大的流視頻協議.HLS使用穿過防火牆,代理的HTTP事務,並能夠輕鬆地經過CDN進行分發。所以,該技術可以比RTP或其餘基於UDP的協議達到更大的觀衆觀衆。今天在線直播的許多視頻都是由使用HLS的昂貴系統進行託管,但它們一般很昂貴,須要大量的服務器資源。本教程將向您展現如何設置一個很是實惠的Ubuntu 14.04 VULTR VPS,只使用開源軟件來進行HLS直播流事件。css
第一步是根據Vultr Doc「 Ubuntu 14.04上的安裝Nginx-RTMP 」來讀取和設置您的服務器。該文檔中的說明是編寫時最爲全面的設置階段。我會提到你可能但願用「nginx-1.9.4」替換「nginx-1.7.5」或者任何最新版本的Nginx。另外一個建議是使用HTTP存根狀態模塊編譯Nginx,以便您可以監控您之後有多少現場HLS觀看者。html
而不是編譯:jquery
./configure --with-http_ssl_module --add-module=../nginx-rtmp-module-master
在先決條件文檔中概述的過程當中使用此字符串:nginx
./configure --with-http_ssl_module --with-http_stub_status_module --add-module=../nginx-rtmp-module-master
本教程中的示例將建立「實時」和「移動」(優化)流,並將使用ffmpeg(安裝在上一教程中)來生成比特率調整的移動優化HLS流。該示例還將顯示如何使服務器自動錄製直播視頻,並容許您以視頻點播(VOD)重播服務播放錄音。git
首先,建立保存活動和移動HLS清單和視頻片斷所需的文件夾結構:github
sudo mkdir /HLS sudo mkdir /HLS/live sudo mkdir /HLS/mobile sudo mkdir /video_recordings sudo chmod -R 777 /video_recordings
若是您尚未啓用防火牆,多是一個好主意。若是是這樣,您必須容許流量進入Nginx和HLS使用的端口。若是您如今想在沒有防火牆的狀況下運行,請忽略下面的ufw部分。web
sudo ufw limit ssh sudo ufw allow 80 sudo ufw allow 1935 sudo ufw enable
在第一篇文章中,HLS流須要與RTMP配置顯着不一樣的Nginx配置。編輯您的nginx.conf
文件以使用如下內容,將「my-ip」和「my-stream-key」替換爲您的信息。您可使用任何您想要的「my-stream-key」,這只是一個對您而言很是有幫助的詞。您可能但願先備份您的原始配置文件,而後將我提供的配置信息粘貼到編輯器中,替換全部的配置信息:ubuntu
sudo cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.original sudo nano /usr/local/nginx/conf/nginx.conf
新的nginx.conf:跨域
worker_processes 1; error_log logs/error.log debug; events { worker_connections 1024; } rtmp { server { listen 1935; allow play all; #creates our "live" full-resolution HLS videostream from our incoming encoder stream and tells where to put the HLS video manifest and video fragments
application live { allow play all; live on; record all; record_path /video_recordings; record_unique on; hls on; hls_nested on; hls_path /HLS/live; hls_fragment 10s; #creates the downsampled or "trans-rated" mobile video stream as a 400kbps, 480x360 sized video
exec ffmpeg -i rtmp://192.168.254.178:1935/$app/$name -acodec copy -c:v libx264 -preset veryfast -profile:v baseline -vsync cfr -s 480x360 -b:v 400k maxrate 400k -bufsize 400k -threads 0 -r 30 -f flv rtmp://192.168.254.178:1935/mobile/$;
} #creates our "mobile" lower-resolution HLS videostream from the ffmpeg-created stream and tells where to put the HLS video manifest and video fragments
application mobile { allow play all; live on; hls on; hls_nested on; hls_path /HLS/mobile; hls_fragment 10s; } #allows you to play your recordings of your live streams using a URL like "rtmp://my-ip:1935/vod/filename.flv"
application vod { play /video_recordings; } } } http { include mime.types; default_type application/octet-stream; server { listen 80; server_name 192.168.254.178; #creates the http-location for our full-resolution (desktop) HLS stream - "http://my-ip/live/my-stream-key/index.m3u8"
location /live { types { application/vnd.apple.mpegurl m3u8; } alias /HLS/live; add_header Cache-Control no-cache; } #creates the http-location for our mobile-device HLS stream - "http://my-ip/mobile/my-stream-key/index.m3u8"
location /mobile { types { application/vnd.apple.mpegurl m3u8; } alias /HLS/mobile; add_header Cache-Control no-cache; } #allows us to see how stats on viewers on our Nginx site using a URL like: "http://my-ip/stats"
location /stats { stub_status; } #allows us to host some webpages which can show our videos: "http://my-ip/my-page.html"
location / { root html; index index.html index.htm; } } }
nginx.conf
若是您查詢您喜歡的搜索引擎「nginx-rtmp指令」,您能夠在此文件中找到清晰的說明和變量示例。我已經使用nginx-rtmp與HLS幾年了,而不使用「容許發佈」和「拒絕發佈」指令,我看到使用/入侵個人視頻服務器的零個例子。因此我沒有在這裏列出這些指令。若是您願意,請閱讀並添加這些指令。瀏覽器
更改nginx.conf
文件後,您必須從新啓動Nginx才能使用新的配置:
sudo service nginx restart
仔細觀察任何Nginx錯誤消息,並解決由拼寫錯誤,文件夾全部權或權限問題引發的任何錯誤。若是您沒有錯誤消息,則能夠建立編碼流。
您必須擁有一個視頻編碼器才能建立流。我使用OBS(開放廣播軟件) - 這是開源的,對我來講很好。還有其餘解決方案可供選擇,這些不在本教程的範圍以內。我不會涵蓋有關配置RTMP視頻編碼器的全部內容。他們都須要大體相同的輸入變量。您須要輸入的關鍵設置才能使用個人精確nginx.conf
配置,並在大多數播放器/瀏覽器/平臺上運行良好,具體以下:
我建議嘗試不一樣的編碼器和試驗。您可能須要寬闊的比例 - 或者您的相機(或其餘廣播)材料可能須要它。若是是這樣,請確保在編碼器中更改此信息以及nginx.conf
我提供的文件的exec-ffmpeg部分中列出的寬高比; 不然你會獲得一些愚蠢的視頻Feed。
您的編碼器設置完成後,您能夠所有進行測試。啓動編碼器與您的網絡攝像頭或其上運行的某種測試飼料。此時,您可使用VLC播放器使用如下URL:
http://my-ip/live/my-stream-key/index.m3u8
http://my-ip/mobile/my-stream-key/index.m3u8
這些分別用於您的主要和移動視頻流。相應地替換您的IP和流密鑰。
在您成功播放您的第一個流檢查(經過ssh或ftp)後,您的直播廣播錄製在/video_recordings
Vultr VPS上的文件夾中。您還能夠嘗試使用如下URL在VLC中播放錄製的文件:
rtmp://my-ip/vod/filename.flv
也可使用Nginx統計信息(使用Nginx stub_status)。要查看訪客/觀衆統計資料,請訪問:
http://my-ip/stats
爲了在網頁上觀看您的視頻,您須要一個可嵌入的播放器。有許多嵌入式播放器能夠播放HLS視頻。我已經使用JW Player了好幾年了,但免費版本不會播放HLS。Bitmovin的Flowplayer和Bitdash(除其餘解決方案以外)足以提供免費的非商業版本的播放器,這將使您的HLS流嵌入到網頁中。對於這篇文章,我已經嘗試過它們,並發現它們都與個人基於Vultr / Nginx的視頻服務器至關好地工做。我將簡要介紹我如何使用個人測試臺進行Flowplayer。
若是您要以任何常規,持續或商業的方式使用現場HLS流式傳輸,我建議您從Flowplayer或您決定使用的任何一個播放器購買許可。您將得到一個限制較少,功能更多,能夠向您的組織進行品牌化的玩家。您也將得到支持 - 這可能很是重要。除了Vultr VPS以外,這是與項目相關的惟一成本。
在作任何其餘事情以前,重要的是要處理所謂的「跨域」限制,不然會限制您將流量傳遞到網頁/網站的能力。crossdomain.xml
在您的nginx/html
文件夾中建立一個文件,並在其中放置說明以容許數據在域之間流動:
sudo nano /usr/local/nginx/html/crossdomain.xml
第一個副本(今後頁面),而後粘貼(右鍵單擊)到納米編輯器字段如下XML數據:
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="*"/>
</cross-domain-policy>
按Ctrl + O寫出,而後按Ctrl + X將文件保存到磁盤並退出。
我抓住了Flowplayer的HTML5(6.0.3版本),它在解壓縮時給了我一些文件和一個文件夾。我將全部文件和文件夾上傳到我命名爲「flowplayer」的Nginx / HTML根文件夾的子文件夾中。確切的路徑是/usr/local/nginx/html/flowplayer
。
爲了在嵌入網頁時測試咱們的視頻,請使用nano在Nginx / HTML文件夾的根目錄中建立幾個HTML文件,而後填入如下內容。
文件1:
sudo nano /usr/local/nginx/html/hls.html
HTML代碼:
<!doctype html>
<head>
<link rel="stylesheet" href="#">
</head>
<body> 640x480 664kbps (live) Desktop Browsers<br>
<div style="width:640px;" class="flowplayer" data-swf="flowplayer/flowplayer.swf" data-ratio="0.75">
<video>
<source type="application/x-mpegurl" src="">
</video>
</div>
<br><br> 480x360 464kbps (mobile) Mobile Browsers <br>
<div style="width:480px;" class="flowplayer" data-swf="flowplayer/flowplayer.swf" data-ratio="0.75">
<video>
<source type="application/x-mpegurl" src="">
</video>
</div>
</body>
文件2
sudo nano /usr/local/nginx/html/hls_progressive.html
HTML代碼:
<!doctype html>
<head>
<link rel="stylesheet" href="#">
<style> .flowplayer { width: 640px; } </style>
</head>
<body>
<div class="flowplayer" data-swf="flowplayer/flowplayer.swf" data-ratio="0.75">
<video>
<source type="application/x-mpegurl" src="">
<source type="application/x-mpegurl" src="">
</video>
</div>
<br>
</body>
必定要用你的數據替換「my-ip」和「my-stream-key」。
您必須在樣式表中替換路徑flowplayer/skin/functional.css
「#」 href="#"
。教程軟件剝離了路徑。您必須填寫該src=""
部分的URL - 分別由教程軟件剝離,http://my-ip/live/my-stream-key/index.m3u8
並http://my-ip/mobile/my-stream-key/index.m3u8
分別使用。您還必須src
在頭jquery-1.11.2.min.js
和頭中添加腳本標記flowplayer.min.js
。標籤被教程軟件剝離。經過查看example html
Flowplayer套件附帶的文件,您能夠找到如何打造這些標籤。
啓動編碼器與您的網絡攝像頭或其上運行的某種測試飼料。您可使用如下網址在瀏覽器中查看廣播:
http://my-ip/hls.html
http://my-ip/hls_progressive.html
第一頁簡單地顯示每一個流 - 主要和流動平臺。您將可以啓動他們並查看它們。您會注意到移動平臺流的尺寸較小。這些步驟只是爲了確保全部的運行。
第二頁顯示單個流。但它的設置方式稱爲「漸進式流」。這意味着,當觀衆播放視頻時,若是觀衆鏈接能夠維持,則服務器和播放器都會嘗試向觀衆提供高比特率,高質量的流。若是它們的鏈接不良,而且沒法維持鏈接,則它會下降到顯示低帶寬(低至200 kbps)的低位速率(移動)流。若是您但願,您可使用ffmpeg建立更多畢業的漸進流,並使用個人示例進行配置。
我已經在一個核心的1GB Vultr VPS上測試了這個配置,我發現使用單個直播流,加上用ffmpeg建立的跨級流動流,cpu的使用率不到35%,它只消耗了100MB的個人1GB的ram。如今這是一個很是有效的設置。
若是您打算流式傳輸像素尺寸大於SD的視頻,那麼您可能會發現您必須使用更強大的VPS。我很好奇,並將個人主流運行到1280x960像素和2Mbps,爲事物增長了負擔。但VPS仍然使用50%的CPU和內存使用量保持在100MB。我添加了十幾個瀏覽器/瀏覽器,VPS上的負載幾乎沒有差異,只有使用的帶寬上升。我肯定用ffmpeg建立額外的流量流將繼續在系統上增長負載。
我已經在50到100個併發用戶的生產環境中使用了這種類型的服務器,發現隨着觀衆鏈接的增長,資源的使用率上升了不多。試驗它。可是,我認爲大多數用戶將會喜歡使用單核1GB VPS。享受您的新的HLS流服務器!
一、虛擬機搭建的RTMP系統推流推流不了
檢查緣由,結果是這裏多了一個空格(本身複製粘貼的緣由)
Nginx 服務器斷掉的狀況
二、發現本身的帳戶進入不了生成的m3u8文件夾中,ls 後原來的是nobody
修改nginx.conf 配置文件,重啓Nginx服務器,OBS繼續推流,髮型生成了視頻文件(往期回顧視頻)
文檔:https://www.vultr.com/docs/setup-nginx-on-ubuntu-to-stream-live-hls-video