1. 程式人生 > 實用技巧 >從零開始實現內網遠端桌面①:編譯kvswebrtc

從零開始實現內網遠端桌面①:編譯kvswebrtc

  市面上常見的桌面助手有:Windows遠端桌面/Vnc/Teamviewer/向日葵等。

  經過技術分析,我們發現支援內網的助手其網路互動模式與webrtc十分類似,有mediastream用於傳輸畫面,然後用datachannel傳輸鍵鼠指令以及可能有的檔案傳輸。因此我們底層使用webrtc來構建

  由於我一直提倡“知其所以然”。所以我選用開源的專案來構建

  kvswebrtc依賴於openssl、srtp、usrsctp、kvspic。我們挨個來編譯。

  先下載所有程式碼(我使用了映象加速),其實都是github:

cd /d H:\whenyoulink
git clone https:
//github.com.cnpmjs.org/openssl/openssl.git -b OpenSSL_1_1_1g git clone https://github.com.cnpmjs.org/cisco/libsrtp.git git clone https://github.com.cnpmjs.org/sctplab/usrsctp.git cd usrsctp git reset --hard 939d48f9632d69bf170c7a84514b312b6b42257d cd .. git clone https://github.com.cnpmjs.org/awslabs/amazon-kinesis-video-streams-pic.git
cd amazon-kinesis-video-streams-pic git reset --hard bdad27051d0ef5b823e1916d02b40fc57678156a cd .. git clone https://github.com.cnpmjs.org/warmcat/libwebsockets.git -b v3.2.3 git clone https://github.com.cnpmjs.org/awslabs/amazon-kinesis-video-streams-producer-c.git cd amazon-kinesis-video-streams-producer-c git reset --hard 15f124e5a5561679cf001bb36c2c758073740681
cd .. git clone --recursive https://github.com.cnpmjs.org/awslabs/amazon-kinesis-video-streams-webrtc-sdk-c.git

  

  然後先編譯幾個依賴庫(amazon-kinesis-video-streams-producer-c不需要編譯,只用其標頭檔案;libwebsockets其實編譯只是為了提取標頭檔案,也不需要使用其庫檔案)

  (當然,需要從visual studio的命令列啟動,而且需要安裝c++編譯器)

  

cd /d H:\whenyoulink
cd openssl
perl Configure VC-WIN32 no-asm --prefix=%cd%\_install --openssldir=%cd%\openssldir
nmake && nmake install
cd ..

cd libsrtp
mkdir build && cd build
cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%cd%\..\install -DENABLE_OPENSSL=TRUE -DBUILD_SHARED_LIBS=FALSE -DOPENSSL_ROOT_DIR=%cd%\..\..\openssl\_install ..
nmake && nmake install
cd ..\..

cd usrsctp
mkdir build && cd build
cmake -G "NMake Makefiles" -DCMAKE_INSTALL_PREFIX=%cd%\..\install -DCMAKE_BUILD_TYPE=Release -Dsctp_werror=0 ..
nmake && nmake install
cd ..\..

cd amazon-kinesis-video-streams-pic
mkdir build && cd build
cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%cd%\..\install -DBUILD_DEPENDENCIES=OFF ..
nmake && nmake install
cd ..\..

cd libwebsockets
mkdir build && cd build
cmake -G "NMake Makefiles" -DCMAKE_INSTALL_PREFIX=%cd%\..\install -DLWS_WITH_HTTP2=1 -DLWS_HAVE_HMAC_CTX_new=1 -DLWS_HAVE_SSL_EXTRA_CHAIN_CERTS=1 -DLWS_HAVE_OPENSSL_ECDH_H=1 -DLWS_HAVE_EVP_MD_CTX_free=1 -DLWS_WITHOUT_SERVER=1 -DLWS_WITHOUT_TESTAPPS=1 -DLWS_WITH_THREADPOOL=1 -DLWS_WITHOUT_TEST_SERVER_EXTPOLL=1 -DLWS_WITHOUT_TEST_PING=1 -DLWS_WITHOUT_TEST_CLIENT=1 -DLWS_WITH_STATIC=1 -DLWS_WITH_SHARED=0 -DLWS_STATIC_PIC=1 -DLWS_WITH_ZLIB=0 -DLWS_HAVE_EVENTFD=0 -DLWS_WITH_MBEDTLS=OFF -DCMAKE_BUILD_TYPE=Release -DOPENSSL_ROOT_DIR=%cd%\..\..\openssl\_install ..
nmake && nmake install
cd ..\..

  然後改一下程式碼再編譯kvswebrtc,官方程式碼有個bug。

  

  還需要改動一下cmakelists.txt,不查詢gstreamer

  

xcopy /e /y H:\whenyoulink\amazon-kinesis-video-streams-pic\install\include H:\whenyoulink\amazon-kinesis-video-streams-webrtc-sdk-c\src\include
xcopy /e /y H:\whenyoulink\amazon-kinesis-video-streams-producer-c\src\include H:\whenyoulink\amazon-kinesis-video-streams-webrtc-sdk-c\src\include
xcopy /e /y H:\whenyoulink\libsrtp\install\include H:\whenyoulink\amazon-kinesis-video-streams-webrtc-sdk-c\src\include
xcopy /e /y H:\whenyoulink\libwebsockets\install\include H:\whenyoulink\amazon-kinesis-video-streams-webrtc-sdk-c\src\include
xcopy /e /y H:\whenyoulink\openssl\_install\include H:\whenyoulink\amazon-kinesis-video-streams-webrtc-sdk-c\src\include
xcopy /e /y H:\whenyoulink\usrsctp\install\include H:\whenyoulink\amazon-kinesis-video-streams-webrtc-sdk-c\src\include

cd /d H:\whenyoulink
cd amazon-kinesis-video-streams-webrtc-sdk-c
mkdir build && cd build
cmake -G "NMake Makefiles" -DBUILD_DEPENDENCIES=OFF -DBUILD_SAMPLE=OFF -DOPENSSL_ROOT_DIR=%cd%\..\..\openssl\_install -DSRTP_LIBRARIES=%cd%\..\..\libsrtp\install -DUsrsctp=%cd%\..\..\usrsctp\install -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%cd%\..\install ..
nmake && nmake install

  最後我們把靜態庫連結成動態庫,到時候給C#用。

  我們用vs建立一個dll專案

  

  然後就建立兩個檔案,直接生成

  

  

  最後修改時間2020-12-1221:05:55