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

如何在 Objective-C 中创建一个空白的透明 png?

Objective-C 中的内存管理

在objective-c中使用swift代码时的问题

iOS应用程序立即崩溃

Objective-C:动画高度约束更改不起作用