【问题标题】:Control buttons in AVPlayer and frameAVPlayer 和框架中的控制按钮
【发布时间】:2012-10-07 12:38:22
【问题描述】:

我必须在我的应用中播放一系列视频。我正在使用 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,所以这些问题可能看起来很愚蠢)。

提前致谢。

【问题讨论】:

    标签: ios video view avfoundation mpmediaplayercontroller


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      - (void)viewDidLayoutSubviews
      {
          [super viewDidLayoutSubviews];
      
          self.playerLayer.frame = self.view.layer.bounds;
      }
      

      或者,如果您在 UIView 子类中工作 -

      - (void)layoutSubviews
      {
          [super layoutSubviews];
      
          self.playerLayer.frame = self.layer.bounds;
      }
      

      这假设您希望播放器填充视图;如果您有其他意图,可以更新代码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-21
        • 2015-10-26
        • 2021-07-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-07
        相关资源
        最近更新 更多