其中SRT全稱為Secure Reliable Transport,中文叫做安全可靠傳輸協議。RIST全稱為Reliable Internet Stream Transport,中文叫做可靠的網際網路流傳輸協議。SRT和RIST兩個協議均在2017年釋出,騰訊影片雲已將SRT作為傳輸層之上的協議。根據騰訊影片雲的實踐,相比傳統的RTMP直播協議,SRT對推流卡頓問題有明顯改善。下面就介紹如何在Windows環境給FFmpeg整合SRT協議的支援庫libsrt。
一、安裝Perl
libsrt依賴於openssl庫,而openssl庫又要透過perl編譯,所以得先安裝perl。Perl的官網地址是https://strawberryperl.com/,最新版本安裝包的下載連結為https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/download/SP_53822_64bit/strawberry-perl-5.38.2.2-64bit.msi。
安裝包下載完畢,雙擊即可啟動安裝程式,注意perl的安裝目錄不能帶空格,因此不能安裝到“Program Files”這樣的目錄,只能安裝在沒有空格的目錄,比如E:\Apache\Strawberry\。
Perl安裝完畢,會自動在Path變數中新增Perl的安裝路徑。注意修改Windows環境變數的Path值,把msys64的幾個bin路徑都挪到perl路徑後面,確保編譯openssl時呼叫新安裝的perl程式,而非呼叫msys64的perl程式。
二、安裝Nasm
如果之前已經在msys64中安裝了nasm,此時就不必再安裝nasm,可以直接使用msys64裡面安裝的nasm程式。詳細的nasm安裝說明參見《FFmpeg開發實戰:從零基礎到短影片上線》一書的“1.3.3 安裝已編譯的FFmpeg及其dll庫”。
三、編譯安裝OpenSSL
因為libsrt依賴於openssl庫,所以編譯libsrt前要先編譯openssl庫。openssl的原始碼下載頁面是https://www.openssl.org/source/,比如openssl-3.3.0的下載連結為https://www.openssl.org/source/openssl-3.3.0.tar.gz。
openssl的編譯和安裝步驟說明如下。
1、開啟VisualStudio的控制檯,也就是開始選單依次選擇“Visual Studio 2022”——“x86_x64 Cross Tools Command Prompt for VS 2022”。然後解壓openssl的原始碼包,並進入解壓後的目錄,也就是執行下面命令:
2、執行下面命令透過perl配置openssl庫:
3、執行下面命令編譯openssl。
4、編譯完成後,執行下面命令安裝openssl。(該步驟編譯比較久,請耐心等待)
5、給Windows環境變數新增OPENSSL_ROOT_DIR,變數值為OpenSSL的安裝路徑“E:\Apache\openssl”。
四、配置libsrt
libsrt是一款SRT協議的支援庫。它的原始碼託管頁面是https://github.com/Haivision/srt,最新版本是2023年8月釋出的libsrt-1.5.3,該版本的原始碼包下載地址是https://github.com/Haivision/srt/archive/refs/tags/v1.5.3.tar.gz。
先解壓下載完的原始碼包,再開啟cmake-gui,在Source欄填入libsrt的原始碼路徑比如E:/VisualProject/srt-1.5.3,在Build欄填入libsrt的編譯路徑比如E:/VisualProject/srt-1.5.3/build。如下圖所示。
接著單擊cmake-gui視窗中部左側的Configure按鈕,開始配置srt原始碼。等待配置完畢,單擊Configure按鈕右邊的Generate按鈕,開始生成srt原始碼的vs工程。等待生成完畢,單擊Generate按鈕右邊的Open Project按鈕,啟動VisualStudio自動載入srt的vs工程。
五、編譯libsrt
等待VisualStudio啟動完畢,依次選擇頂部選單“生成”→“配置管理器”,在開啟的配置管理器介面上,找到左上角的“活動解決方案配置”下拉框,把Debug模式改為Release模式,再單擊右下角的關閉按鈕。
接著單擊介面右側解決方案列表中的srt_shared,再依次選擇頂部選單“生成”→“生成srt_shared”(或“Build srt_shared”)。等待生成完畢,即可在srt原始碼路徑的build/Release目錄下找到libsrt的庫檔案(包括srt.dll和srt.lib)。
六、安裝libsrt
雖然VisualStudio把libsrt的dll庫檔案編譯了出來,但是若想讓FFmpeg識別libsrt,還得依照相應的目錄結構放入libsrt的庫檔案和標頭檔案,從而模擬Linux環境的安裝結果。詳細的安裝步驟參考《FFmpeg開發實戰:從零基礎到短影片上線》一書的第8章的“8.1.4 給FFmpeg整合freetype”。
1、在msys64的/usr/local目錄下新建libsrt目錄,並在該目錄下建立lib子目錄;
2、把srt原始碼路徑的build/Release目錄下的srt.lib和srt.dll兩個檔案複製到上面第一步建立的lib目錄;
3、在lib目錄下建立pkgconfig子目錄,把srt原始碼路徑下的build/srt.pc複製到pkgconfig目錄,並將該pc檔案的下面這行配置。
改為下面這行配置
4、在libsrt目錄下建立include目錄,並在include目錄建立srt子目錄,把srt原始碼路徑的build/version.h以及srtcore目錄下的access_control.h、logging_api.h、platform_sys.h、srt.h、udt.h等標頭檔案都複製到srt目錄下。還要把srt原始碼路徑的common下面的win目錄整個複製到include目錄下。
經過以上步驟操作後的libsrt目錄結構如下所示:
5、接著給環境變數PKG_CONFIG_PATH新增libsrt的pkgconfig路徑,也就是在/etc/profile檔案末尾新增如下一行內容。
6、儲存並退出profile檔案後,在MSYS視窗中執行下面命令重新載入環境變數。
7、執行下面命令檢視當前的環境變數,發現PKG_CONFIG_PATH的修改已經奏效。
七、讓FFmpeg啟用libsrt
由於FFmpeg預設未啟用libsrt,因此需要重新配置FFmpeg,標明啟用libsrt,然後重新編譯安裝FFmpeg。FFmpeg的Windows環境完整編譯過程參見《FFmpeg開發實戰:從零基礎到短影片上線》一書的“8.1 Windows環境編譯FFmpeg”,詳細的啟用步驟說明如下。
1、回到FFmpeg原始碼的目錄,執行以下命令重新配置FFmpeg,主要增加啟用libsrt。(增加了選項--enable-libsrt)
2、執行下面命令編譯FFmpeg。
3、執行下面命令安裝FFmpeg。
4、執行以下命令檢視FFmpeg的版本資訊。
檢視控制檯回顯的FFmpeg版本資訊,找到“--enable-libsrt”,說明FFmpeg正確啟用了SRT協議的支援庫libsrt。
更多詳細的FFmpeg開發知識參見