Stories

Detail Return Return

FFmpeg開發筆記(六十七)Windows給FFmpeg集成支持RIST協議的librist - Stories Detail

​《FFmpeg開發實戰:從零基礎到短視頻上線》一書的“10.2  FFmpeg推流和拉流”提到直播行業存在RTSP和RTMP兩種常見的流媒體協議。除此以外,還有比較兩種比較新的流媒體協議,分別是SRT和RIST。

其中SRT全稱為Secure Reliable Transport,中文叫做安全可靠傳輸協議。RIST全稱為Reliable Internet Stream Transport,中文叫做可靠的互聯網流傳輸協議。SRT和RIST兩個協議均在2017年發佈,騰訊視頻雲已將SRT作為傳輸層之上的協議。根據騰訊視頻雲的實踐,相比傳統的RTMP直播協議,SRT對推流卡頓問題有明顯改善。
接下來以微軟的視窗系統為例,介紹如何在Windows環境給FFmpeg集成支持RIST協議的librist,具體的操作步驟説明如下:

一、配置librist

librist是一款RIST協議的支持庫。它的源碼託管頁面在 https://code.videolan.org/rist/librist ,最新版本是2024年11月發佈的librist-v0.2.11,該版本的源碼包下載地址是 https://code.videolan.org/rist/librist/-/archive/v.0.2.11/lib...
librist的配置步驟説明如下。

1、安裝編譯工具meson和ninja

meson和ninja是基於Python語言的編譯工具,故需確保Windows系統已經安裝了Python3。另外,還要按照《FFmpeg開發實戰:從零基礎到短視頻上線》第一章的“1.3.2  安裝依賴的Windows軟件”給電腦安裝Visual Studio 2022。
接着依次選擇Windows開始菜單的“Visual Studio 2022”→“x64 Native Tools Command Prompt for VS 2022”,打開Visual Studio 2022的命令行界面,執行以下命令安裝meson和ninja。

pip3 install meson
pip3 install ninja

2、使用meson配置librist

先下載最新的librist源碼,解壓下載後的源碼包,再從Visual Studio 2022的命令行進入librist源碼目錄:

cd librist-v.0.2.11

然後運行下面命令生成librist的VS工程:

meson setup build --buildtype=release --backend=vs

配置完成後,librist源碼目錄下出現build目錄,裏面便是meson給librist生成的VS工程。

二、編譯librist

打開Visual Studio 2022,在歡迎頁面單擊右側的“打開項目或解決方案”,在彈出的文件對話框中選擇librist-v.0.2.11\build目錄下的libRIST.sln。
打開librist工程後,依次選擇頂部菜單:生成→生成→生成librist,Visual Studio就開始編譯librist模塊。編譯過程可在Visual Studio界面下方觀察,直到編譯完成如下圖所示。

此時可在librist-v.0.2.11\build目錄下找到librist.lib和librist.dll,這兩個文件就是編譯生成的librist庫文件。

三、安裝librist

確保Windows系統已經按照《FFmpeg開發實戰:從零基礎到短視頻上線》第一章“1.3  Windows系統安裝FFmpeg”的説明安裝配置了MSYS,再按照以下步驟在MSYS環境安裝librist。
1、在msys64的/usr/local目錄下新建librist目錄,並在該目錄下創建lib子目錄;
2、把librist工程中build目錄下的librist.lib和librist.dll兩個文件複製到第一步創建的lib目錄;
3、在lib目錄下創建pkgconfig子目錄,並把librist工程的build\meson-private\librist.pc複製到pkgconfig目錄;然後打開librist.pc,把開頭一行改成下面這樣。

prefix=/usr/local/librist

4、把librist工程的include目錄複製到msys64的/usr/local/librist目錄,把build\include\librist目錄複製到msys64的/usr/local/librist/include目錄;
經過以上步驟操作後的librist目錄結構如下所示。

/usr/local/librist
 |--------------- lib
 |                 |----- librist.lib
 |                 |----- librist.dll
 |                 |----- pkgconfig
 |                           |----- librist.pc
 |--------------- include
 |                 |----- librist
 |                           |----- librist.h
 |                           |----- librist_config.h
 |                           |----- ……

四、編譯安裝FFmpeg

先下載最新的FFmpeg源碼(版本號需大於等於7.1),再把FFmpeg源碼包複製到MSYS環境的/usr/local/src目錄下。接着在MSYS控制枱執行下面命令解壓源碼包:

cd /usr/local/src
unzip ffmpeg-n7.1.1.zip

確保MSYS環境已經按照《FFmpeg開發實戰:從零基礎到短視頻上線》該書第八章的“8.1.1  給FFmpeg集成x264”和“8.1.5  給FFmpeg集成x265”安裝了H.264的編碼器libx264和H.265的編碼器libx265,也按照該書第十章的“10.1.1  FFmpeg集成SDL”安裝了Windows系統的SDL2庫,並且按照之前的文章安裝了H.266的編碼器libvvenc,然後執行下面命令配置FFmpeg的編譯環境:

cd ffmpeg-n7.1.1
export PKG_CONFIG_PATH=/usr/local/librist/lib/pkgconfig:$PKG_CONFIG_PATH
./configure --prefix=/usr/local/ffmpeg --arch=x86_64 --enable-shared --disable-static --disable-doc --enable-libx264 --enable-libx265 --enable-libvvenc --enable-liblc3 --enable-librist --enable-sdl2 --enable-gpl --enable-nonfree --enable-iconv --enable-zlib --cross-prefix=x86_64-w64-mingw32- --target-os=mingw32

配置完畢執行下面命令編譯和安裝FFmpeg,編譯完成的ffmpeg庫將會安裝到configure指定的/usr/local/ffmpeg目錄。

make
make install
cp /usr/local/librist/lib/librist.dll /usr/local/ffmpeg/bin

五、查看FFmpeg的安裝結果

運行下面命令查看FFmpeg的安裝版本:

ffmpeg -version

上面命令返回的FFmpeg版本信息如下:

ffmpeg version 7.1.1 Copyright (c) 2000-2025 the FFmpeg developers
built with gcc 12.2.0 (Rev10, Built by MSYS2 project)
configuration: --prefix=/usr/local/ffmpeg --arch=x86_64 --enable-shared --disable-static --disable-doc --enable-libx264 --enable-libx265 --enable-libvvenc --enable-liblc3 --enable-librist --enable-sdl2 --enable-gpl --enable-nonfree --enable-iconv --enable-zlib --cross-prefix=x86_64-w64-mingw32- --target-os=mingw32
libavutil      59. 39.100 / 59. 39.100
libavcodec     61. 19.101 / 61. 19.101
libavformat    61.  7.100 / 61.  7.100
libavdevice    61.  3.100 / 61.  3.100
libavfilter    10.  4.100 / 10.  4.100
libswscale      8.  3.100 /  8.  3.100
libswresample   5.  3.100 /  5.  3.100
libpostproc    58.  3.100 / 58.  3.100

根據以上返回的版本信息,可知已安裝的FFmpeg版本號為7.1.1,同時configuration這行找到“--enable-librist”,説明FFmpeg已經啓用了支持RIST協議的librist。

更多詳細的FFmpeg開發知識參見《FFmpeg開發實戰:從零基礎到短視頻上線》一書。

user avatar yushang_66b0e8718bd85 Avatar
Favorites 1 users favorite the story!
Favorites

Add a new Comments

Some HTML is okay.