zoukankan      html  css  js  c++  java
  • 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;
     }
  • 相关阅读:
    3js深入
    01课js初接触;
    弥合对象/关系之间的鸿沟(一)
    Spiral Matrix——螺旋矩阵
    原来···是不是高手,看try cathch都能看出来···
    Web视频分享处理类库的设计
    每个开发人员现在应该下载的十种必备工具
    使用C#得到局域网内所有主机名,IP地址,MAC地址,使用C# 实现查看所有系统事件
    IIS 错误 :“NETWORK SERVICE does not have write access” 解决办法
    配置Url Remap时发生Parser Error的解决办法
  • 原文地址:https://www.cnblogs.com/somethingWithiOS/p/5631107.html
Copyright © 2011-2022 走看看