Skip to content

7 常见问题

michael.chen edited this page Mar 11, 2019 · 23 revisions

7 常见问题

  1. 如何定位问题
  2. 如何移除不需要的so库
  3. Android Demo推流提示"url signature failed"
  4. 提示"Sorry no such domain, please contact us AE AM"错误日志
  5. Android 6.0 移植之后出现闪退
  6. Demo工程编译出错

如何定位问题

问题定位一般可从三方面着手,直播端 - 后端服务(含网络) - 播放端,遇到问题可按照以下步骤对客户端进行简单的定位,其中step 1和step 2是可以在移动端进行的

step 1. 直播端定位:上行速度是否正常

  • 情形1: 已安装Demo

    可打开Demo调试面板,查看速度统计

  • 情形2: 未安装Demo

    可打开手机网络速度统计(各机型请自行查询打开方式),同时关闭后台程序

上行速度判断

  • 速度为0,则推流未开启或者推流失败
  • 速度很小,0 ~ 15KB/s,一般是机型编码失败,可切换软编重试
  • 速度正常,> 30KB/s,说明可正常推流

[结果分析]

  • 推流速度正常,则说明问题可能存在于后端服务或者播放端,请继续step 2
  • 如果无法正常推流,可尝试以下检查
    • 对比Demo程序,检查是否SDK接入过程有误。
    • 检查签名是否正确配置

step 2. 播放端定位:对比其他播放工具

可尝试使用其他播放工具,vlc、ffplay等,或者网页端播放工具: http://www.cutv.com/demo/live_test.swf

[结果分析]

  • 其他播放工具和播放端都无法播放,则说明问题可能存在于网络线路或者后端服务,请继续step 3
  • 其他播放工具可正常播放,但是播放端无法播放,可尝试以下检查
    • 播放id是否正确与推流id保持一致

step 3. 后端服务、网络定位

  • 推流线路切换比对: 可在Demo中切换线路2尝试重新推流播放,若播放成功,则说明网络线路或者后端服务存在问题
  • DNS是否正常解析: 可使用ping工具进行检查

1. 如何移除不需要的so库

目前SDK的打包方式为aar,包含了armeabi, armeabi-v7a, arm64-v8a, x86四种主流CPU架构

1.1 假设暂不需要x86架构的,只需在build.gradle添加如下代码即可:

buildTypes {
    release {
        ndk {
            abiFilters "armeabi", "armeabi-v7a", "arm64-v8a"
        }
    }
    debug {
        ndk {
            abiFilters "armeabi", "armeabi-v7a", "arm64-v8a"
        }
    }
}

1.2 若暂不需要连麦相关的服务

  1. 在移植的过程中可以删除如下资源:
ulive-demo/libs/armeabi-v7a
ulive-demo/libs/armeabi-x86
ulive-demo/libs/arm64-v8a
ulive-demo/libs/agora-rtc-sdk.jar
ulive-demo/libs/videoprop.jar
ulive-demo/src/main/jni
(展示接入连麦的Demo示例)
ulive-demo/src/main/java/com/ucloud/ulive/example/ext/agora 
  1. 在移植的过程中可以修改:ulive-demo/bulid.gradle文件去除编译jni之后的效果及依赖库说明。
apply plugin: 'com.android.application'

android {
    compileSdkVersion rootProject.ext.compileSdkVersion
    buildToolsVersion rootProject.ext.buildToolsVersion
    defaultConfig {
        applicationId "com.ucloud.ulive.example"
        minSdkVersion rootProject.ext.minSdkVersion
        targetSdkVersion rootProject.ext.targetSdkVersion
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            ndk {
//                abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86'
                //如果使用到第三方库没有完整提供,选择共有完整的类型,下同 SDK 完整提供 armeabi,armeabi-v7a,arm64-v8a,x86
                //仅保留armeabi-v7a
                abiFilters 'armeabi-v7a'
            }
        }
        debug {
            jniDebuggable true
            ndk {
                abiFilters 'armeabi-v7a'
            }
        }
    }
    lintOptions {
       abortOnError false
    }
    sourceSets {
        main {
            assets.srcDirs = ['assets']
            jniLibs.srcDir 'libs'
        }
    }
}

repositories {
    flatDir {
        dirs 'libs'
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    //Demo 依赖
    compile 'com.android.support:preference-v7:' + rootProject.ext.LIB_PREFERENCE_V7 
    //Demo 依赖 展示支持android-gpu扩展依赖,实际按需依赖 若没有使用android-gpu的滤镜效果,忽略
    compile 'jp.co.cyberagent.android.gpuimage:gpuimage-library:1.4.1'
    //Demo依赖
    compile 'com.jakewharton:butterknife:8.8.1'
    //Demo依赖
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
    //Demo依赖,友盟相统计服务,移植过程忽略
    compile 'com.umeng.analytics:analytics:latest.integration' 

    //直播&点播公共库 必须依赖
    compile(name: 'ucommon-android-sdk-2.0.0', ext: 'aar')
    //直播推流必须依赖
    compile(name: 'ulive-android-sdk-2.0.0', ext: 'aar')
    //播放功能必须依赖
    compile(name: 'uvod-android-sdk-2.0.0', ext: 'aar') 
}

2. Android 6.0 移植之后出现闪退

Android 6.0之后需要动态申请权限,请参考 Android 官方文档
https://developer.android.com/training/permissions/requesting.html

3. Demo工程编译出错

确认以下几点:

  1. 在UCDLive_Android目录下执行gradlew.bat clean(windows)/gradlew clean(OSX or Linux),若出现错误,会有相应提示。

  2. 确认安装好了andriod sdk & android ndk(当前我们开发过程使用的版本是android-ndk-r13b)

  3. 在UCDLive_Android工程目录下,增加local.properties,加入NDK&SDK的配置信息。

ndk.dir=your_ndk_path\\android-ndk-r13b
sdk.dir=your_android_sdk_path\\Android\\sdk
  1. 当前Demo使用的工具&SDK版本
com.android.tools.build:gradle:2.3.3 
(若使用的较低版本,推荐升到2.3.3,低版本提示externalNativeBuild方法找不到)
compileSdkVersion = 25
buildToolsVersion = '25.0.2'
minSdkVersion = 18
targetSdkVersion = 25
LIB_APPCOMPAT_V7= '25.3.1'
LIB_PREFERENCE_V7= '25.3.1'
  1. 相关资源在执行gradlew.bat时会自动下载,确保因网络问题,没有下载下来,也可以自行依赖本地 存在的资源。