1. 程式人生 > >Win7(Windows 7)下用VS2013(Visual Studio 2013)編譯live555

Win7(Windows 7)下用VS2013(Visual Studio 2013)編譯live555

一.live555簡介

live555是一個為流媒體提供解決方案的跨平臺C++開源專案,它實現了對標準流媒體傳輸協議如RTP/RTCP、RTSP、SIP等的支援。live555能在Linux,Mac OS X,Windows和QNX等多個平臺編譯和執行。目前,它被用於流化、接收和處理MPEG、H.264、H.265、H.263+、DV等視訊,以及MPEG(MP3的編碼)、AAC、PCM等音訊。由於良好的擴充套件性,live555可輕鬆支援其他的音視訊編碼格式,相關功能已經被新增到多款流行的播放器中,比如說VLC和MPlayer。

二.下載

已經更新到了2016.11.06


三.編譯

1.解壓到E:\live555

2.修改E:\live555\win32config檔案,將檔案中的TOOLS32=  c:\Program Files\DevStudio\Vc改為你的VS2013路徑,我改成了TOOLS32=  C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC

3.cd到E:\live555,執行genWindowsMakefiles,會在E:\live555的每個子資料夾中生成字尾為.mak的MakeFiles檔案,該檔案能被VS開啟

4.用VS2013開啟各個子資料夾中的*.mak檔案,此時會發現VS2013根本就不能開啟*.mak檔案,google後發現只有VC6.0才能直接開啟*.mak檔案,此後版本的VS只能用命令列來編譯。So,沒必要繼續看下去了。

現在直接新建VS2013工程,將原始檔新增進去,然後再進行編譯。這種方法雖然繁瑣,但是便於除錯。

在E:\live555中共有8個子資料夾,如下所示:


其中其中BasicUsageEnvironment、groupsock、liveMedia、UsageEnvironment、WindowsAudioInputDevice是基礎類庫,以靜態庫的形式存在,testProgs則主要存放一些測試程式碼,mediaServer則是伺服器的主程式,以一個可執行檔案形式存在。

UsageEnvironment:UsageEnvironment和TaskScheduler類用於排程延遲事件、給非同步讀事件分配控制代碼、輸出錯誤或警告訊息。HashTable類定義了通用雜湊表介面,該介面被原始碼的其他部分使用。這些類是抽象類,需要去繼承並實現。

groupsock:這個庫的類封裝了網路介面和套接字,需要注意的是,Groupsock封裝了傳送或接收主播報文的操作。

liveMedia:這個庫定義了以Medium類為根的樹狀層級類,封裝了大量流媒體型別和編碼。

BasicUsageEnvironment:這個類是UsageEnvironment的一個實現類。

testProgs:一些測試程式。

WindowsAudioInputDevice:這個庫是liveMedia中抽象類AudioInputDevice的實現,能在Windows上從輸入裝置讀取PCM音訊取樣。

mediaServer:伺服器主程式。

proxyServer:代理伺服器,以一個可執行檔案形式存在。

1.新建一個空白解決方案


像該解決方案中新增7個Win32控制檯專案(不包括例子),其中5個靜態庫如下設定,選擇靜態庫,並且不勾選預編譯頭。


兩個可執行程式如下設定,選擇控制檯應用程式,並且勾選空專案。


新增完成後,解決方案如下圖所示:


然後就是向各個專案中新增原始碼,注意原始碼一定別遺漏,否則靜態庫雖然編譯可能通過,但是呼叫時會出現連結錯誤。此時直接編譯肯定是編不過的,相關的標頭檔案和庫檔案沒有新增。

這裡以編譯BasicUsageEnvironment和mediaServer為例,其他的操作類似。

2.BasicUsageEnvironment編譯


為了防止類似error C4996: '_snprintf': This function or variable may be unsafe的錯誤,7個專案中都要在預處理定義中加入_CRT_SECURE_NO_DEPRECATE和_WINSOCK_DEPRECATED_NO_WARNINGS


3.mediaServer編譯

等5個靜態庫編譯成功後(WindowsAudioInputDevice暫時沒用到,可以先不用編譯),就可以編譯mediaServer了。



這裡以Debug配置來演示,Release步驟一樣。5個靜態庫預設被編譯到E:\live555\live555project\Debug,像上圖設定可以加入庫目錄。


注意別忘了新增Ws2_32.lib,不然的話,會出現一大堆Socket相關的連結錯誤。編譯成功的mediaServer也在E:\live555\live555project\Debug中。

4.mediaServer執行


控制檯中打印出客戶端訪問時使用的URL地址格式和live555支援的檔案型別。

四.測試

這裡需要特別注意一點,當通過IDE執行mediaServer時,live555推送的是專案工作目錄中的視訊或音訊。工作目錄也就是和*.vcxproj同級的目錄,即E:\live555\live555project\mediaServer,此時視訊應該放在這個目錄下。當雙擊mediaServer.exe執行時,視訊理所當然的和mediaServer.exe放在一個目錄,即E:\live555\live555project\Debug。

測試視訊:480320.264

客戶端:vlc-2.2.4-win32

操作步驟:



如果URL地址不對(視訊名字錯了或其他原因),會出現如下提示:


需要說明的是mediaServer只實現讀取本地檔案推送到客戶端的點播功能,實際應用中往往需要實時採集影視訊資料,並打包成RTSP流推送出去,即直播。此時,可以繼承live555的相關類,實現從記憶體中讀取資料並推送。詳見下篇: