基於 SRS+NG 搭建 HLS 直播流媒體伺服器

java06051515發表於2018-12-26

協議介紹

SRS 支援 HLS/RTMP 兩種成熟而且廣泛應用的流媒體分發方式。

  • RTMP  指 Adobe 的 RTMP ( Realtime Message Protocol ),廣泛應用於低延時直播,也是編碼器和伺服器對接的實際標準協議,在 PC(Flash)上有最佳觀看體驗和最佳穩定性。

  • HLS  指 Apple 的 HLS ( Http Live Streaming ),本身就是 Live(直播)的,不過 Vod(點播)也能支援。HLS 是 Apple 平臺的標準流媒體協議,和 RTMP 在 PC 上一樣支援得天衣無縫。

HLS 和 RTMP 兩種分發方式,就可以支援所有的終端。RTMP 分發參考  基於 SRS 搭建 RTMP 直播流媒體伺服器

使用場景

  • 簡單:HLS 作為流媒體協議非常簡單,Apple 支援得也很完善。Android 對 HLS 的支援也會越來越完善。

  • 跨平臺:PC 主要的直播方案是 RTMP,也有一些庫能播放 HLS,譬如 JWPlayer,基於 OSMF 的 HLS 外掛也一大堆。所以實際上如果選一種協議能跨 PC/Android/IOS,那就是 HLS。

  • 友好的 CDN 分發方式:目前 CDN 對於 RTMP 也是基本協議,但是 HLS 分發的基礎是 HTTP,所以 CDN 的接入和分發會比 RTMP 更加完善。能在各種 CDN 之間切換,RTMP 也能,只是可能需要對接測試。

  • IOS 上苛刻的穩定性要求:IOS 上最穩定的當然是 HLS,穩定性不差於 RTMP 在 PC-flash 上的表現。

總之,SRS 支援 HLS 主要是作為輸出的分發協議,直播以 RTMP+HLS 分發,滿總各種應用場景;點播以 HLS 為主。

協議對比

分發 平臺 協議 公司 說明
RTMP Windows Flash RTMP Adobe 主流的低延時分發方式,Adobe對RTMP是Flash原生支援方式,FMS(Adobe Media Server前身),就是Flash Media Server的簡寫,可見Flash播放RTMP是多麼“原生”,就像瀏覽器開啟http網頁一樣“原生”,經測試,Flash播放RTMP流可以10天以上不間斷播放。
HLS Apple/Android HTTP Apple/Google 延時一個切片以上(一般10秒以上),Apple平臺上HLS的效果比PC的RTMP還要好,而且Apple所有裝置都支援,Android最初不支援HLS,後來也支援了,但測試發現支援得還不如Apple,不過觀看是沒有問題,穩定性稍差,所以有些公司專門做Android上的流媒體播放器。
HDS HTTP Adobe Adobe自己的HLS,協議方面做得是複雜而且沒有什麼好處,國內沒有什麼應用,傳說國外有,SRS2已經支援。
dash HTTP Dynamic Adaptive Streaming over HTTP (DASH),為了對業界存在的多種自適應流技術進行規範,MEPG推出MEPG-DASH標準。旨在為動態自適應流媒體技術創造一種同一的協議標準,nginx-rtmp已經支援。

部署

基於 滴滴雲  DC2(IP:116.85.57.94)進行軟體部署,使用 SRS 切片,使用 NGINX 分發 HLS。

第一步 ,獲取 SRS。

  [ dc2 - user @ 10 - 254 - 81 - 196   ~ ] $   git  clone   https : //github.com/ossrs/srs

  [ dc2 - user @ 10 - 254 - 81 - 196   ~ ] $   cd  srs / trunk

第二步 ,編譯 SRS。

  [ dc2 - user @ 10 - 254 - 81 - 196   trunk ] $   . / configure   &&   make

第三步 ,編寫 SRS 配置檔案。

將以下內容儲存為檔案  conf/srs.conf ,伺服器啟動時指定該配置檔案 ( SRS 的 conf 資料夾有該檔案):

第四步 ,啟動 SRS。

第五步 ,獲取、編譯 NGINX。

  • 獲取 NGINX 包

  [ dc2 - user @ 10 - 254 - 81 - 196   ~ ] $   wget  http : //nginx.org/download/nginx-1.12.2.tar.gz

  • 編譯安裝 NGINX

  [ dc2 - user @ 10 - 254 - 81 - 196   ~ ] $   tar   - zxvf  nginx - 1.12.2.tar.gz

  [ dc2 - user @ 10 - 254 - 81 - 196   ~ ] $   cd  nginx - 1.12.2   &&   . / configure   &&   make   &&   make  install

第六步 ,編寫配置檔案、啟動 NGINX。

  • 編寫配置檔案

  • 啟動 NGINX

  [ dc2 - user @ 10 - 254 - 81 - 196   ~ ] $   . / nginx - 1.12.2 / objs / nginx   - c   . . / conf / nginx . conf

第七步 ,啟動推流編碼器。

Linux  系統下可以使用  FFMPEG  進行推流; Windows/Ios  系統下可選擇  OBS  進行推流。(本文我們使用 FFMPEG 進行推流演示)

  • 獲取 FFMPEG

  [ dc2 - user @ 10 - 254 - 81 - 196   ~ ] $   git  clone   https : //git.ffmpeg.org/ffmpeg.git ffmpeg

  [ dc2 - user @ 10 - 254 - 81 - 196   ~ ] $   cd  ffmpeg

  • 編譯 FFMPEG

  [ dc2 - user @ 10 - 254 - 81 - 196   ffmpeg ] $ . / configure   &&   make

  如果編譯失敗,請根據提示內容安裝依賴環境或忽略。

  • 使用 FFMPEG 推流

  [ dc2 - user @ 10 - 254 - 81 - 196   ffmpeg ] $   . / ffmpeg   - re   - i   . . / test . mp4    - f   flv   - vcodec  copy   - acodec  copy   - y   rtmp : //116.85.57.94:888/live?vhost=stream.didi.com/teststream

第八步 ,觀看 HLS 直播流。

HLS 播放地址為:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559758/viewspace-2285570/,如需轉載,請註明出處,否則將追究法律責任。

相關文章