VS2013編譯Live555

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)行接收或播放,如:

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ù)編譯支持:

源碼編譯

src
doc

這里我們不使用官方文檔中說明進(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)境。
  • 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ò)誤,歡迎指出。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,569評(píng)論 19 139
  • 教程一:視頻截圖(Tutorial 01: Making Screencaps) 首先我們需要了解視頻文件的一些基...
    90后的思維閱讀 4,988評(píng)論 0 3
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,063評(píng)論 25 709
  • 轉(zhuǎn)發(fā)自 2016-10-27李智文騰訊Bugly 概要 分享內(nèi)容: 互聯(lián)網(wǎng)內(nèi)容載體變遷歷程,文字——圖片/聲音——...
    樹懶啊樹懶閱讀 12,361評(píng)論 3 122
  • 小時(shí)候覺得中秋的月亮,特別大特別圓。 晚飯后,大人們拿上一張折疊桌、幾張塑料凳、茶壺茶杯,孩子們則拿上白天就準(zhǔn)備好...
    Bellacl閱讀 433評(píng)論 0 0

友情鏈接更多精彩內(nèi)容