-
Notifications
You must be signed in to change notification settings - Fork 146
timeout
- (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返回码。
readTimeout设置值 | 网络中断后不恢复 | 网络中断10、20、30秒后恢复 | 网络中断40秒后恢复 |
---|---|---|---|
10 | 10秒后播放结束,错误码-1004 | 10秒后播放结束,错误码-1004 | 10秒后播放结束,错误码-1004 |
120 | 120秒后播放结束,错误码-1004 | 播放恢复 | 快速播放一段视频后结束,错误码-1004(rtmp流)或者正常结束(http流) |
readTimeout设置值 | 停止推流后不恢复 | 停止推流10、20、30秒后重新开始 | 停止推流40秒后重新开始 |
---|---|---|---|
10 | 播放端10秒后结束,错误码-1004 | 播放端10秒后结束,错误码-1004 | 播放端10秒后结束,错误码-1004 |
120 | 播放端30秒后结束,错误码-1004(rtmp流)或者正常结束(http流) | 播放恢复 | 播放端30秒后结束,错误码-1004(rtmp流)或者正常结束(http流) |
- 当APP拥有后台播放音频权限时播放不受影响
- 当APP没有后台播放音频权限时,由于后台期间无法与CDN通信,将有可能出现播放失败。
当切后台停留15秒、20秒时:
readTimeout设置值 | 切后台15秒 | 切后台20秒 | 切后台30秒 |
---|---|---|---|
10 | 播放恢复 | 错误码-1004 | 错误码-1004 |
120 | 播放恢复 | 播放恢复 | 播放恢复 |
当切后台停留40秒、50秒、60秒时:
readTimeout设置值 | 切后台40秒 | 切后台50秒 | 切后台55秒 | 切后台60秒 |
---|---|---|---|---|
10 | 错误码-1004 | 错误码-1004 | 正常结束 | 错误码-1004 |
120 | 播放恢复 | 错误码1 | 正常结束 | 正常结束 |
以上为http流的状态,rtmp流在切换后台导致播放结束时都是-1004错误码
播放结束是指SDK产生MPMoviePlayerPlaybackDidFinishNotification通知,同时不再继续播放视频,参见结束原因;
请将问题提供至issues: https://github.com/ksvc/KSYMediaPlayer_iOS/issues