全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网
视频点播

安卓常见问题

更新时间:2017-10-30 14:43:49

Q: Android 基础版本出现java.lang.NoSuchFieldError: No field height of type I in class Lcom/aliyun/snap/snap_core/R$id; or its superclasses (declaration of ‘com.aliyun.snap.snap_core.R$id’ appears in /data/app/com.rablive.jwrablive-2/base.apk:classes2.dex)的错误 —- (重要)

A:出现这个错误的原因是因为在开发者的工程中存在和AAR(SDk)一样的xml.于是导致冲突。解决方法:找到出现冲突的xml,开发者自行加前缀。目前发现容易冲突的xml包括:activity_setting.xml和activity_video_play.xml

Q:Android 基础版出现java.lang.NoSuchFieldError: No static field notification_template_lines of type I in class Lcom/aliyun/snap/snap_core/R$layout; or its superclasses (declaration of ‘com.aliyun.snap.snap_core.R$layout’ appears/data/app/com.Aliyun.AliyunVideoSDK.VodSaaSDemo_android-1/base.apk) —-(重要)

A:目前基本的原因是因为基础版SDK是一个UI不开源的SDK, 所以内部是引用了support包的,但是打成AAR时是没有support包打入的,这就导致id不对应的情况. 目前需要客户将support版本包对应. 如下:

  1. //重要如果工程中引入第三方库也引入了support包,也必须要保证第三方的包版本对应,建议以源码引入第三方库
  2. compile 'com.android.support:appcompat-v7:24.2.1'
  3. compile 'com.android.support:design:24.2.1'

但是有时候第三方库带support包修改起来比较麻烦可能有些第三方包并不是源码引入的,这样建议在Application里面的gradle配置中.

  1. configurations.all {
  2. resolutionStrategy {
  3. force 'com.android.support:appcompat-v7:24.2.1'
  4. force 'com.android.support:design:24.2.1'
  5. }
  6. }

Q:SDK内部是否有获取视频封面的接口

A:iOS使用系统接口获取即可,安卓目前专业版提供了接口:AliyunIThumbnailFetcher 可以获取非关键帧的图片,其他版本建议使用系统函数取帧。

Q:横屏录制如何实现

1.用户如果需要默认横屏只需要将界面UI元素旋转引导用户横屏拍摄视频,不需要设置界面横屏,让界面固定竖屏即可。android:screenOrientation=”portrait”
2.用户横屏拍摄的视频录制完成合成的视频是会带旋转角度的,旋转角度以录制的第一段为准。
3.如果是专业版的客户,在编辑之后调用合成接口合成的视频将会输出一个不带角度的视频。
比如原始视频为360/640 角度:270 —-> 变为640 /* 360
所以基础版和标准版的客户因为只有录制功能,如果横屏拍摄会得到一个带旋转角度的视频,这个视频是以拍摄时第一段的角度为准的。专业版的客户录制时的行为同基础版和标准版,合成完成后视频不带角度,转换为一个角度为0,宽高变换的视频。

  • 关键接口函数:
    1. /**
    2. * 设置视频旋转角度值
    3. * @param rotation
    4. */
    5. void setRotation(int rotation);
  • 接口调用条件:设置旋转角度需要在初始化完成之后设置,且需要保证录制第一段之前调用。
  • 调用步骤:让界面固定竖屏,然后设置旋转角度即可。
    1. 0.设置界面竖屏,让界面的UI元素旋转,引导用户拍摄横屏的视频。
    2. 1.同普通录制的初始化 见“ 3.2.1 录制视频
    3. 2.在调用开始录制前调用,注意旋转角度需要用户自己获取,可以参考demo使用OrientationDetector来获取方向。
    4. mRecorder.setRotation(int rotation);
    5. 3.继续录制步骤,注意每次调用startRecording前都需要设置旋转角度以此来确定每段视频的旋转角度(重要)

Q:关于安卓指令集的兼容

A:目前SDK提供的指令集:armeabi-v7a 只提供这个版本的原因是因为这个版本就能够兼容,且让大家的包大小减少,具体的文档见上文档.

为什么报错:原因是因为您使用的其他的第三方包提供了其他指令集的的包.导致比如64位的手机会去找arm64-v8a的包。这样就肯定找不到.

建议:其他第三方包全部使用armeabi-v7a的包. 如果其他第三方的包没有提供armeabi-v7a的包.可以这样做.将SDK的so拷贝到armeabi里面.然后使用gradle命令行加入:

defaultConfig {
    …
    ndk {
    abiFilters “armeabi”//如果需要保证armeabi-v7a这里改成armeabi-v7a就可以了.
    }

最后:如何查看打的包打入了so呢? 最简单的方法.使用解压工具apk后缀修改为.zip,直接查看libs里面的so是否打入

本文导读目录