android 网络监听wifi 和4g切换 多次,直播网络环境从WiFi切换到4g,中断后如何重连?...

这段代码展示了如何处理IJKMPMoviePlayerController的加载状态变化,特别是当状态变为`IJKMPMovieLoadStateStalled`时,启动了一个每2秒触发的恢复定时器来重新初始化播放器连接。在定时器回调中,停止并清理旧的播放器实例,然后创建新的播放器实例并准备播放。这提供了一种错误恢复策略,确保了视频流的稳定播放。
摘要由CSDN通过智能技术生成

捕获 IJKMPMovieLoadStateStalled通知;例如,

- (void)didLoadingStateChange:(NSNotification*)notification

{

if (self.loadingStateHandler) {

IJKMPMovieLoadState loadState = self.mediaPlayer.loadState;

if ((loadState & IJKMPMovieLoadStatePlaythroughOK) != 0) {

self.loadingStateHandler(GCLivePlayerLoadingStatePlayThrough);

}

else if ((loadState & IJKMPMovieLoadStateStalled) != 0) {

self.loadingStateHandler(GCLivePlayerLoadingStateStalled);

[self startRecoveryTimer];

}

else if ((loadState & IJKMPMovieLoadStatePlayable) != 0) {

self.loadingStateHandler(GCLivePlayerLoadingStatePlayable);

}

else {

self.loadingStateHandler(GCLivePlayerLoadingStateUnknown);

}

}

}

启动重试并恢复的定时器;例如,每2秒重试一次。

- (void)startRecoveryTimer

{

self.recoveryPeriodic = [NSTimer scheduledTimerWithTimeInterval:2.0f target:self selector:@selector(recoveryTimerFired) userInfo:nil repeats:YES];

}

在定时器的回调中重新初始化与 cdn 的连接;

- (void)recoveryTimerFired

{

NSLog(@"Recovery timer fired");

[self.mediaPlayer stop];

[self removeMediaPlayerObservers];

[self.mediaPlayer.view removeFromSuperview];

// [self.mediaPlayer shutdown];

[self setMediaPlayer:nil];

NSLog(@"Recovery timer fired: stop");

IJKFFOptions *options = [IJKFFOptions optionsByDefault];

self.mediaPlayer = [[IJKFFMoviePlayerController alloc] initWithContentURL:[NSURL URLWithString:self.assetUrl] withOptions:options];

[self.mediaPlayer.view setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight];

[self.mediaPlayer.view setFrame:self.playerView.bounds];

[self.mediaPlayer setScalingMode:IJKMPMovieScalingModeAspectFill];

[self.mediaPlayer setShouldAutoplay:self.shouldAutoPlay];

[self.mediaPlayer.view setBackgroundColor:[UIColor clearColor]];

[self.playerView addSubview:self.mediaPlayer.view];

[self.mediaPlayer prepareToPlay];

[self addMediaPlayerObservers];

NSLog(@"Recovery timer fired: play");

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值