您的位置:首页 - 教程 - IOS - 正文
iOS 视频播放的简单使用

最近工作中有用到视频播放的内容,分享一些简单的用法给大家(由于网速问题,本例中使用的是本地的资源进行播放,要播放网络上的修改一些URL即可)

1.iOS9之前的视频播放

  首先需要导入MediaPlayer框架. 在iOS9之前视频播放有两种方式.

  1. 一种是带有View的MPMoviePlayerViewController;
 // 1. 带有View的控制器
 NSURL *url = [[NSBundle mainBundle] URLForResource:@"Alizee_La_Isla_Bonita.mp4" withExtension:nil];
 //  创建视频播放器
 MPMoviePlayerViewController *mpvc = [[MPMoviePlayerViewController alloc] initWithContentURL:url];
 //  展示
 [self presentMoviePlayerViewControllerAnimated:mpvc];

    2. 一种是不带View的MPMoviePlayerController

 //  1. 不带View的(这里不带view是指控制器的名字中没有带view,只是做个区分,不过它需要设置自身的view)
 NSURL *url = [[NSBundle mainBundle] URLForResource:@"Alizee_La_Isla_Bonita.mp4" withExtension:nil];
 MPMoviePlayerController *mpc = [[MPMoviePlayerController alloc] initWithContentURL:url];
//这里大小是随意设的,要看工作需要
 mpc.view.frame = CGRectMake(40, 50, 200, 200);
 //  设置控制工具栏的样式
 mpc.controlStyle = MPMovieControlStyleEmbedded;
 //  把播放视图添加到控制器的view上
 [self.view addSubview:mpc.view];
 //  开始播放
 [mpc play];
 //  强引用
 self.mpc = mpc;

3.通过监听播放完的通知来实现自动播放下一个视频

//  注册通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayerPlaybackDidFinishNotification:) name:MPMoviePlayerPlaybackDidFinishNotification object:nil];
  /// 当播放结束了调用该方法
  - (void) moviePlayerPlaybackDidFinishNotification:(NSNotification *) notification {
      NSLog(@"%@",notification.userInfo);

      MPMovieFinishReason reason  = [notification.userInfo[MPMoviePlayerPlaybackDidFinishReasonUserInfoKey] intValue];
  //  如果是正常结束的播放下一曲
      if (reason == MPMovieFinishReasonPlaybackEnded) {
          NSURL *url = [[NSBundle mainBundle] URLForResource:@"Cupid_高清.mp4" withExtension:nil];
          self.mpc.contentURL = url;
          [self.mpc play];
      }
  }

2.iOS9之后的视频播放

iOS9 新增AVKit框架,新增类AVPlayerViewController用于视频播放.注意:必须导入两个框架AVKitAVFoundation 因为AVPlayerViewController本身不具备视频播放的能力,必须给他一个AVPlayer.

代码实现:

    //播放视频
    //注意点: 1. 必须给他一个播放AVPlayer,而AVPlayer在AVFoundation中,所以需要导入AVFondation框架
     //       2. 画中画在iPadAir2和iPadPro才能使用.
     - (IBAction)play:(id)sender {

     //  创建视频播放器
         AVPlayerViewController *playerVc = [[AVPlayerViewController alloc] init];
     //  需要创建一个播放对象赋值给这个控制器
         NSURL *URL = [[NSBundle mainBundle] URLForResource:@"Alizee_La_Isla_Bonita.mp4" withExtension:nil];
     //  设置播放器
         playerVc.player = [AVPlayer playerWithURL:URL];
         [self presentViewController:playerVc animated:YES completion:^{
     //  开始播放
             [playerVc.player play];
         }];
     //  设置代理
         playerVc.delegate = self;
     }

补充:画中画的一些常用代理方法

 - (void) playerViewControllerWillStartPictureInPicture:(AVPlayerViewController *)playerViewController{
     NSLog(@"即将开始画中画");
 }

 - (void) playerViewControllerDidStartPictureInPicture:(AVPlayerViewController *)playerViewController{
     NSLog(@"已经开始画中画");
 }

 - (void)playerViewControllerWillStopPictureInPicture:(AVPlayerViewController *)playerViewController{
     NSLog(@"即将停止画中画");
 }

 - (void)playerViewControllerDidStopPictureInPicture:(AVPlayerViewController *)playerViewController
 {
     NSLog(@"画中画已经停止");
 }

 - (void) playerViewController:(AVPlayerViewController *)playerViewController failedToStartPictureInPictureWithError:(NSError *)error
 {
     NSLog(@"开启画中画失败:%@",error);
 }

 /// 当播放器是modal出来的时候,当画中画的时候,是否要关闭弹出的播放控制器;默认YES
 - (BOOL) playerViewControllerShouldAutomaticallyDismissAtPictureInPictureStart:(AVPlayerViewController *)playerViewController{
     NSLog(@"%s",__FUNCTION__);
     return NO;
 }

评论: