Live555 Media Server是一個(gè)RTSP服務(wù)端程序,它支持Stream多種媒體格式文件,具體如下:
- MPEG Transport Stream file(.ts)
- Matroska file(.mkv)
- WebM file(.webm)
- Ogg file(.ogg, .ogv, .opus)
- MPEG-1 or 2 Program Stream file(.mpg)
- MPEG-4 Video Elementary Stream file(.m4e)
- H.264 Video Elementary Stream file(.264)
- H.265 Video Elementary Stream file(.265)
- VOB video+audio file(.vob)
- DV video file(.dv)
- MPEG-1 or 2 (including layer III) audio file(.mp3)
- WAV(PCM) audio file(.wav)
- AMR audio file(.amr)
- AC-3 audio file(.ac3)
- AAC(ADTS format) audio file(.aac)
所串出的流支持通過標(biāo)準(zhǔn)RTSP/RTP媒體客戶端進(jìn)行接收或播放,如:
- VLC media player
- QuicTime Player
- Amino set-top boxes(僅支持MPEG ts流)
- openRTSP命令行客戶端,可接收/存儲(chǔ)流數(shù)據(jù),但不支持播放
Notes:
- 服務(wù)端可并行傳輸同個(gè)流
- 默認(rèn)情況下,服務(wù)端通過RTP/UDP packets傳輸流,但如果發(fā)起客戶端使用RTSP,則服務(wù)端可通過TCP傳輸RTP/RTCP packets進(jìn)行串流(這在需要穿透防火墻時(shí)尤其有用)
- 部分非標(biāo)準(zhǔn)RTSP客戶端如Amino,會(huì)請(qǐng)求原始UDP流而不是標(biāo)準(zhǔn)RTP流。盡管如此,服務(wù)端仍然會(huì)進(jìn)行匹配,從而提供所需串流服務(wù)。
獲取 Live555 Media Server
已編譯可執(zhí)行文件
現(xiàn)已對(duì)如下平臺(tái)進(jìn)行預(yù)編譯支持:
- MacOSX(on Intel x86 processors:)live555MediaServer
- Linux(on Intel x86 processors:)live555MediaServer
- FreeBSD(on Intel x86 processors:)live555MediaServer
如上述中未包含所需平臺(tái),則需要手動(dòng)編譯源碼。
源碼編譯
這里我們不使用官方文檔中說明進(jìn)行Windows平臺(tái)編譯,一來是實(shí)際操作過程中容易出錯(cuò),二來VS編譯便于后面的源碼分析及調(diào)試。
1. 下載源碼
打開src鏈接中對(duì)應(yīng)源碼,下載下圖中任一文件:

逐層解壓(推薦使用開源軟件7-Zip)后獲得如下文件夾:
2. 源碼概述
進(jìn)入“l(fā)ive”文件夾,可看到目錄結(jié)構(gòu)如下,由于使用VS進(jìn)行編譯,其他文件(config*)無關(guān)聯(lián),所以這里只關(guān)注幾個(gè)文件夾:
結(jié)合官方文檔說明,可對(duì)各文件夾總結(jié)如下:
groupsock
靜態(tài)庫,封裝了network interfaces和sockets。舉例而言,Groupsock類中封裝了一個(gè)收發(fā)組播數(shù)據(jù)包的socket。liveMedia
靜態(tài)庫,定義了一系列類簇,根類為Medium,這些類支持了多種媒體類型和編解碼器。WindowsAudioInputDevice
靜態(tài)庫,實(shí)現(xiàn)了liveMedia中的AudioInputDevice虛基類,可為Windows程序提供從輸入設(shè)備中讀取PCM audio samples的功能。-
UsageEnvironment
靜態(tài)庫,內(nèi)部主要有如下幾個(gè)虛基類:-
TaskScheduler
為DelayedTask、socket后臺(tái)操作處理、事件event提供調(diào)度支持 -
HashTable
定義通用hash表的接口,供其他代碼使用 -
UsageEnvironment
集成TaskScheduler、groupsock、liveMedia等模塊功能,添加Result、Error消息機(jī)制,從而提供使用環(huán)境。
-
TaskScheduler
BasicUsageEnvironment
靜態(tài)庫,由于UsageEnvironment中僅給出虛基類定義,為了能夠真正地運(yùn)行,所以從UsageEnvironment繼承并實(shí)現(xiàn)了BasicUsageEnvironment類。它用于實(shí)現(xiàn)易用的命令行程序,其中,Read events和delayed operations通過select()循環(huán)進(jìn)行支持。-
mediaServer
可執(zhí)行文件,通過邏輯集成上述庫所提供的的功能,提供串流服務(wù)。
3. 編譯過程
經(jīng)過前面的介紹,相信對(duì)live555有了大致的了解,下面就逐步進(jìn)行真正的live555MediaServer編譯。
3.1 建立Projects
首先建立控制臺(tái)空項(xiàng)目live555MediaServer(名稱可自定):
依次建立庫空項(xiàng)目 groupsock, liveMedia, UsageEnvironment, BasicEnvironment, WindowsAudioInputDevice:
建立完成后,應(yīng)該共有如下圖所示的6個(gè)項(xiàng)目:
3.2 補(bǔ)全項(xiàng)目信息
靜態(tài)庫中以UsageEnvironment為例,其余4個(gè)可參照即可。
UsageEnvironment
首先將源碼live文件夾中同名子文件夾內(nèi)容完整拷貝至VS中UsageEnvironment項(xiàng)目對(duì)應(yīng)文件夾中。
然后再VS項(xiàng)目上右鍵添加文件(*.cpp)至項(xiàng)目中:
此時(shí)嘗試直接編譯,發(fā)現(xiàn)如下錯(cuò)誤信息:
從錯(cuò)誤信息中可以看到,原因是無法查找到頭文件所在位置,因此需要添加對(duì)應(yīng)文件所在路徑至“包含目錄”內(nèi)。
其他庫可能依賴的頭文件也不同,一種偷懶的方式是將如下目錄全部添加至每個(gè)項(xiàng)目的“包含目錄”中。
.\;
..\groupsock\include;
..\UsageEnvironment\include;
..\BasicUsageEnvironment\include;
..\liveMedia\include;
如提示部分安全性error,則可在“預(yù)處理器定義”中定義對(duì)應(yīng)宏。
_CRT_SECURE_NO_WARNINGS
_WINSOCK_DEPRECATED_NO_WARNINGS
再次編譯后通過。
live555MediaServer
同上述方式,添加文件,配置目錄。
由于是可執(zhí)行文件,且使用到其他庫函數(shù),因此需額外配置庫文件信息。

至此,所有Debug版本編譯完成。
4. 測(cè)試編譯結(jié)果
拷貝bipbop-gear1-all.ts至live555MediaServer.exe同一目錄下,雙擊運(yùn)行l(wèi)ive555MediaServer文件。
以VLC客戶端為例,輸入MediaServer運(yùn)行后命令行輸出中的rstp地址前綴。
正常播放結(jié)果如下:
5.后記
粗通編譯原理后編譯思路上并無太大困難,需要注意的是應(yīng)結(jié)合官方文檔進(jìn)行預(yù)先理解。
后續(xù)會(huì)陸續(xù)更新源碼解析部分,所有文章中,如有疑慮或發(fā)現(xiàn)錯(cuò)誤,歡迎指出。