AVPlayerViewController支持横屏设置

针对项目中出现视频播放需求,简单的视频播放功能,可以使用AVPlayerViewController,在iOS9后废弃了之前的MPMoviePlayer,现在统一使用AVKit下的AVPlayerViewController;
作为第一次使用AVPlayerViewController,总结一些遇到的坑,分享出去;
1.首先是全屏播放问题,由于界面只支持portrait模式,可是看视频是需要Landscape模式的,这样视频进行全屏播放的时候就不能出现横屏的模式,尝试了一下几种解决方式;

  • 将需要全屏播放的View,横屏模式打开,这样用户点击全屏按钮的时候,如果会调ViewWillDisappear方法,这样就可以通过在这些视图appear和disappear方法中,手动的置手机横屏,达到想要的效果;
  • 寻找点击全屏时会触发的方法,在触发的方法的时候,自己通过手动处理也能达到目的;
  • 如果实在找不出解决方法,把app的landScape模式打开,用户再看视频的时候就能出现了;但是其它页面会出错;
    在实际的操作中发现,通过代码在viewController中的操作都是无效的;
    找遍了所有AVPlayerViewController的API都没有找到点击全屏的触发方法;
    经过几番模式,发现用以下的方式可以解决问题:
static NSString * const VIDEO_CONTROLLER_CLASS_NAME_IOS7 = @"MPInlineVideoFullscreenViewController";
static NSString * const VIDEO_CONTROLLER_CLASS_NAME_IOS8 = @"AVFullScreenViewController";

- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{
    if ([[window.rootViewController presentedViewController] isKindOfClass:NSClassFromString(VIDEO_CONTROLLER_CLASS_NAME_IOS7)] ||
        [[window.rootViewController presentedViewController] isKindOfClass:NSClassFromString(VIDEO_CONTROLLER_CLASS_NAME_IOS8)])
    {
        return UIInterfaceOrientationMaskAllButUpsideDown;
    }
    else {
        NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationPortrait];
        [[UIDevice currentDevice] setValue:value forKey:@"orientation"];

         [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade];
        return UIInterfaceOrientationMaskPortrait;}
    }

2.在设置AVPlayerViewController的View的frame的时候,发现实际的展示效果和自己本身设的尺寸并不一致,通过下面这行代码可以解决一些问题,但是碰到与约束相关的页面还是会出错,最后通过创建一个单独的Cell来展示AVPlayerViewController的View就没问题了

        _moviePlayer.view.translatesAutoresizingMaskIntoConstraints = YES;

3.播放视频的时候不会停止,即使将视频置为nil也不会停止,通过下面这段代码完美解决;

@property(nonatomic,strong)id playbackObserver; /**<检测播放的背景*/

- (void)removeBoundaryTimeObserver {
    if (self.playbackObserver) {
        [self.moviePlayer.player removeTimeObserver:self.playbackObserver];
        self.playbackObserver = nil;
    }
}

后记:在使用的时候,顺便研究了一下AVPlayer的使用,下一篇文章将会进行讲解;

发布了35 篇原创文章 · 获赞 9 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/SunFlowerInRain/article/details/52913812