iPhone - Objective C - 在横向模式下播放视频全屏

时间:2018-04-30 01:39:03

标签: objective-c avplayerviewcontroller

我看了之前发现了一些类似的问题。但是所提供的解决方案都不适合我,所以我要问这个。

我正在编写一个以Tab栏开头的IOS应用程序,每个选项卡View Controller都有一个嵌入式导航控制器。我能够使用AVPlayerViewController播放视频并播放它,但是无法强制它以横向模式启动(即使手机处于纵向模式。如果我翻转手机,它会全屏显示为横向模式。

以下是我传输视频的代码部分:

-(void) startPlayback {

  NSURL *streamURL = [NSURL URLWithString: pathToVideoStream];

  NSLog(@"Entered %s - Will now try to play video at NSURL: %@",__PRETTY_FUNCTION__, streamURL );

  AVPlayerViewController *moviePlayer = [[AVPlayerViewController alloc] init];
  moviePlayer.player = [AVPlayer playerWithURL:streamURL];
  [self presentViewController:moviePlayer animated:YES completion:nil];
  moviePlayer.view.frame = self.view.frame;
  [moviePlayer.player play];

}

我已添加此帖子中的建议: Play Video In Landscape when entire application is Portait

但这并没有强制视频在横向模式下播放。我看到有关使用CGAffine的其他建议,但我的第一直觉说,这不是翻转视频的正确方法。请指教。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。

我创建了一个AVPlayerViewController的子类,并调用了LandscapeAVPlayerViewController。在子类的实现中,我覆盖了两个方法:

-(UIInterfaceOrientationMask)supportedInterfaceOrientations{

   [super supportedInterfaceOrientations];
   return UIInterfaceOrientationMaskLandscape; // allows Left and Right both
}

-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation{
    return UIInterfaceOrientationLandscapeRight;   // prefers Right in portrait mode
}

然后在startPlayback方法中我将代码更改为:

-(void) startPlayback {

   NSURL *streamURL = [NSURL URLWithString: pathToVideoStream];

   LandscapeAVPlayerViewController *landscapeMoviePlayerVC =  [[LandscapeAVPlayerViewController alloc] init];

   landscapeMoviePlayerVC.player = [AVPlayer playerWithURL:streamURL];

   [self presentViewController:landscapeMoviePlayerVC animated:YES completion:nil];
   [landscapeMoviePlayerVC.player play];

}

这就是我需要做的一切。