-
Notifications
You must be signed in to change notification settings - Fork 146
timeout
Franken Zeng edited this page Aug 5, 2016
·
14 revisions
- (void)setTimeout:(int)prepareTimeout readTimeout:(int)readTimeout
参数说明
- prepareTimeout,建立链接超时时间,默认值是10秒
- readTimeout,拉流超时时间,默认值是30秒
具体错误码请见:KSYMPErrorCode
KSYMPErrorCode | Value | 含义 |
---|---|---|
KSYMPErrorCodeFileIOError | -1004 | 读写数据异常 |
KSYMPErrorCodeInvalidData | -10011 | 无效媒体数据 |
不同的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错误码
当直播流已经开播,过程中也可能出现长时间拉取不到流的情况。一般这时候有几种原因:
- 主播网络切换,正在断流重连;
- 主播关闭了房间,没有音视频数据推流;
- 源站数据异常,CDN回源拉取数据失败;
- CDN节点内部异常,无法给播放器提供新数据;
- 播放器所在网络异常,无法连接CDN;
当超过readTimeout阈值时,将命中读超时。命中读超时的具体现象:
- 播放之前cache的残余音视频流;
- 提供MPMoviePlayerPlaybackDidFinishNotification通知,错误码为KSYMPErrorCodeFileIOError;
一些小经验:
主播网络切换时,主播端会进行断流重连,重新连上并推流取决于主播端的网络。为了兼容该场景,建议直播时设置较大的readTimeout阈值,比如20秒或者30秒。
备注
举例CDN版本为2016年8月5日版本,后续CDN会提供4xx/5xx返回码。