在嵌入式裝置中實現webrtc的第三種方式①
最近兩年,我對於網路知識,包括底層協議學習比較多,webrtc這種幾乎是使用到了所有層面網路協議的技術也逐漸進入我的視野。
之前我提出了兩種在嵌入式裝置上實現webrtc的方式,一是用官方程式碼,然後改編譯鏈,但是這條路是留給c++高玩的,因為它的程式碼是用最新的c++17寫的,你必須重寫adm(Audio Device Manager),我其實根本不會c++,平時只是改改同事的程式碼,所以路是斷的;第二種是使用janus(實際上用到的就一兩百行程式碼,我是直接參考webrtcgateway)和rtcdc組合拳,這個我根本沒法跟大家解釋原理,因為這條路我雖然走通了,但比前一條路應該是難太多,它要求你懂webrtc協議棧所有網路協議,然後還得會使用和整合數個三方庫,期間你會移植十幾個庫……而且最終你還面臨沒有jitterbuffer的窘境,而且還得自己做aec(Acoustic Echo Cancellation)
實際上第二條路是很舒服的,如果走通,你會發現你進入了一個新境界。
好,廢話說太多了,進入正題,今天我介紹一個目前看起來更優於前兩個方法的webrtc嵌入式實現。他就是amazon-kinesis提供的裝置端sdk。
https://github.com/awslabs/amazon-kinesis-video-streams-webrtc-sdk-c
大家可以看作是第二種方式的優化版本,畢竟是大廠,肯定比我們自己擰螺絲更健壯。
這篇文章主要是介紹如果編譯它,我仍然以海思系列晶片為例。
(首先我們可能需要一個牆外的伺服器,我是在阿里雲買了一週的美國ecs,因為中途git clone太慢了)
1.先拉取程式碼
git clone --recursive https://github.com/awslabs/amazon-kinesis-video-streams-webrtc-sdk-c.git
2.然後更改srtp的CMakeLists,不生成測試檔案(因為它link.txt裡面會寫-lpthread,我的嵌入式編譯器不認)
-D TEST_APPS=OFF
3.執行cmake
export CC=arm-himix200-linux-gcc CXX=arm-himix200-linux-g++ mkdir build && cd build cmake .. -DBUILD_SAMPLE=FALSE -DBUILD_STATIC_LIBS=TRUE -DBUILD_OPENSSL=TRUE -DBUILD_OPENSSL_PLATFORM=linux-generic32 -DBUILD_LIBSRTP_HOST_PLATFORM=x86_64-unknown-linux-gnu -DBUILD_LIBSRTP_DESTINATION_PLATFORM=arm-unknown-linux-uclibcgnueabi
其中BUILD_SAMPLE=FALSE對於我是必要的,因為跟2一樣,link.txt裡面還是-lpthread
4.make
5.拿到所有編譯出來的.a和需要的.h。
除了這裡的兩個.a和3個.h之外,還需要把引用的庫和標頭檔案拿出來
當然,實際上我們用不了這麼多
(這裡面編譯的openssl不知道為什麼我用不了,如果你也爆下面的錯,你也跟我一樣重新編譯一下openssl)
我編譯openssl的指令如下(期間還需要刪一下-m32)
#setarch i686 ./Configure no-asm no-shared --prefix=/mnt/f/hisi/workspace/openssl-OpenSSL_1_1_0h/_install --cross-compile-prefix=arm-himix200-linux- linux-generic32 make
最後我們來生成一個sdp試試
編譯後放到裝置上執行,輸出如下:
有高手希望指點的話可以通過微信與我聯絡,我的id是wxid_8r2mjkbcu2an22
最後修改時間 2020-10-27 15:4