Notice: iconv(): Detected an illegal character in input string in /data/home/qxu1146460029/htdocs/doc/templates/default/default.tpl on line 70 常见问题 Fork me on GitHub

Q:Android的.so库那么小,为什么iOS的.a库那么大?

A:Android平台目前支持armeabi-v7a,arm64-v8a,x86三个版本,so库大小分布为2.5M,3.3M,4M。属于动态链接库,在编译链接时已经经过了strip处理,只保留了必要程序和符号信息。iOS目前的SDK中包含了armv7,armv7s,arm64,i386,x86_64这5个架构打包成一个.a文件,属于静态链接库。iOS从8.0后才开始支持动态库所以为了兼容性我们继续使用静态库的形式。这种形式编译链接后没有strip,链接了所有的第三方库程序和符号,所以体积比较大。但最终生成app时,xcode会进行strip处理,并丢弃多余的程序和符号。另外,i386和x86_64是为了支持模拟器运行而引入,生成app时不会链接。armv7s现在也属于Apple申明不用支持的架构,所以不要在意目前iOS的库较大,真正生成app时会小很多很多。

Q:Android平台为什么没有提供armeabi架构?

A: armeabi架构在Android定义中为ARMV5T,由于此CPU架构是非常非常过时的,并且性能非常低,市面上几乎绝迹,完全不用支持.但如果你使用的其他so库是以armeabi架构发布,那么直接拷贝v7目录里的so进去也是没有问题的.

Q:Android平台的4个架构的so我需要全部使用吗?

A:其实不需要,如果你的app对生成的apk大小非常敏感或者有限制,那你只使用v7a的架构也能支持目前市面上绝大部分用户.因为Android 64位系统同时也包含了32位的运行库,所以你的源码中只要不包含arm64-v8a目录,并提供armeabi-v7a,32位与64位处理器的手机均能正常使用.64位相比32位的库,在性能上没有显著的提升.x86架构与x86_64也是一样的原理.

Q:客户-“我的项目里使用了FFmpeg,为什么在iOS平台链接你们的sdk后无法使用了?”

A:我们的iOS平台的.a库里链接了ffmpeg的5个库,libavcodec,libavformat,libavutil,libswresample,libswscale.我们对这5个库进行了精简,只保留了必要的文件。iOS平台只方便以静态库的形式链接,所以会和你使用的其他ffmpeg库冲突。解决方法是,不要链接你的ffmpeg库,整个程序都使用我们提供的.a中包含的ffmpeg。大部分时候都是能正常工作的,如果你们有用到特殊的协议,编解码器等。

Q:Android系统是6.0,初次运行推流并没有弹出权限申请框,发布的视频没有声音也没有画面.

A:从6.0系统开始,如果AndroidManifest.xml中(Eclipse)或者app的build.gradle中(Android Studio)的targetSdkVersion大于等于23,那么系统将启用新的运行时权限模式.这需要编写通过代码申请,由于此处处理逻辑与上层关系较大,因此没有包含在sdk中自动处理.以下是一段调用第三方库来申请的例子

 compile 'com.anthonycr.grant:permissions:1.0'
PermissionsManager.getInstance().requestAllManifestPermissionsIfNecessary(this,
                new PermissionsResultAction() {
                    @Override
                    public void onGranted() {

                    }

                    @Override
                    public void onDenied(String permission) {

                    }
                });

Q:iPhone系统是10,开始推流就崩溃,9却不会

A:iOS10系统强制要求info.plist文件中必须申明摄像头和麦克风权限的申请说明.添加一下代码到info.plist文件中:

  <key>NSCameraUsageDescription</key>
  <string>此 App 需要您的同意才能访问摄像头</string>
  <key>NSMicrophoneUsageDescription</key>
  <string>此 App 需要您的同意才能访问麦克风</string>