-
Notifications
You must be signed in to change notification settings - Fork 30
7 常见问题
michael.chen edited this page Mar 11, 2019
·
23 revisions
- 如何定位问题
- 如何移除不需要的so库
- Android Demo推流提示"url signature failed"
- 提示"Sorry no such domain, please contact us AE AM"错误日志
- Android 6.0 移植之后出现闪退
- Demo工程编译出错
问题定位一般可从三方面着手,直播端
- 后端服务(含网络)
- 播放端
,遇到问题可按照以下步骤对客户端进行简单的定位,其中step 1和step 2是可以在移动端进行的
-
情形1: 已安装Demo
可打开Demo调试面板,查看速度统计
-
情形2: 未安装Demo
可打开手机网络速度统计(各机型请自行查询打开方式),同时关闭后台程序
上行速度判断
- 速度为0,则推流未开启或者推流失败
- 速度很小,0 ~ 15KB/s,一般是机型编码失败,可切换软编重试
- 速度正常,> 30KB/s,说明可正常推流
[结果分析]
- 推流速度正常,则说明问题可能存在于后端服务或者播放端,请继续step 2
- 如果无法正常推流,可尝试以下检查
- 对比Demo程序,检查是否SDK接入过程有误。
- 检查签名是否正确配置
可尝试使用其他播放工具,vlc、ffplay等,或者网页端播放工具: http://www.cutv.com/demo/live_test.swf
[结果分析]
- 其他播放工具和播放端都无法播放,则说明问题可能存在于网络线路或者后端服务,请继续step 3
- 其他播放工具可正常播放,但是播放端无法播放,可尝试以下检查
- 播放id是否正确与推流id保持一致
- 推流线路切换比对: 可在Demo中切换线路2尝试重新推流播放,若播放成功,则说明网络线路或者后端服务存在问题
- DNS是否正常解析: 可使用ping工具进行检查
目前SDK的打包方式为aar,包含了armeabi, armeabi-v7a, arm64-v8a, x86四种主流CPU架构
buildTypes {
release {
ndk {
abiFilters "armeabi", "armeabi-v7a", "arm64-v8a"
}
}
debug {
ndk {
abiFilters "armeabi", "armeabi-v7a", "arm64-v8a"
}
}
}
- 在移植的过程中可以删除如下资源:
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
- 在移植的过程中可以修改: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')
}
Android 6.0之后需要动态申请权限,请参考 Android 官方文档
https://developer.android.com/training/permissions/requesting.html
确认以下几点:
-
在UCDLive_Android目录下执行gradlew.bat clean(windows)/gradlew clean(OSX or Linux),若出现错误,会有相应提示。
-
确认安装好了andriod sdk & android ndk(当前我们开发过程使用的版本是android-ndk-r13b)
-
在UCDLive_Android工程目录下,增加
local.properties
,加入NDK&SDK的配置信息。
ndk.dir=your_ndk_path\\android-ndk-r13b
sdk.dir=your_android_sdk_path\\Android\\sdk
- 当前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'
- 相关资源在执行gradlew.bat时会自动下载,确保因网络问题,没有下载下来,也可以自行依赖本地 存在的资源。
- 1 阅读对象
- 2 功能特性
- 3 开发准备
- 4 快速开始
- 4.1 运行 Demo 源码
- 4.2 项目集成 SDK
- step 1: 导入 SDK 库,并添加依赖
- step 2: 初始化 SDK 环境,并添加权限
- step 3: 添加界面元素
- step 4: 创建推流对象,并进入准备状态
- step 5: 启动预览
- step 6: 启动推流
- 5 功能使用
- 6 播放器集成
- 7 常见问题
- 8 反馈和建议
- 9 版本历史
- 10 项目上线注意事项