Skip to content

timeout

shixuemei edited this page Sep 22, 2016 · 14 revisions

超时

1. 使用说明

- (void)setTimeout:(int)prepareTimeout readTimeout:(int)readTimeout

参数说明

  • prepareTimeout,建立链接超时时间,默认值是10秒
  • readTimeout,拉流超时时间,默认值是30秒

2. 错误码

具体错误码请见:KSYMPErrorCode

KSYMPErrorCode Value 含义
KSYMPErrorCodeFileIOError -1004 读写数据异常
KSYMPErrorCodeInvalidData -10011 无效媒体数据

3. prepareTimeout

不同的CDN厂商处理拉流请求是不一样的,当从金山云CDN节点拉取直播流时,如果流名不存在,HTTP请求行为并不会返回404,而是200。并且需要耗时10秒左右。如果设置正确的prepareTimeout参数,可以尽快返回。

假设访问不存在的流名时,金山云CDN10秒后返回200 HTTP code。此时播放器finish时携带的errorCode

  • prepareTimeout小余10秒 当CDN未返回200 HTTP CODE时,已经命中播放器超时逻辑,此时返回KSYMPErrorCodeFileIOError错误码

  • prepareTimeout大于等于10秒 当CDN返回200 HTTP CODE后,播放器读取数据异常,此时返回KSYMPErrorCodeInvalidData错误码

4. readTimeout

当直播流已经开播,过程中也可能出现长时间拉取不到流的情况。一般这时候有几种原因:

  • 主播网络切换,正在断流重连;
  • 主播关闭了房间,没有音视频数据推流;
  • 源站数据异常,CDN回源拉取数据失败;
  • CDN节点内部异常,无法给播放器提供新数据;
  • 播放器所在网络异常,无法连接CDN;

当超过readTimeout阈值时,将命中读超时。命中读超时的具体现象:

  • 播放之前cache的残余音视频流;
  • 提供MPMoviePlayerPlaybackDidFinishNotification通知,错误码为KSYMPErrorCodeFileIOError

一些小经验:

主播网络切换时,主播端会进行断流重连,重新连上并推流取决于主播端的网络。为了兼容该场景,建议直播时设置较大的readTimeout阈值,比如20秒或者30秒。

备注

举例CDN版本为2016年8月5日版本,后续CDN会提供4xx/5xx返回码。

5. 实测数据

5.1 播放端网络中断
readTimeout设置值 网络中断后不恢复 网络中断10、20、30秒后恢复 网络中断40秒后恢复
10 10秒后播放结束,错误码-1004 10秒后播放结束,错误码-1004 10秒后播放结束,错误码-1004
120 120秒后播放结束,错误码-1004 播放恢复 快速播放一段视频后结束,错误码-1004(rtmp流)或者正常结束(http流)
5.2 推流端停止推流
readTimeout设置值 停止推流后不恢复 停止推流10、20、30秒后重新开始 停止推流40秒后重新开始
10 播放端10秒后结束,错误码-1004 播放端10秒后结束,错误码-1004 播放端10秒后结束,错误码-1004
120 播放端30秒后结束,错误码-1004(rtmp流)或者正常结束(http流) 播放恢复 播放端30秒后结束,错误码-1004(rtmp流)或者正常结束(http流)
5.3 播放端切换到后台一段时间后重新切换到前台
  • 当APP拥有后台播放音频权限时播放不受影响
  • 当APP没有后台播放音频权限时表现如下:

|readTimeout设置值|切后台15秒|切后台20秒|切后台30秒| | :---: | :---:| :---:|:---:|:---:|:---:|:---:|:---:| |10|播放恢复|错误码-1004|错误码-1004| |120|播放恢复|播放恢复|播放恢复|

readTimeout设置值 切后台40秒 切后台50秒 切后台55秒 切后台60秒
10 错误码-1004 错误码-1004 正常结束 错误码-1004
120 播放恢复 错误码1 正常结束 正常结束

以上为http流的状态,rtmp流在切换后台导致播放结束时都是-1004错误码

播放结束是指SDK产生MPMoviePlayerPlaybackDidFinishNotification通知,同时不再继续播放视频,参见结束原因

6. 反馈

请将问题提供至issues: https://github.com/ksvc/KSYMediaPlayer_iOS/issues

Clone this wiki locally