移动直播播放不了的排查方法

移动直播的常见排查手段过程最主要是了解移动直播推流的url是怎样的

一个推流url引起的问题

直播中大多数问题是推流的url不正确导致的,那么推流url是怎么样了,下面来讲解url的规则

推流地址的拼接规则

推流地址可以通过后台自动拼装得到

常见问题

1.域名是否 CNAME 到了腾讯云地址?

流域名只有 CNAME 到腾讯云地址才能推流成功,可以在【[域名管理](https://console.cloud.tencent.com/live/domainmanage)】里面查看已经创建的推流域名是否有 CNAME。其中有个 CNAME 标题栏,可以根据此项中的状态来查看推流域名是否有 CNAME。已经 CNAME 的状态如下: ![](https://main.qcloudimg.com/raw/ec13b07a9da29afe71f587b53ba9fbaa.jpg)

2.txsecret秘钥是否正确在直播直播鉴权控制比对

https://cloud.tencent.com/document/product/267/32463

3.txTime是否过期

txTime 过期有些客户担心自己的直播流量被人盗用,会将 txTime 设置的过于保守,例如从当前时间开始往后推5分钟。其实由于有 txSercet 签名的存在,txTime 的有效期不用设置的太短。相反,如果有效期设置的太短,当主播在直播过程中遭遇网络闪断时会因为推流 URL 过期而无法恢复推流。

txTime 建议设置为当前时间往后推12或者24小时为宜,也就是要长于一场普通直播的直播时间

那推流url怎么生成呢

移动直播的流id就这个直播码 下面云控制台更具体介绍

用户自己判断流的情况方法

判断直播流是否正常断流在云控制台的辅助工具中有断流诊端原因

可以查询断流错误具体错误码可以参考下面的链接

https://cloud.tencent.com/document/product/267/35256

也自己查看简单的流的情况

https://cloud.tencent.com/document/product/267/31161

移动直播sdk怎么设置推流情况

推流配置参数 LivePushConfig

每秒需要多少帧画面FPS以及gop表示多少秒一个i帧

TXLivePushConfig mLivePushConfig=new TXLivePushConfig

mLivePushConfig.setVideoEncodeGop(5)代表设置的gop为5秒一个i帧

mLivePushConfig.setVideoFPS(15) 表示每秒需要15帧画面

其它一些参数都可通过推流配置对象.set设置,不一一列出如下图

可参考https://cloud.tencent.com/document/product/454/34756

设置setVideoQuality

推流的时候setVideoQuality 设置视频编码质量。包括是否开启动态码率开关。动态切分辨率开关,画质类型标清,高清,超高清

参考代码如下

推流码率设置

其中视频码率对直播也有影响,网络较差又使用较高的码率会造成卡顿,这个时候可以调整码率,只有开启码率自适应, 该设置项才能启作用:setAutoAdjustBitrate(boolean)

才能设置最大和最小码率setMaxVideoBitrate,setMinVideoBitrate

,开启后,SDK会根据网络情况自动调节视频码率,调节范围在(videoBitrateMin - videoBitrateMax)

播放流畅度控制

也在TXLivePlayConfig指定

直播播放器有三种缓存策略对应就是播放的时候的极速 流畅 自动

其实就是设置自适应缓冲时长 和最小缓冲时长 和最大缓冲时长

代码语言:javascript
复制
TXLivePlayConfig mPlayConfig = new TXLivePlayConfig();
//
//自动模式
mPlayConfig.setAutoAdjustCacheTime(true);
mPlayConfig.setMinAutoAdjustCacheTime(1);
mPlayConfig.setMaxAutoAdjustCacheTime(5);
//
//极速模式
mPlayConfig.setAutoAdjustCacheTime(true);
mPlayConfig.setMinAutoAdjustCacheTime(1);
mPlayConfig.setMaxAutoAdjustCacheTime(1);
//
//流畅模式
mPlayConfig.setAutoAdjustCacheTime(false);
mPlayConfig.setCacheTime(5);
//
mLivePlayer.setConfig(mPlayConfig);
//设置完成之后再启动播放

点击下图的红框修改播放的缓存策略,用demo测试

非rtmp流的直播播放器调试工具

第一个按钮

开始播放和暂停播放

第二个按钮

硬件加速,当某些手机软件效果不好的时候可以开启

第三个按钮

横竖屏切换

第四个按钮

小屏和大屏幕切换,注意的是只有竖屏才生效

第五个按钮

播放模式包括极速,流畅,自动

缓存策略

流的状态不对

没有结束之前的流,流的状态控制不对主要参考,以及检测自己的推流是否暂停onstop和重新播放onresume

用于推流的 TXLivePusher 和用于显示影像的 TXCloudVideoView 都是不能多实例并行运转的,所以清理工作不当会导致下次直播遭受不良的影响。

代码语言:javascript
复制
//结束推流,注意做好清理工作
public void stopRtmpPublish() {
    mLivePusher.stopCameraPreview(true); //停止摄像头预览
    mLivePusher.stopPusher();            //停止推流
    mLivePusher.setPushListener(null);   //解绑 listener
}

两个重要判断流的方法

其中sdk中TXLivePlayListener

onPlayEvent(事件通知) 和 onNetStatus(状态反馈)这两个事件可以判断播放事件状态 和流的信息状态

TXLivePlayer的onPlayEvent事件判断
onNetStatus当前流再网络传输中的一些参数指标

通过onNetStatus中的一些状态参数判断当前的流的状态

移动直播有意义的参数指标

拿 demo的调试工具

1.rtmp推流是否成功

第一个按钮

开始播放和暂停播放

第二个按钮

前后置摄像头

第三个按钮

手机聚焦和自动聚焦切换

第四个按钮

硬件加速

第五个按钮

简单美颜

第六个按钮

日志显示信息

第七个按钮

设置推流模式包括自适应码率自适应分辨率

第八个按钮

重力感应切换横竖屏,注意的是只有在手机没有锁定方向才生效生效

这里弹窗可以看出你的流再哪一阶段的大骤出现的问题

值得一提的终端测试工具中,i图标的按钮都会弹窗了解到推流的信息

移动直播应用功能测试

还可以使用移动直播的摄像头推流和直播拉流分别测推流情况和拉流情况,方法同上

扫码测试

demo中带有二维码扫描的图片 ,demo中的扫码功能都是一套的,所以只要遇到下面图片就可以使用扫描测试,比较快捷,只要将你的url 找个在线二维码工具转换,输入你的url转换二维码

下面举个使用播放器的demo测试你的拉流地址的列子

主界面
进入超级播放器界面
点击扫码后界面

特殊机型不能播放的问题

andriod9.0手机手机只能播放 RTMP 格式的流,无法播放HTTP-FLV 格式的流。

使用https协议的播放地址将flv格式的播放地址总http替换成https 如果上图中的高级配置的https配置

https://cloud.tencent.com/document/product/267/32826?from=10680

直接在AndroidMainfest.xml 标签下使用 android:usesCleartextTraffic="true"

具体参考修改参考https://cloud.tencent.com/developer/article/1399337

其它问题

录制 转码 截图鉴黄 水印 问题

可以参考云直播的服务端api文档,提供了API Explorer工具,该工具非常适用调试服务端调用接口

https://console.cloud.tencent.com/api/explorer?Product=live&Version=2018-08-01&Action=CreateLiveCallbackRule

并结合云直播控制台使用

https://cloud.tencent.com/document/product/267/20379

或者提供流id和bizid

一条正常的推流,音视频数据的比特率、cpu消耗、上行网速、网络波动、推流数据堆积等等都稳定在正常值范围内,不在范围内的异常数据很好分辨。

工作人会通过后台运营系统查询整个直播链路的过程,以及你的流是否推到upload服务器,是否生成录制文件,以及

推流信息 的上下码率 情况是否稳定等