Objective-C 如何立即在 MPMoviePlayerController 或 AVPlayer 上播放视频,没有延迟?
Posted
技术标签:
【中文标题】Objective-C 如何立即在 MPMoviePlayerController 或 AVPlayer 上播放视频,没有延迟?【英文标题】:Objective-C How to play videos on MPMoviePlayerController or AVPlayer instantly, without delay? 【发布时间】:2015-04-06 00:30:35 【问题描述】:我曾尝试在 AVPlayer 和 MPMoviePlayerController 上播放 500 KB 的视频,但它们都有一些令人讨厌的延迟。 AVPlayer 和 MPMoviePlayerController 都显示黑屏 2-3 秒,然后开始播放视频。好烦啊,怎么这么长的视频才开始?我该如何解决?
//Movie Player Code
_moviePlayerVC = [[MPMoviePlayerViewController alloc] initWithContentURL:video];
_moviePlayerVC.moviePlayer.view.userInteractionEnabled = YES;
_moviePlayerVC.moviePlayer.view.multipleTouchEnabled = YES;
_moviePlayerVC.moviePlayer.repeatMode = MPMovieRepeatModeOne;
_moviePlayerVC.moviePlayer.controlStyle = MPMovieControlStyleNone;
_moviePlayerVC.moviePlayer.scalingMode = MPMovieScalingModeFill;
_moviePlayerVC.moviePlayer.view.frame = self.frame;
[_moviePlayerVC.moviePlayer setShouldAutoplay:YES];
_moviePlayerVC.view.frame = self.frame;
[self addSubview:_moviePlayerVC.view];
//AVPlayer Code
AVAsset *asset = [AVAsset assetWithURL:video];
AVPlayerItem *item = [[AVPlayerItem alloc] initWithAsset:asset];
_player = [[AVPlayer alloc] initWithPlayerItem:item];
_player.actionAtItemEnd = AVPlayerActionAtItemEndNone;
AVPlayerLayer *layer = [AVPlayerLayer playerLayerWithPlayer:_player];
layer.frame = self.frame;
layer.backgroundColor = [UIColor clearColor].CGColor;
[layer setVideoGravity:AVLayerVideoGravityResizeAspectFill];
【问题讨论】:
尝试了您的 AVPlayer 代码,但屏幕上没有出现任何内容。您的代码中是否缺少 addsubview 或类似语句? 【参考方案1】:您可以预加载一个AVPlayer
并观察它的status
。一旦它改变了AVPlayerStatusReadyToPlay
,您应该能够毫无延迟地开始播放。
【讨论】:
它仍然不起作用,由于某种原因仍然存在延迟。就像音频甚至在视频显示之前就开始了。 PS预加载AVPlayer是什么意思。以上是关于Objective-C 如何立即在 MPMoviePlayerController 或 AVPlayer 上播放视频,没有延迟?的主要内容,如果未能解决你的问题,请参考以下文章
XCode 6.3 在抛出 Objective-C++ 异常时立即引发 SIGABRT