ksvc / KSYMediaPlayer_iOS

金山云iOS播放SDK(KSYUN Live Streaming player SDK),支持RTMP HTTP-FLV HLS 协议(supporting RTMP HTTP-FLV HLS protocol),直播延时2-3秒(Living delay 2 or 3 seconds)
http://v.ksyun.com/
Apache License 2.0
561 stars 143 forks source link

demo 还有自己的项目, 网络切换导致播放器无法播放 #87

Open nyz110 opened 6 years ago

nyz110 commented 6 years ago

播放中切换到飞行模式,会收到播放失败的通知 当恢复网络后播放会一直播放失败 错误码-1004 console log

播放器实例:0x101407e30
拉流URL:(null)
服务器IP:36.110.160.37
客户端IP:211.144.203.186
本地DNS IP:117.71.17.81
分辨率:(宽-高: 640-480)
已播时长:0.0s
缓存时长:9.6s
视频总长1200.0s
cache次数:28.5s/5
最大缓冲时长:2.0s
速度: 0.0 kbps
视频/音频渲染用时:61384ms/61258ms
HTTP连接用时:0ms
DNS解析用时:0ms
首包到达用时(连接建立后):212ms
音频时长:0.0s
缓存时长:9.6s
视频总长1200.0s
cache次数:28.5s/5
最大缓冲时长:2.0s
速度: 0.0 kbps
视频/音频渲染用时:61384ms/61258ms
HTTP连接用时:0ms
DNS解析用时:0ms
首包到达用时(连接建立后):212ms
音频\347缓冲队列长度:0.0MB
音频缓冲队列时长:0.0s
已下载音频数据量:0.2MB
视频缓冲队列长度:0.0MB
视频缓冲队列时长:0.0s
已下载视频数据量:1.1MB
已下载总数据量2.1MB
解码帧率:23.95 显示帧率:0.28
网络连通性:WIFI
2018-02-01 10:39:19.030785+0800 KSYPlayerDemo[4052:587559] FFP_MSG_BUFFERING_START
2018-02-01 10:39:19.031177+0800 KSYPlayerDemo[4052:587559] player load state: 4
2018-02-01 10:39:19.031419+0800 KSYPlayerDemo[4052:587559] player start caching
2018-02-01 10:39:19.042489+0800 KSYPlayerDemo[4052:587559] ------------------------
2018-02-01 10:39:19.042954+0800 KSYPlayerDemo[4052:587559] player playback state: 1
2018-02-01 10:39:19.043214+0800 KSYPlayerDemo[4052:587559] ------------------------
flushed last keyframe pts -9223372036854775808 
2018-02-01 10:39:19.045738+0800 KSYPlayerDemo[4052:587559] FFP_MSG_SEEK_COMPLETE
2018-02-01 10:39:19.046066+0800 KSYPlayerDemo[4052:587559] Seek complete
2018-02-01 10:39:19.155174+0800 KSYPlayerDemo[4052:587559] FFP_MSG_BUFFERING_END
2018-02-01 10:39:19.155502+0800 KSYPlayerDemo[4052:587559] loading cost 28.589923 seconds with 6 times
2018-02-01 10:39:19.155773+0800 KSYPlayerDemo[4052:587559] player load state: 3
2018-02-01 10:39:19.322290+0800 KSYPlayerDemo[4052:587559] ------------------------
2018-02-01 10:39:19.322644+0800 KSYPlayerDemo[4052:587559] player playback state: 0
2018-02-01 10:39:19.322846+0800 KSYPlayerDemo[4052:587559] ------------------------
2018-02-01 10:39:19.323941+0800 KSYPlayerDemo[4052:587559] player finish state: 0
2018-02-01 10:39:19.324208+0800 KSYPlayerDemo[4052:587559] player download flow size: 2.014648 MB
2018-02-01 10:39:19.324402+0800 KSYPlayerDemo[4052:587559] buffer monitor  result: 
   empty count: 6, lasting: 28.589923 seconds

打印videoplayer contentURL 为nil

mayudong1 commented 6 years ago

恢复网络后如何做的播放操作呢?

nyz110 commented 6 years ago

没有任何操作,再次点击播放

2018-02-01 10:52:23.738821+0800 KSYPlayerDemo[4052:587559] FFP_MSG_BUFFERING_START
2018-02-01 10:52:23.739191+0800 KSYPlayerDemo[4052:587559] player load state: 4
2018-02-01 10:52:23.739437+0800 KSYPlayerDemo[4052:587559] player start caching
2018-02-01 10:52:23.755793+0800 KSYPlayerDemo[4052:587559] ------------------------
2018-02-01 10:52:23.756125+0800 KSYPlayerDemo[4052:587559] player playback state: 1
2018-02-01 10:52:23.756326+0800 KSYPlayerDemo[4052:587559] ------------------------
flushed last keyframe pts -9223372036854775808 
2018-02-01 10:52:23.759892+0800 KSYPlayerDemo[4052:587559] FFP_MSG_SEEK_COMPLETE
2018-02-01 10:52:23.760292+0800 KSYPlayerDemo[4052:587559] Seek complete
2018-02-01 10:52:23.859988+0800 KSYPlayerDemo[4052:587559] FFP_MSG_BUFFERING_END
2018-02-01 10:52:23.860944+0800 KSYPlayerDemo[4052:587559] loading cost 64.232471 seconds with 4 times
2018-02-01 10:52:23.861269+0800 KSYPlayerDemo[4052:587559] player load state: 3
2018-02-01 10:52:24.026485+0800 KSYPlayerDemo[4052:587559] ------------------------
2018-02-01 10:52:24.026823+0800 KSYPlayerDemo[4052:587559] player playback state: 0
2018-02-01 10:52:24.027025+0800 KSYPlayerDemo[4052:587559] ------------------------
2018-02-01 10:52:24.028077+0800 KSYPlayerDemo[4052:587559] player finish state: 0
2018-02-01 10:52:24.028324+0800 KSYPlayerDemo[4052:587559] player download flow size: 7.801758 MB
2018-02-01 10:52:24.028512+0800 KSYPlayerDemo[4052:587559] buffer monitor  result: 
   empty count: 4, lasting: 64.232471 seconds
2018-02-01 10:53:08.562944+0800 KSYPlayerDemo[4052:587559] ------------------------
2018-02-01 10:53:08.563319+0800 KSYPlayerDemo[4052:587559] player playback state: 2
2018-02-01 10:53:08.563525+0800 KSYPlayerDemo[4052:587559] ------------------------
2018-02-01 10:53:08.659873+0800 KSYPlayerDemo[4052:587559] debug === SDK版本:v2.9.5.5
播放器实例:0x101468b50
拉流URL:https://ks3-cn-beijing.ksyun.com/ksvsdemo/xulei_0815/Aerial%2520China%25201-libx264-640x480-800000.mp4
服务器IP:36.110.160.55
客户端IP:211.144.203.186
本地DNS IP:117.71.17.81
分辨率:(宽-高: 640-480)
已播时长:0.0s
缓存时长:30.9s
视频总长1200.0s
cache次数:64.2s/4
最大缓冲时长:2.0s
速度: 0.0 kbps
视频/音频渲染用时:1156ms/1117ms
HTTP连接用时:0ms
DNS解析用时:0ms
首包到达用时(连接建立后):195ms
音频缓冲队列长度:0.0MB
音频缓冲队列时长:0.0s
已下载音频数据量:1.0MB
视频缓冲队列长度:0.0MB
视频缓冲队列时长:0.0s
已下载视频数据量:6.4MB
已下载总数据量8.2MB
解码帧率:0.60 显示帧率:0.18
网络连通性:WIFI
2018-02-01 10:53:09.285232+0800 KSYPlayerDemo[4052:587559] FFP_MSG_BUFFERING_START
2018-02-01 10:53:09.287072+0800 KSYPlayerDemo[4052:587559] player load state: 4
2018-02-01 10:53:09.287457+0800 KSYPlayerDemo[4052:587559] player start caching
2018-02-01 10:53:09.296240+0800 KSYPlayerDemo[4052:587559] ------------------------
2018-02-01 10:53:09.296559+0800 KSYPlayerDemo[4052:587559] player playback state: 1
2018-02-01 10:53:09.296762+0800 KSYPlayerDemo[4052:587559] ------------------------
flushed last keyframe pts -9223372036854775808 
2018-02-01 10:53:09.321026+0800 KSYPlayerDemo[4052:587559] FFP_MSG_SEEK_COMPLETE
2018-02-01 10:53:09.322065+0800 KSYPlayerDemo[4052:587559] Seek complete
2018-02-01 10:53:09.425876+0800 KSYPlayerDemo[4052:587559] FFP_MSG_BUFFERING_END
2018-02-01 10:53:09.426324+0800 KSYPlayerDemo[4052:587559] loading cost 64.372091 seconds with 5 times
2018-02-01 10:53:09.426706+0800 KSYPlayerDemo[4052:587559] player load state: 3
2018-02-01 10:53:09.592091+0800 KSYPlayerDemo[4052:587559] ------------------------
2018-02-01 10:53:09.592558+0800 KSYPlayerDemo[4052:587559] player playback state: 0
2018-02-01 10:53:09.592792+0800 KSYPlayerDemo[4052:587559] ------------------------
2018-02-01 10:53:09.593876+0800 KSYPlayerDemo[4052:587559] player finish state: 0
2018-02-01 10:53:09.594115+0800 KSYPlayerDemo[4052:587559] player download flow size: 7.801758 MB
2018-02-01 10:53:09.594303+0800 KSYPlayerDemo[4052:587559] buffer monitor  result: 
   empty count: 5, lasting: 64.372091 seconds
nyz110 commented 6 years ago

尝试重置player 也无效

-(void)resetPlayerWhenPlayErr{
    self.coverView.hidden = NO;
    //清除之前的播放器
    [self.videoPlayer reset:NO];
    [self.videoPlayer stop];

//    [self removePlayerObserver];
//    [self.videoPlayer.view removeFromSuperview];
//    self.videoPlayer = nil;
//
//    //重新添加
//    [self insertSubview:self.videoPlayer.view atIndex:0];
//    [self.videoPlayer.view mas_makeConstraints:^(MASConstraintMaker *make) {
//        make.edges.mas_equalTo(UIEdgeInsetsZero);
//    }];
//    [self addPlayerObserver];
//    NSString *originalVideoURL = [[KSYHTTPProxyService sharedInstance] getOriginalUrl:self.videoURL];
    NSString *originalVideoURL = self.videoURL;
    self.videoURL = nil;

    [self reloadPlayerInfo:originalVideoURL];

}

重新创建player 是可以的,之前的player 在复用的时候也无法播放其他视频

mayudong1 commented 6 years ago

如果用同一个播放器实例播放多个视频时,在切换时的调用顺序是

        [_player reset:NO];
        [_player setUrl:_reloadUrl];
        [_player prepareToPlay];

或者

        [_player reload:_reloadUrl];

我测试这样使用没问题

不要调用stop, 调用stop后播放器会被销毁

nyz110 commented 6 years ago

嗯,复用的时候是这样做的。也播放不了 现在的问题是,切换网络,当前视频也播放不了,点击暂停,再点击播放无效。demo 和 自己项目里面都是这样的现象。播放中,切换飞行模式,播放失败,等一会,切换到wifi,点击播放无法播放

mayudong1 commented 6 years ago

看样子是在播放失败后,如果先调用了一次play,然后再用reset这套操作来重新播放的话会出问题(reload没出问题)
这个我们我们后续查一下原因

你可以暂时检查一下代码逻辑,在播放失败后别直接调用play,而是用reset或者reload的方式来切换其他视频

lzcdgit commented 6 years ago

这个有解决么?我也遇到了。楼上两位搞好了么? // [_player reload:_reloadUrl flush:YES mode:MPMovieReloadMode_Fast];//网络切换的话reload //[self.player play]; 我是刷新和play 一起的,没用。总是-1004

nyz110 commented 6 years ago

@lzcdgit
我解决了,复用的时候这样调用

if (是否是复用逻辑) {
//重置之前的播放信息
        if (self.videoPlayer.isPlaying) {
            [self.videoPlayer pause];
        }
        [self.videoPlayer reset:NO];
 }
 [self.videoPlayer setUrl:[NSURL URLWithString:playerURL]];
 [self.videoPlayer prepareToPlay];

不要使用 [self.videoPlayer reload:[NSURL URLWithString:playerURL] flush:YES];