Skip to content

timeout

Franken Zeng edited this page Aug 5, 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返回码。

Clone this wiki locally