本文主要介绍 Android 与 iOS 端几类常见问题及相应解决方案。
Android&iOS
出现“no v4 play info”异常?
通过 FileId 播放时,需要首先使用 Adaptive-HLS(10) 转码模板对视频进行转码,或者使用超级播放器签名 psign 指定播放的视频,否则可能导致视频播放失败。
在未开启防盗链进行播放的过程中,如果出现了“no v4 play info”异常,建议您使用 Adaptive-HLS(10) 转码模板对视频进行转码,或直接获取源视频播放链接通过 URL 方式进行播放。具体操作方法参见 通过 FileId 播放(点播)。
如何提取播放器日志进行错误反馈?
如何拉取腾讯云的媒资进行播放?
与 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-v7a
和 arm64-v8a
两个架构的 so 文件,或者只打包 jar,安装后动态下载 so 文件。具体教程请参见 如何缩减安装包。如何减少控制台 log 输出?
10.2 版本开始,可以通过设置 LogLevel,把不需要关注的 Log 过滤掉:TXLiveBase.setLogLevel(TXLiveConstants.LOG_LEVEL_DEBUG)。
当播放视频时,如果用户锁屏或将应用程序退到后台,可能会导致播放器被系统杀掉或禁止联网,如何处理?
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 部分进行即可。