AVPlayer和框架中的控制按钮

时间:2012-10-17 09:28:24

标签: ios video view avfoundation mpmediaplayercontroller

我必须在我的应用中播放一系列视频。我正在使用AVQueuePlayer使用代码播放视频:

AVQueuePlayer *queuePlayer = [[AVQueuePlayer alloc] initWithItems:items];
AVPlayerLayer *myPlayerLayer  = [AVPlayerLayer playerLayerWithPlayer:queuePlayer];
myPlayerLayer.frame = CGRectMake(0, 0, 320, 350);
[self.view.layer addSublayer:myPlayerLayer];
[self.queuePlayer play];

我面临两个问题。

  1. 播放视频时,播放器的帧不符合给定值(即0,0,320,350)。

  2. 当我们用MPMediaPlayer播放视频时,没有显示控制按钮(音量,播放,停止,前进等)。我错过了两种情况吗? (我第一次使用AVFoundation,所以这些问题可能看起来很愚蠢。)

  3. 提前致谢。

2 个答案:

答案 0 :(得分:1)

  

当视频播放时,播放器的帧不符合   给定值(即0,0,320,350)。

Apple的示例代码不使用-playerLayerWithPlayer:。它创建了一个UIView子类,其图层是AVPlayerLayer。也许这是有原因的。我在我的代码中这样做,效果很好。看一下AVPlayerDemo代码并尝试这样做。

  

没有显示控制按钮(音量,播放,停止,前进等)   当我们用MPMediaPlayer播放视频时会显示它们。我错过了   这两种情况都适用? (我是第一次使用AVFoundation   所以这些问题可能看起来很愚蠢。)

AVPlayer不会为您提供这些。这就是MPMoviePlayerController的用途。如果您想要控件并且想要使用AVPlayer,则需要自己创建和管理控件。

答案 1 :(得分:1)

作为Dave回答第一个问题的替代方案......

如果使用自动布局,您可以将playerLayerWithPlayer:返回的播放器图层的引用存储为本地属性,并在视图控制器的视图中显示其帧时更新其帧子视图 -

- (void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];

    self.playerLayer.frame = self.view.layer.bounds;
}

或者如果您正在使用UIView子类 -

- (void)layoutSubviews
{
    [super layoutSubviews];

    self.playerLayer.frame = self.layer.bounds;
}

这假定您希望玩家填充视图;如果您有其他意图,可以更新代码。