windows編譯ZLMediaKit流媒體服務webrtc

爆发的驴子發表於2024-03-06

環境說明

ZLMediaKit編譯需要的軟體

visual studio 2022
cmake 3.29.0-rc2
OpenSSL 1.1.1w(不想踩坑的話安裝這個版本)
libsrtp 2.6.0

ZLMediaKit編譯後執行需要

libsrtp 編譯後且配置環境變數
ZLMediaKit 編譯後檔案

visual studio

Snipaste_2024-02-28_17-33-25

Snipaste_2024-02-28_17-34-19

Snipaste_2024-02-28_17-35-53

cmake

visual stuido 20222,自帶cmake

cmake可以到這兩個地方下載:下載1下載2

Snipaste_2024-02-28_09-48-44

Snipaste_2024-02-27_13-02-04

Snipaste_2024-02-28_09-49-07

Snipaste_2024-02-28_09-49-24

Snipaste_2024-02-29_15-12-23

Snipaste_2024-02-29_15-12-30

測試是否成功

C:\Users\XXX>cmake
Usage

  cmake [options] <path-to-source>
  cmake [options] <path-to-existing-build>
  cmake [options] -S <path-to-source> -B <path-to-build>

Specify a source directory to (re-)generate a build system for it in the
current working directory.  Specify an existing build directory to
re-generate its build system.

Run 'cmake --help' for more information.

OpenSSL

可以到OpenSSL安裝window編譯版本, 記得要下載是exe或msi檔案,不要light的檔案!!!!!

Snipaste_2024-02-27_13-02-04

按步驟安裝,安裝地址為:C:\Program Files\OpenSSL-Win64

Snipaste_2024-02-27_15-49-25

配置環境變數一定要配置正確!!!

Snipaste_2024-02-27_09-46-14

測試

C:\Users\XXX>openssl -v
OpenSSL 3.2.1 30 Jan 2024 (Library: OpenSSL 3.2.1 30 Jan 2024)

可以不重啟電腦,但必須關閉已經開啟cmd視窗,否則會顯示'openssl' 不是內部或外部命令,也不是可執行的程式
或批處理檔案。

libsrtp

libsrtp下載後解壓,解壓路徑地址為: D:\XXX\soft\libsrtp-2.6.0

有兩種編譯方式:

第一種: visual stuidocmake結合使用

  1. 首先在D:\XXX\soft\libsrtp-2.6.0\libsrtp-2.6.0新建build和install兩個資料夾

  2. 開啟cmake軟體
    Snipaste_2024-02-29_14-26-41

  3. 完成後出現紅色配置,勾選上BUILD_SHARED_LIBS、ENABLE_OPENSSL、以及CMAKE_INSTALL_PREFIX的路徑,然後點生成。注意這裡有個問題Could NOT find OpenSSL

    Snipaste_2024-02-29_14-29-54

  4. 如果3順利的話,完成後的結果(換回1.1.1的測試結果),然後點open project

    Snipaste_2024-02-29_16-54-09

  5. 會開啟vs

    Snipaste_2024-02-29_17-13-25

  6. 生成後會出現一些錯誤(但無影響)

    Snipaste_2024-02-29_17-14-51

  7. install資料夾生成的目錄

    install目錄│檔案列表:
     ├ include
     │  └ srtp2
     │     │ auth.h
     │     │ cipher.h
     │     │ crypto_types.h
     │     └ srtp.h
     └ lib
        │ srtp2.dll
        │ srtp2.lib
        └ cmake
           └ libSRTP
              │ libSRTPConfig.cmake
              │ libSRTPConfigVersion.cmake
              │ libSRTPTargets-debug.cmake
              └ libSRTPTargets.cmake
    
  8. 配置環境變數到path

    D:\XXX\soft\libsrtp-2.6.0\libsrtp-2.6.0\install
    D:\XXX\soft\libsrtp-2.6.0\libsrtp-2.6.0\install\lib
    

編譯ZLMediaKit

在使用VS開啟ZLMediaKit專案時,如果未開啟webrtc, 會出現

[CMake] -- set_file_group D:/XXX/project/ZLMediaKit/src 205
1> [CMake] -- srt 功能已開啟
1> [CMake] CMake Warning at webrtc/CMakeLists.txt:28 (message):
1> [CMake]   srtp 未找到, WebRTC 相關功能開啟失敗

要開啟webrtc,需要保證以下正確

  • 開啟了webrtc

    Snipaste_2024-02-29_17-51-14

  • libsrtp編譯正確且配置環境變數

開啟成功的話, 會出現下面,然後安裝ZLMediaKit

> [CMake] -- Enable wepoll
1> [CMake] -- set_file_group D:/XXX/project/ZLMediaKit/3rdpart/ZLToolKit/src 80
1> [CMake] -- set_file_group D:/XXX/project/ZLMediaKit/src 205
1> [CMake] -- srt 功能已開啟
1> [CMake] -- found library: D:/XXX/soft/libsrtp-2.6.0/libsrtp-2.6.0/install/lib/srtp2.lib
1> [CMake] -- SCTP LIBRARIES: SCTP_LIBRARIES-NOTFOUND
1> [CMake] -- SCTP INCLUDE DIRS: SCTP_INCLUDE_DIRS-NOTFOUND
1> [CMake] -- WebRTC 功能已開啟

image-20240229175901339

如果不行先把out和release資料夾刪除,再重新開啟vs,然後安裝ZLMediaKit

Snipaste_2024-02-22_16-33-28

測試webrtc

開啟編譯目錄,雙擊MediaServer.exe

image-20240301114721947

先推流,用obs推流

Snipaste_2024-03-01_18-08-44

chrome瀏覽器開啟

Snipaste_2024-03-01_18-05-58

點確定

Snipaste_2024-03-01_18-06-14

點開始

Snipaste_2024-03-01_18-09-45

問題

  • MediaServer.exe開啟後,由於找不到 srtp2.dll,無法繼續執行程式碼。重新安裝程式可能會解決此問題

    檢查srtp2.dll的環境變數是否正確,如:D:\XXX\soft\libsrtp-2.6.0\libsrtp-2.6.0\install\lib

    image-20240301112912727

  • Could NOT find OpenSSL

CMake Error at C:/Program Files/Microsoft Visual Studio/2022/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.28/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
  Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the
  system variable OPENSSL_ROOT_DIR (missing: OPENSSL_CRYPTO_LIBRARY
  OPENSSL_INCLUDE_DIR) (Required is at least version "1.1.0")		C:/Program Files/Microsoft Visual Studio/2022/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.28/Modules/FindPackageHandleStandardArgs.cmake	230		

開始以為是安裝openssl步驟有問題,改為第一個選項,結果還是這樣的介面

Snipaste_2024-02-28_10-13-28

然後看了報錯

try to set the path to OpenSSL root folder in the system variable OPENSSL_ROOT_DIR

新增了環境變數

```
OPENSSL_ROOT_DIR	C:\Program Files\OpenSSL-Win64
OPENSSL_CRYPTO_LIBRARY	C:\Program Files\OpenSSL-Win64\lib
OPENSSL_INCLUDE_DIR	C:\Program Files\OpenSSL-Win64\include
```

Snipaste_2024-02-27_13-07-31

完成後重啟,清除快取生成依然沒有效果

image-20240229160034606

解決方式

  • 換版本OpenSSL: Win64OpenSSL-1_1_1w.msi, 省很多事

    C:\Users\XXX>openssl version
    OpenSSL 1.1.1w  11 Sep 2023
    

    安裝完成它的lib目錄結構為:

    lib目錄│檔案列表:
     │ capi.lib
     │ dasync.lib
     │ ec_internal_test.lib
     │ libapps.lib
     │ libcrypto.def
     │ libcrypto.lib
     │ libcrypto_static.lib
     │ libssl.def
     │ libssl.lib
     │ libssl_static.lib
     │ libtestutil.lib
     │ openssl.lib
     │ ossltest.lib
     │ padlock.lib
     │ uitest.lib
     └ VC
        │ libcrypto64MD.lib
        │ libcrypto64MDd.lib
        │ libcrypto64MT.lib
        │ libcrypto64MTd.lib
        │ libssl64MD.lib
        │ libssl64MDd.lib
        │ libssl64MT.lib
        │ libssl64MTd.lib
        └ static
           │ libcrypto64MD.lib
           │ libcrypto64MDd.lib
           │ libcrypto64MT.lib
           │ libcrypto64MTd.lib
           │ libssl64MD.lib
           │ libssl64MDd.lib
           │ libssl64MT.lib
           └ libssl64MTd.lib
    

相關文章