簡體   English   中英

支持armv7和arm64的iOS webRTC庫

[英]iOS webRTC library supporting both armv7 & arm64

如何獲得支持iOS中armv7和arm64的webRTC庫?

你很幸運。 我剛剛完成將webrtc集成到我的項目中幾天。 我的解決方案如下:

  1. 將為armv7構建的所有* .a組合到libWebRTC-armv7.a:使用如下命令行

    libtool -static -o src / out_ios_armv7 / Release-iphoneos / libWebRTC-temp.a src / out_ios_armv7 / Release-iphoneos / * .a

    strip -S -x -o src / out_ios_armv7 / Release-iphoneos / libWebRTC-armv7.a -r src / out_ios_armv7 / Release-iphoneos / libWebRTC-temp.a

  2. 將為arm64構建的所有* .a組合到libWebRTC-arm64.a:

    libtool -static -o src / out_ios / Release-iphoneos / libWebRTC-temp.a src / out_ios / Release-iphoneos / * .a

    strip -S -x -o src / out_ios / Release-iphoneos / libWebRTC-arm64.a -r src / out_ios / Release-iphoneos / libWebRTC-temp.a

  3. 創建libWebRTC支持armv7和arm64:

    lipo -create src / out_ios_armv7 / Release-iphoneos / libWebRTC-armv7.a src / out_ios / Release-iphoneos / libWebRTC-arm64.a -output libWebRTC.a

Ps:使用arm64將armv7庫構建到分離的文件夾:

export GYP_GENERATORS="ninja"
export GYP_DEFINES="build_with_libjingle=1 build_with_chromium=0 libjingle_objc=1 OS=ios target_arch=armv7"
export GYP_GENERATOR_FLAGS="$GYP_GENERATOR_FLAGS output_dir=out_ios_armv7"
export GYP_CROSSCOMPILE=1
pushd src
gclient runhooks
ninja -C out_ios_armv7/Release-iphoneos AppRTCDemo
popd

你可以參考我們的博客:

http://io.diveinedu.com/2015/02/02/%E7%AC%AC%E4%BA%94%E7%AB%A0-WebRTC%E7%9A%84iOS%E6%A1%86%E6 %9E%B6%E7%BC%96%E8%AF%91.html

我編寫了一個shell腳本來構建WebRTC源到一個框架(不包括apprtc信令庫)供iOS使用。

如果你不懂中文,你只需閱讀該博客中嵌入的腳本,就足夠了! 啊哈。

./build_webrtc.sh build_all

armv7設備可能存在錯誤。 該錯誤是由armv7 neon函數中的VP8解碼中的堆棧溢出問題引起的。

您可以確認此修補程序以修復崩潰:

diff --git a/source/libvpx/vp8/common/arm/neon/vp8_subpixelvariance_neon.c b/source/libvpx/vp8/common/arm/neon/vp8_subpixelvariance_neon.c
index 8308d55..a66b6f5 100644
--- a/source/libvpx/vp8/common/arm/neon/vp8_subpixelvariance_neon.c
+++ b/source/libvpx/vp8/common/arm/neon/vp8_subpixelvariance_neon.c
@@ -1003,7 +1003,7 @@ unsigned int vp8_sub_pixel_variance8x8_neon(
         const unsigned char *dst,
         int dst_stride,
         unsigned int *sse) {
-  DECLARE_ALIGNED_ARRAY(kAlign16, uint8_t, temp2, kHeight8 * kWidth8);
+  DECLARE_ALIGNED_ARRAY(kAlign16, uint8_t, temp2, kHeight8PlusOne * kWidth8);
   DECLARE_ALIGNED_ARRAY(kAlign16, uint8_t, fdata3, kHeight8PlusOne * kWidth8);
   if (xoffset == 0) {
     var_filter_block2d_bil_w8(src, temp2, src_stride, kWidth8, kHeight8,

希望這可以幫到你!

diveinedu.com的學生剛剛克服並修復了這個錯誤。

謝謝phuongle,這真的有用......

......但是扭曲......

......正如Omer Waqas Khan所注意到的那樣,可能會出現一個人可能會遇到錯誤信息的情況(同時出現問題): 兩個lib都不能具有相同的結構

當然,我去了WTF ......胖子,你怎么了......他們的結構不同......我建議他們這樣做......

但后來我開始仔細檢查它:
- 我進入了arm64_merged lib的文件夾...

lipo -info lib's_name.a

它報告了armv7和arm64類型。 困惑,我接着......

lipo -info *.a

...所有的庫(其中72個)報告的類型為arm64,除了2 ...

libisac_fix.a
libisac_neon.a

無論出於何種原因,他們都是armv7。 當天早些時候,我正在使用webrtc thingy的“幾天之久”克隆。 那時候,我記得總是只獲得70個圖書館。 但是,由於其他原因,我決定

gclient sync

在那之后,我結束了72 ...因此,我剛剛刪除了libisac廢話。 現在2個fat_libs是不同類型的,我可以成功地脂肪。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM