有奖捉虫:办公协同&微信生态&物联网文档专题 HOT
本文主要介绍 Android 与 iOS 端几类常见问题及相应解决方案。

Android&iOS

出现“no v4 play info”异常?

通过 FileId 播放时,需要首先使用 Adaptive-HLS(10) 转码模板对视频进行转码,或者使用超级播放器签名 psign 指定播放的视频,否则可能导致视频播放失败。
在未开启防盗链进行播放的过程中,如果出现了“no v4 play info”异常,建议您使用 Adaptive-HLS(10) 转码模板对视频进行转码,或直接获取源视频播放链接通过 URL 方式进行播放。具体操作方法参见 通过 FileId 播放(点播)

如何提取播放器日志进行错误反馈?

播放器 SDK 默认把运行的 log 输出到本地文件,腾讯云技术支持 在帮忙定位问题时,需要这些运行 log 分析问题。可以通过 此教程 进行 log 提取。

如何拉取腾讯云的媒资进行播放?

出于安全的考虑,目前没有提供从 App 直接拉取腾讯云媒资的接口。您需要通过 App>App 服务后台>腾讯云这个路径拉取腾讯云的媒资。后台服务可以调用云 API:搜索媒体信息接口,获取列表。

与 TRTC 共存,播放视频声音变小?

项目中 TRTC 和播放器共存的情况下,出现播放视频时声音变小的情况(被压制)。 解决方案:10.0版本以上的 SDK,在创建播放器播放视频之前,先调用 attachTRTC 方法绑定:
// iOS端代码示例:
[_txVodPlayer attachTRTC:trtcCloud];
[_txVodPlayer startPlay:url]
// Android端代码示例:
mVodPlayer.attachTRTC(trtcCloud);
mVodPlayer.startPlay(url);

在手机上使用网络代理或者抓包工具导致视频播放失败怎么处理?

手机设置 http 代理的时候,需要把 localhost 设置为绕过代理。
Android 手机设置举例: 手机设置 > WIFI 设置 > 对应的 WIFI 链接 > 进入高级设置页 > 手动设置 http 代理下面有个绕过代理的框,填入 localhost。

Android SDK

播放过程中没有画面怎么处理?

请检查 SurfaceView 或 TextureView 是否绑定了 TXVodPlayer 对象。

如何减少包体积?

如果之前没有使用过9.4以及更早版本的 SDK 的 下载缓存功能(TXVodDownloadManager 中的相关接口),并且不需要在9.5及后续 SDK 版本播放9.4及之前缓存的下载文件,可以不需要该功能的 so 文件,达到减少安装包的体积,例如:在9.4及之前版本使用了 TXVodDownloadManager 类的 setDownloadPath 和 startDownloadUrl 函数下载了相应的缓存文件,并且应用内存储了 TXVodDownloadManager 回调的 getPlayPath 路径用于后续播放,这时候需要 libijkhlscache-master.so 播放该 getPlayPath 路径文件,否则不需要。可以在 app/build.gradle 中添加:
packagingOptions {
exclude "lib/armeabi/libijkhlscache-master.so"
exclude "lib/armeabi-v7a/libijkhlscache-master.so"
exclude "lib/arm64-v8a/libijkhlscache-master.so"
}
如果您的 App 只在中国大陆地区使用,可以打包 armeabi-v7aarm64-v8a 两个架构的 so 文件,或者只打包 jar,安装后动态下载 so 文件。具体教程请参见 如何缩减安装包

如何减少控制台 log 输出?

10.2 版本开始,可以通过设置 LogLevel,把不需要关注的 Log 过滤掉:TXLiveBase.setLogLevel(TXLiveConstants.LOG_LEVEL_DEBUG)。

当播放视频时,如果用户锁屏或将应用程序退到后台,可能会导致播放器被系统杀掉或禁止联网,如何处理?

为了避免这种情况,可以在 App 内使用前台服务。关于如何使用前台服务,可以参考官方文档

Android P 系统上使用播放器出现错误 "java.io.IOException: Cleartext HTTP traffic to 127.0.0.1 not permitted", 导致无法播放视频,如何处理?

出于安全考虑,从 Android P 开始,Google 要求 App 的请求都使用加密链接。播放器 SDK 会启动一个 localsever 代理 http 请求,因此可以通过 网络安全配置 来开启允许向127.0.0.1发送 http 请求。
1. 在项目新建 res/xml/network_security_config.xml 文件,设置网络安全性配置。
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">127.0.0.1</domain>
</domain-config>
</network-security-config>
2. 在 AndroidManifest.xml 文件下的 application 标签增加以下属性。
<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
<application android:networkSecurityConfig="@xml/network_security_config"
... >
...
</application>
</manifest>

iOS SDK

集成 SDK 运行以后,运行后出现“[TXCThumbPlayer thumbPlayerBundleId] unrecognized selector”类型的 Crash?

此问题是由于 SDK 中包含类别(category)所致,这里需要增加“-ObjC”标志位,具体步骤如下: 打开 Xcode,选择对应的 Target,选择 Build Setting,搜索 Other Link Flag 输入 -ObjC

集成 SDK 运行以后,运行后出现“dyld[34620]: Library not loaded: @rpath/TXFFmpeg.framework/TXFFmpeg” 类型的 Crash?

此问题是由于动态库 TXFFmpeg.framework 集成进了 Project 中,但未设置“Embed & Sign”导致:
1. 打开 Xcode,选择对应的 Target,选择 General
2. 选择 Frameworks,Libraries,and Embedded Content,选择 TXFFmpeg.framework,并在右侧选择 Embed & Sign。

播放控制面板显示不出来?

播放控制面板显示是通过 MPNowPlayingInfoCenter 来显示的,通过设置 nowPlayingInfo 属性可以更新标题、图片以及设置声音大小等,具体可以参见 SuperPlayer Demo

减少控制台 log 输出?

10.2 版本开始,可以通过设置 TXLiveBase.h 中的 setLogLevel 接口来设置 LogLevel,[TXLiveBase setLogLevel:LOGLEVEL_DEBUG] ,数值越大输出的日志越少,即: 0 ( 输出所有级别的日志)~ 6(不输出任何日志),具体可以参见 TXLiveBase.h。

遇到用 appid + fileid 播放视频失败,提示14010020错误?

此类问题是由于文件(.mp4 或 .hls)下载失败所致,请使用10.6及以上的 SDK 进行尝试,此类问题已经在新版本进行了修复。

播放器下载 TXVodDownloadManager 下载 m3u8 文件,TXVodDownloadDelegate 回调里没有 size 和 downloadSize 大小的数值?

此类问题是由于 m3u8 文件的标准协议没有包含文件的大小,而每个分片的 ts 只有在请求时才能获取到大小,因此无法在下载之前准确返回文件的大小。

在 iOS13 及以上的设备上,选择相册视频播放时提示“播放失败”?

此类问题是由于 iOS13 及以上,相册插件访问的路径发生了变更(如:var/mobile/Containers/Data/PluginKitPlugin/tmp), 可以通过将相册数据复制到沙盒底下的临时目录来提供路径访问(例如 tmp 目录等)。

集成的播放器 SDK 有 .framework 和 .xcframework 版本,这两者有何差异?

其实播放器的 .framework 和 .xcframework 版本本质上没有太大的差异。主要区别在于.xcframework 的 SDK 适配了 M1 及以上的设备,所以支持了ARM64 模拟器架构。在使用上,如果项目是采用 pods 进行管理的项目工程,podspec 上已经做了适配,在使用上是无感的,可以随意进行版本切换。对于手动集成的项目或者自己搭建了私有 pods 的项目,则需要自己更新头文件的搜索路径。

SDK 有无适配苹果最新的隐私清单?应该怎么集成到项目工程里?

我们从11.7.15343版本开始已经适配了苹果最新的隐私清单,并且已经发布。
1. 如果是通过 pods 方式集成的 SDK,可以直接在项目里设置依赖11.7.15343版本。
2. 如果是通过手动方式集成的 SDK,可以参考 SDK 集成指引 - 手动集成 SDK 部分进行即可。