我必须在我的应用中播放一系列视频。我正在使用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];
我面临两个问题。
播放视频时,播放器的帧不符合给定值(即0,0,320,350)。
当我们用MPMediaPlayer播放视频时,没有显示控制按钮(音量,播放,停止,前进等)。我错过了两种情况吗? (我第一次使用AVFoundation,所以这些问题可能看起来很愚蠢。)
提前致谢。
答案 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;
}
这假定您希望玩家填充视图;如果您有其他意图,可以更新代码。