[英]UI is Freezing, when streaming the videos from an internet using AVPlayer
我正在iOS平台中实现Media Player。 使用AVPlayer从互联网流式传输视频时,UI冻结存在问题。 注意:我没有使用AVAudioPlayer,AVQueuePlayer。 以下是播放媒体的以下代码:仅在启动Streaming时发生UI冻结。
if(_player.rate!=0.0)
{
[_player pause];
[ad.player.playerLayer removeFromSuperlayer];
[_player replaceCurrentItemWithPlayerItem:[ AVPlayerItem playerItemWithURL:_tempURL]];
}
else
{
_player = [_player initWithURL:mediaURL];
ad.player.playerLayer = [AVPlayerLayer playerLayerWithPlayer:_player];
ad.player.playerLayer.frame=ad.player.bounds;
ad.player.playerLayer.frame=CGRectMake(0, 0, 320, 150);
[ad.player.playerLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill];
_player.actionAtItemEnd = AVPlayerActionAtItemEndNone;
ad.player.playerLayer.needsDisplayOnBoundsChange = YES;
[ad.player.layer addSublayer:ad.player.playerLayer];
[_player play];
}
我引用了以下链接: AVPlayer在缓冲音频流开始时“冻结”了该应用程序,但是该链接建议用于AVQueuePlayer 。 但是我的要求是在AVPlayer中做
当您开始播放视频时,该视频尚未下载任何数据,AVPlayer类具有一个名为prerollAtRate:completionHandler
的方法,该方法从项目的当前播放时间开始加载数据,然后在完成加载尝试后再调用completionHandler。
__weak typeof(self) weakSelf = self;
[self prerollAtRate:0.0 completionHandler:^(BOOL finished) {
NSLog(@"ready: %d", finished);
// if ready call the play method
if (finished) {
dispatch_async(dispatch_get_main_queue(), ^{
// call UI on main thread
[weakSelf.player play];
});
}
}];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.