1. 程式人生 > >直播伺服器的搭建以及感想

直播伺服器的搭建以及感想

Red5與EasyDarwin

主流開源流媒體伺服器有哪些?
流媒體解決方案 Live555(C++)
流媒體平臺框架 EasyDarwin(C++)
實時流媒體播放伺服器程式DarwinStreamingSrvr(C++)
流媒體實時傳輸開發包 jrtplib
多媒體處理工具 ffmpeg
多媒體編碼工具包Libav
Flash流媒體伺服器 Red5(Java)
流媒體伺服器 Open Streaming Server (Java)
FMS流媒體伺服器(Adobe,收費的)
Wowza流媒體伺服器(Java)
開源流媒體平臺FreeCast(Java)

最近幾天一直在忙著搭建直播伺服器,為什麼要做這個呢?你肯定會問。這幾個月打天天狼人殺,想研究下期中視訊直播的奧祕與細節。從剛開始的什麼都不懂,到現在會使用,只能說是會使用,因為細節上的技術都沒有去研究,現在下個文章來紀念一下。

直播間: imove.vlove.me

Red5的整體結構 利用的是RTMP協議,ffmpeg推送+Red5+VLC拉流,這個架構在WIndows伺服器上比較方便。
EasyDarwin的整體結構 利用的是RTSP協議,可以用OBS+EasyDarwin+VLC拉流,這個框架相對Red5來說更靈活,但是需要認真去研究,才能利用好Easy的7大框架。(可以RTMP轉發)

Red5搭建過程:

  1. 安裝並配置JDK(JDK,不是JRE,配置環境變數時注意空格)
  2. 下載並安裝Red5
    下載地址:http://www.red5.org/red5-server/
    然後解壓到C
    修改conf下的red5.properties可以修改IP和埠
    HTTP是開啟Red5的Demo頁面用的,RTMP是用於在直播,視訊播放等流服務時候使用的協議。

3.配置檔案
這裡寫圖片描述
配置完成後,雙擊Red5目錄下的red5.bat即可啟動Red5伺服器。
啟動完成後,輸入http://114.115.210.91:5080,出現畫面則表示成功。(如果不改配置檔案,用http://localhost:5080即可)

三. 視訊直播
1. 下載Demo
上圖首頁的最下面第二行有個紅色的Install,點選可進入Demo的安裝頁面。
這裡寫圖片描述

直播和流媒體播放都要用到”oflaDemo”,選擇後點擊”Install”安裝即可。
安裝完成後,在webapps下面出現oflaDemo資料夾。這裡寫圖片描述
這裡寫圖片描述

在有攝像頭,話筒的情況下,點選Video,在Device中選擇攝像頭,並點選Start,出現視訊畫面。
聲音同視訊,在Audio中設定。
這裡寫圖片描述

回到Server畫面,在Location中輸入rtmp://114.115.210.91:5080/oflaDemo,地址與red5.properties中的rtmp協議的設定必須相同。
點選Connect,右側出現NetConnection.Connect.Success ,說明連線伺服器成功。

點選Publish頁面中的Publish按鈕即可對外發布直播。
View頁面就是觀看的直播,稍微有點延遲。
修改Name可以改變釋出的名稱。(相當於房間名)

同時可以用VLC拉流,或者HTML播放器做直播。

EasyDarwin搭建過程:

1、獲取EasyDarwin最新版本

最好的選擇就是:從歸檔版本中獲取可執行檔案或者獲取原始碼編譯成可執行檔案,未歸檔的版本可能正在開發迭代中,各個模組都可能不是很完善;
2、編譯EasyDarwin可執行檔案

【如果直接下載已經編譯好的Release歸檔版本,可跳過此步驟】

Windows版本編譯,可以直接用Visual Studio 2015開啟原始碼檔案中的:/EasyDarwin-master/EasyDarwin/WinNTSupport/EasyDarwin.sln解決方案檔案,編譯出exe可執行檔案EasyDarwin.exe,也可以用更高版本的vs進行編譯,vs向下相容,所以編譯應該不是什麼大問題,可能會有部分編譯選項需要調整,這個根據實際情況調整即可,可以肯定的是,原始碼編譯都是沒有問題的;
經常會有開發者在編譯完成後直接vs執行出現無法執行xxx.lib或者缺少xxx.dll的問題,建議好好補補基礎知識:

vs除錯執行需要設定EasyDarwin專案為啟動項;
執行缺少dll時,可以將dll複製到vs的EasyDarwin.vcproj同級目錄,或者設定EasyDarwin.vcproj專案熟悉,將dll路徑以環境變數的形式新增到vs: EasyDarwin
Linux版本編譯(gcc4.8+,support c++ 11),將從Github獲取的EasyDarwin原始碼zip檔案進行unzip解壓,再進行具體編譯:
cd ./EasyDarwin-master/EasyDarwin/
chmod +x ./Buildit
./Buildit (./Buildit i386 or ./Buildit x64編譯出相應版本的可執行檔案)
cd ./x64 (or cd ./Release)
3、配置easydarwin.xml

EasyDarwin主要的幾個配置項:

rtsp_port:EasyDarwin RTSP服務監聽的埠;

service_lan_port:HTTP RESTful服務埠;

enable_cloud_platform:是否接入雲平臺,true表示接入redis,由EasyCMS負載均衡;

4、執行EasyDarwin

Windows除錯執行:

EasyDarwin.exe -c ./easydarwin.xml -d

Windows服務方式執行:

我們在EasyDarwin\WinNTSupport目錄提供一段指令碼install service.bat,執行,我們就建立了一個叫做EasyDarwin的Windows服務了,通過系統服務(services.msc)可以檢視到。 注:Windows不同版本可能稍有差異,建議在命令列執行bat指令碼,而不是直接雙擊執行,這樣能看到具體出錯原因!

Linux除錯執行

./easydarwin -c ../WinNTSupport/easydarwin.xml -d

Linux後臺服務方式執行

./easydarwin -c /etc/streaming/easydarwin.xml &

注:無論是Windows還是Linux執行EasyDarwin,以Debug模式執行時,-c後面帶的配置檔案路徑可以是相對路徑也可以是絕對路徑,但是以服務/後臺方式執行,就必須是用絕對路徑!
5、檢查EasyDarwin是否部署成功

通過訪問EasyDarwin RESTful介面可以初步判斷EasyDarwin流媒體伺服器是否已經執行起來了,例如我們可以訪問:http://[ip]:[http_service_port]/api/v1/getserverinfo 介面檢視EasyDarwin是否執行響應,後面的版本我們會增加一個獲取EasyDarwin整體執行配置資訊RESTful介面,這樣在外部就能檢視EasyDarwin是否讀取到了正確的使用者配置:

{
“EasyDarwin” : {
“Body” : {
“Hardware” : “x86”,
“InterfaceVersion” : “v1”,
“RunningTime” : “2 Days 4 Hours 51 Mins 41 Secs”,
“Server” : “Server: EasyDarwin/7.2 (Build/16.1231; Platform/Win32; Release/EasyDarwin; State/Development; )”
},
“Header” : {
“CSeq” : “1”,
“ErrorNum” : “200”,
“ErrorString” : “Success OK”,
“MessageType” : “MSG_SC_SERVER_INFO_ACK”,
“Version” : “v1”
}
}
}

Web後臺

Web後臺預設登入賬戶admin,密碼admin,程式碼中固定的,您可以根據自己的需求進行使用者名稱、密碼管理。
web後臺地址: http://ip:8088或者http://ip:10080 , 其中ip為執行EasyDarwin伺服器的ip地址。
web後臺程式碼在nginx目錄下。
呼叫方法

點播

EasyDarwin RTSP版本的流媒體伺服器不支援點播,只有商用版本EasyDarwin才支援點播!!

直播轉發

直接通過標準RTSP/RTP推送流程(ANNOUNCE/SETUP/PLAY/RTP)向EasyDarwin推送音視訊資料進行轉發和分發,例如rtsp_port配置為8554,那我們可以直接用EasyDarwin EasyPusher或者live555 DarwinInjector向8554埠進行直播推送,推送後,我們可以通過 rtsp://[ip]:[http_service_port]/api/v1/getrtsplivesessions 介面獲取當前正在進行RTSP直播的列表;

相比來說,自己的伺服器的頻寬,以及轉發能力都不如直接用第三方的直播伺服器,比如七牛,阿里,騰訊,網易等等,小規模的業務用自己的伺服器,是可以承受的,如果量很大的話,10W+,需要做負載均衡,又需要購買伺服器,所以如果要直播的話,最好還是用第三方。