一、Win10(64位)系統中,首先下載live555源碼:
live555下載地址:http://www.live555.com/liveMedia/public/
其中264文件夾下是264格式的測試文件,點擊【live555-latest.tar.gz】進行下載,下載的是一個壓縮包,解壓:
這裏給出live555壓縮文件的百度網盤下載鏈接:
鏈接:https://pan.baidu.com/s/1axLGSAlOhFMtOg_NiQTd0g
提取碼:mkhu
二、在VS2019中創建 BasicUsageEnvironment、UsageEnvironment、groupsock、liveMedia4個項目:
2.1 打開VS2019,選擇【創建新項目】:
2.2 在 語言處選擇 C++,選擇【Windows 桌面嚮導】,單擊【下一步】:
2.3.1 輸入項目名稱 BasicUsageEnvironment,解決方案名稱可以任意填,這裏填寫MyLive555,點擊【創建】:
2.3.2 在彈出的Windows桌面項目窗口中的 應用程序類型中 選擇 【靜態庫(.lib)】,其他選項 中 勾選【空項目】,點擊【確定】:
2.3.3 過程如下圖:
2.3.4 創建結果在【解決方案資源管理器】中,如下圖所示:
2.4 添加 UsageEnvironment 項目:
2.4.1 選擇【文件】 --【添加】--【新建項目】:
2.4.2 同樣選擇【Windows桌面嚮導】 ,點擊【下一步】:
2.4.3 項目名稱輸入 UsageEnvironment ,點擊【創建】:
2.4.4 在彈出的Windows桌面嚮導 中的 應用程序類型中 選擇 【靜態庫(.lib)】,其他選項 中 勾選【空項目】,點擊【確定】:
2.4.5 創建之後的結果如下圖:
2.5 用同樣的方法 添加 groupsock 項目,在最後彈出的Windows桌面嚮導 中的 應用程序類型中 選擇 【靜態庫(.lib)】,其他選項 中 勾選【空項目】:
2.6 用同樣的方法 添加 liveMedia 項目,在最後彈出的Windows桌面嚮導 中的 應用程序類型中 選擇 【靜態庫(.lib)】,其他選項 中 勾選【空項目】:
2.7 結果如下圖:
至此,在MyLive555解決方案下有4個項目,分別是 BasicUsageEnvironment、UsageEnvironment、groupsock、liveMedia。
三、在VS2019中創建 mediaServer項目:
3.1 同樣的方法,在VC2019中依次點擊【文件】--【添加】--【新建項目】,選擇【Windows桌面嚮導】,項目名稱 填寫mediaServer,點擊【創建】按鈕,在彈出的 Windows桌面項目中,應用程序類型 選擇 【控制檯應用程序(.exe)】,其他選項 勾選 【空項目】,點擊【確定】按鈕:
3.2 結果如下圖所示:
現在 在 解決方案'MyLive555' 下共有5個項目,與下載的源碼中的庫文件名相對應:
四、將源文件加入工程:
4.1 將 下載下來的BasicUsageEnvironment 中的源文件加入vS2019中對應的BasicUsageEnvironment工程中:
4.1.1 首先查看在下載的Live555源碼中的 BasicUsageEnvironment 下的一些文件:
include中的文件:
4.1.2 在VS2019中的 BasicUsageEnvironment 項目處單擊鼠標右鍵,選擇 【在文件資源管理器中打開文件夾】:
4.1.3 【在文件資源管理器中打開文件夾】的結果如下圖:
4.1.4 將 4.1.1中 BasicUsageEnvironment 目錄下的include目錄、cpp文件、c文件、.hh和.h文件拷貝到4.1.3中打開的工程目錄下:
複製好後的 BasicUsageEnvironment工程目錄文件夾如上圖。
4.2 用同樣的方法將UsageEnvironment、groupsock、liveMedia、mediaServer目錄下的include目錄、cpp文件、c文件、.hh和.h文件拷貝到對應的工程目錄下:
liveMedia下的方法:liveMedia下的文件較多,複製過程中先在 下載的liveMedia文件夾中Ctrl+A全部選中文件,再按住Ctrl鍵點擊一下4個文件,
這樣就把剩餘的文件全部選中,再進行復制操作。
五、 將每個工程中複製好的文件添加進對應的工程中:
首先將每個工程下的 include下的頭文件 添加到 頭文件篩選器下,再將 .cpp、.c、.hh 和 .h 文件 添加到 源文件篩選器下。
5.1 對 BasicUsageEnvironment 工程進行的操作:
5.1.1 在VS2019中 BasicUsageEnvironment 工程下面的 【頭文件】處單擊右鍵,選擇【添加】-->【現有項】:
5.1.2 選擇之前複製過來的 BasicUsageEnvironment 文件夾下 的 include文件夾下的所有文件,點擊【添加】:
5.1.3 這樣對應的頭文件就被添加進來了;
5.1.4 對在VS2019中 BasicUsageEnvironment 工程下面的 【源文件】處單擊右鍵,選擇【添加】-->【現有項】:
5.1.5 選擇 之前複製過來的 BasicUsageEnvironment 文件夾下 除了include文件夾下、 .vcxproj、 .filters和 .user文件之外的 所有 .cpp、.c、.hh 和 .h 文件,點擊【添加】:
5.1.6 VS2019中BasicUsageEnvironment項目添加完畢後的結果如下圖:
5.2 按照同樣的方法 將其他4個工程 複製好的文件添加進對應的工程中:
liveMedia中 添加的項目較多,可參考4.2中的liveMedia下的方法。
mediaServer下沒有include目錄,直接選擇.hh文件添加進頭文件,.cpp文件添加進源文件,如上圖所示。
六、爲每個項目添加依賴頭文件(這只是其中的一種參考方法):
6.1 以BasicUsageEnvironment項目爲例:
6.1.1 在vs2019中的BasicUsageEnvironment項目處單擊鼠標右鍵,選擇【屬性】:
6.1.2 在BasicUsageEnvironment屬性頁的 【配置屬性】--【常規】--【輸出目錄】中填寫
$(SolutionDir)$(Configuration)\lib\
未修改前默認的輸出目錄是
$(SolutionDir)$(Configuration)\
結果如下圖所示:
(注意)這裏的lib文件夾會在後來第七步的Debug過程中在Debug文件夾下自動生成,這樣填寫完全是爲了最後mediaServer的屬性頁的【鏈接器】--【常規】--【附加庫目錄】中方便。
通過點擊【輸出目錄】右側對應的 倒三角按鈕選擇<編輯...>,可以看到對應的輸出目錄:
6.1.3 在BasicUsageEnvironment屬性頁的【C/C++】--【常規】--【附加庫目錄】中輸入:
..\BasicUsageEnvironment\include;..\groupsock\include;..\liveMedia\include;..\UsageEnvironment\include
(將這4個全部包含只是爲了方便,相互之間的關係可以不用考慮了)
結果:
6.1.4 點擊【附加包含目錄】那行 最右側的 倒三角型按鈕,選擇<編輯...>:
6.1.5 在彈出的 附加包含目錄面板中 勾選 從父級或項目默認設置繼承:
連續點擊【確定】返回即可 。
6.2 採用同樣的方法將剩餘的UsageEnvironment、groupsock和liveMedia這3個項目進行設置:UsageEnvironment項目:
6.3 groupsock項目:
6.4 liveMedia項目:
6.5.1 mediaServer項目中的屬性頁的 【配置屬性】--【常規】--【輸出目錄】不用改寫,默認即可:
6.5.2 mediaServer項目中的屬性頁的 【C/C++】--【常規】--【附加包含目錄】中同樣輸入
..\BasicUsageEnvironment\include;..\groupsock\include;..\liveMedia\include;..\UsageEnvironment\include
6.5.3 別忘記 勾選 從父級或項目默認設置繼承:
6.5.4 從mediaServer屬性頁的【鏈接器】--【常規】--【附加庫目錄】填入
$(SolutionDir)$(Configuration)\lib\
這個目錄就是前面4個工程設置的【配置屬性】 --【常規】--【輸出目錄】,同樣別忘記 勾選 從父級或項目默認設置繼承:
6.5.5 從mediaServer屬性頁的【鏈接器】--【常規】--【輸入】填入
UsageEnvironment.lib
liveMedia.lib
groupsock.lib
BasicUsageEnvironment.lib
Ws2_32.lib
一定要有Ws2_32.lib,否則編譯生成時會報錯,依次點擊【確定】 返回即可。
七、分別編譯生成 :
先編譯 BasicUsageEnvironment、groupsock、liveMedia、UsageEnvironment 這四個工程,最後再編譯 mediaServer 這個工程,注意是 mediaServer是最後再編譯的。
在vs2019中對應的項目處單擊鼠標右鍵,選擇【生成】:
生成過程中:
7.1 BasicUsageEnvironment生成成功:
7.2 groupsock遇到問題:
主要有2個錯誤和1個警告:
錯誤1:
error C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS.See online help for details.
錯誤2:
error C4996: 'gethostbyname': Use getaddrinfo() or GetAddrInfoW() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings
警告1:
\source\repos\MyLive555\groupsock\GroupsockHelper.cpp(840): warning C4244: “=”: 從“time_t”轉換到“long”,可能丟失數據
改正錯誤的方法:更改預處理定義:
VS2019中groupsock處單擊鼠標右鍵,選擇【屬性】,【C/C++】-->【預處理器】-->【預處理器定義】中增加:
_CRT_SECURE_NO_WARNINGS
_WINSOCK_DEPRECATED_NO_WARNINGS
依次單擊【確定】,返回即可。對於警告,暫時還無法處理 。
在VS2019中groupsock工程處單擊鼠標右鍵選擇【重新生成】:發現生成成功,但是警告還是存在。
7.3 liveMedia遇到問題: 也有錯誤和警告,採用與7.2同樣的方法解決:
生成成功:
但是2個警告還在:
C:\Users\Wenxi\source\repos\MyLive555\liveMedia\H264or5VideoStreamFramer.cpp(670): warning C4018: “<”: 有符號/無符號不匹配
C:\Users\Wenxi\source\repos\MyLive555\liveMedia\OggFileSink.cpp(228): warning C4334: “<<”: 32 位移位的結果被隱式轉換爲 64 位(是否希望進行 64 位移位?)
7.4 UsageEnvironment生成成功:
7.5 mediaServer生成遇到2個錯誤:
在mediaServer【屬性】,【C/C++】-->【預處理器】-->【預處理器定義】中增加:
_CRT_SECURE_NO_WARNINGS
重新生成成功:
八、測試:
8.1 在VS2019中mediaServer項目處單擊鼠標右鍵,選擇【設爲啓動項目】:
8.2 重新生成mediaServer:
8.3 在VS2019中,按下鍵盤中的F5 開始調試,可以看到彈出的mediaServer.exe命令行窗口:
8.4 在VS2019的【解決方案資源管理器】 中的 mediaServer工程處 單擊鼠標右鍵,選擇 【在文件資源管理器中打開文件夾】,
將測試文件 test.264 複製到打開的文件夾中:
test.264可在第一部分提到的llive555官網下載,現給出h264文件的百度網盤下載鏈接:
鏈接:https://pan.baidu.com/s/1lA37_sKzoTacYZE31xWpIw
提取碼:mqe1
8.5 打開VLC播放器,選擇【媒體】--【打開網絡串流】,在【網絡】下面的請輸入網絡URL中輸入8.3步驟mediaServer.exe命令行窗口中的第4行 的格式 ,rtsp://192.168.1.6/<filename>,在這裏輸入 rtsp://192.168.1.6/test.264
rtsp://192.168.1.6/<filename>的意思:前面表示rtsp協議,中間的是ip地址,後面的是文件名稱,
VLC播放器可在VLC官網上下載,現給出百度網盤下載鏈接:
鏈接:https://pan.baidu.com/s/1DjwmGHr6hZ-Ecun_A0itAA
提取碼:u5yp
點擊【播放】 ,結果如下圖:可以正常播放測試文件test.264。
8.6 關掉VLC播放器,關掉mediaServer.exe窗口,在VS2019輸出中:顯示有異常,暫時還無法處理。
0x752EC632 處(位於 mediaServer.exe 中)引發的異常: Microsoft C++ 異常: int,位於內存位置 0x009CCA4C 處。
9.參考:
https://blog.csdn.net/qq_29350001/article/details/77962082
https://blog.csdn.net/lbc2100/article/details/80744888
https://blog.csdn.net/rznice/article/details/51657593
https://www.jianshu.com/p/c48ecd92c692
注意: BasicUsageEnvironment、groupsock、liveMedia、UsageEnvironment這4個工程的屬性 中的【配置屬性】--【常規】--【項目默認值】--【配置類型】中的 都是 靜態庫(.lib)