一.来自 AVFoundation的 AVPlayer对象
特点:
1. AVPlayer
    > 优点: 
        可以自定义UI, 进行控制
    > 缺点: 
        单纯的播放, 没有控制UI, 而且如果要显示播放界面, 需要借助AVPlayerLayer, 添加图层到需要展示的图层上
步骤:
1.根据url播放源创建avplayer对象
        NSURL *url = [NSURL URLWithString:@"http://v1.mukewang.com/57de8272-38a2-4cae-b734-ac55ab528aa8/L.mp4"];
        _player = [AVPlayer playerWithURL:url];
2.根据player创建AVPlayerLayer对象
    AVPlayerLayer *layer = [AVPlayerLayer playerLayerWithPlayer:self.player];
   
3.设置图层的大小
    layer.frame = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height);
   
4.添加到需要展示的视图上即可
    [self.view.layer addSublayer:layer];
 
5.播放动作
    [self.player play];
 
二.来自 MediaPlayer的 MPMoviePlayerController对象
特点:
2. MPMoviePlayerController
    > 优点: 
        自带的播放控制UI, 不需要手动添加
    > 缺点:
        不能自定义UI
        只能将此控制器视图添加到其他视图进行展示
        此控制器不是视图控制器, 不能弹出
步骤:
1.根据url播放源创建MPMoviePlayerController对象
    NSURL *remoteURL = [NSURL URLWithString:@"http://v1.mukewang.com/xxoo/L.mp4"];
    _moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:remoteURL];
2. 设置播放视图的frame
    self.moviePlayer.view.frame = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height * 9 / 16);
   
3. 设置播放视图控制样式
    self.moviePlayer.controlStyle = MPMovieControlStyleFullscreen;
   
4.添加到需要展示的视图上即可
    [self.view addSubview:self.moviePlayer.view];
 
5.播放动作
    [self. moviePlayer play];
 
三.来自 MediaPlayer的 MPMoviePlayerViewController对象,基于MPMoviePlayerController的封装
特点:
3. MPMoviePlayerViewController
    > 优点: 
        自带的播放控制UI, 不需要手动添加
        此控制器是视图控制器, 可以弹出, 可以压栈
        也可以手动调整视图大小, 添加到其他视图上
    > 缺点:
        不能自定义UI
步骤:
1.根据url播放源创建MPMoviePlayerViewController对象
    NSURL *remoteURL = [NSURL URLWithString:@"http://v1.mukewang.com/xxoo/L.mp4"];
     _playerVC = [[MPMoviePlayerViewController alloc] initWithContentURL:remoteURL];
2.压入控制器直接播放
     [self presentViewController:self.playerVC animated:YES completion:^{
        [self.playerVC.moviePlayer play];
    }];
四.ios9.0以后使用来自

#import <AVFoundation/AVFoundation.h>

#import <AVKit/AVKit.h>的

AVPlayerViewController对象,基于
AVPlayer的封装

特点:
4. 针对于第2种和第3种实现方案, 在iOS9.0之后, 统一使用AVPlayerViewController
    > 优点: 
        自带的播放控制UI, 不需要手动添加
        此控制器是视图控制器, 可以弹出, 可以压栈
        也可以手动调整视图大小, 添加到其他视图上
    > 缺点:
        不能自定义UI
步骤:
-(AVPlayerViewController *)playerVC
{
    if (!_playerVC) {
        //1.创建AVPlayerViewController对象
        _playerVC = [[AVPlayerViewController alloc] init];

//2.根据URL创建AVPlayer
        NSURL *remoteURL = [NSURL URLWithString:@"http://v1.mukewang.com/57de8272-38a2-4cae-b734-ac55ab528aa8/L.mp4"];
        AVPlayer *player = [AVPlayer playerWithURL:remoteURL];
        //3.指定控制器的播放器
        _playerVC.player = player;
        //3.1设置属性,允许画中画
        _playerVC.allowsPictureInPicturePlayback = YES;

}
    return _playerVC;

}
 
    //5.如果已经存在播放控制器了就不要再弹出player了,不然会报错
    if(self.presentedViewController) return;
    //4.直接弹出;
    [self presentViewController:self.playerVC animated:YES completion:nil];
   
    //4.1或展示控制器,并设置播放
    [self presentViewController:self.playerVC animated:YES completion:^{
        [self.playerVC.player play];
    }];
 

总结:视频播放的四种实现方案(Native)的更多相关文章

  1. PHP四种序列化方案

    原文地址:https://t.ti-node.com/thread/... 数据的序列化是一个非常有用的功能,然而目测很多人跟我一样,在刚接触这玩意的时候压根就不理解这货色到底是干啥用的,反正老师说了 ...

  2. java-mybaits-012-mybatis-Interceptor-拦截器读写分离四种实现方案

    一.概述 基本项目搭建 技术框架:spring web mvc .日志[slf4j.log4j2].mybatis.druid.jetty插件启动.mybatis-generator逆向配置生产dao ...

  3. 四种读写方案IO流 (JAVA)

    File类用于访问文件或目录的属性 流:指一连串流动的字符,是以先进先出的方式发送信息的通道.程序和数据源之间是通过流联系起来的. 第一套:字节流读取写入方案 FileInputStream :字节流 ...

  4. OAuth2 RFC 6749 规范提供的四种基本认证方案

    OAuth2 RFC 6749 规范提供了四种基本认证方案,以下针对这四种认证方案以及它们在本实现中的使用方式进行分别说面. 第一种认证方式: Authorization Code Grant (授权 ...

  5. 第八节: Quartz.Net五大构件之SimpleThreadPool及其四种配置方案

    一. 简介 揭秘: SimpleThreadPool是Quartz.Net中自带的线程池,默认个数为10个,代表一个Scheduler同一时刻并发的最多只能执行10个job,超过10个的job需要排队 ...

  6. 第九节: 利用RemoteScheduler实现Sheduler的远程控制 第八节: Quartz.Net五大构件之SimpleThreadPool及其四种配置方案 第六节: 六类Calander处理六种不同的时间场景 第五节: Quartz.Net五大构件之Trigger的四大触发类 第三节: Quartz.Net五大构件之Scheduler(创建、封装、基本方法等)和Job(创建、关联

    第九节: 利用RemoteScheduler实现Sheduler的远程控制   一. RemoteScheduler远程控制 1. 背景: 在A服务器上部署了一个Scheduler,我们想在B服务器上 ...

  7. 四种方案:将OpenStack私有云部署到Hadoop MapReduce环境中

    摘要:OpenStack与Hadoop被誉为继Linux之后最有可能获得巨大成功的开源项目.这二者如何结合成为更猛的新方案?业内给出两种答案:Hadoop跑在OpenStack上或OpenStack部 ...

  8. Asp.net的sessionState四种模式配置方案

    sessionState节点的配置 web.config关于sessionState节点的配置方案,sessionState有四种模式:off,inProc,StateServer,SqlServer ...

  9. 四种有能力取代Cookies的客户端Web存储方案

    目前在用户的网络浏览器中保存大量数据需要遵循几大现有标准,每一种标准都拥有自己的优势.短板.独特的W3C标准化状态以及浏览器支持级别.但无论如何,这些标准的实际表现都优于广泛存在的cookies机制. ...

随机推荐

  1. Apache Commons Chain

    http://commons.apache.org/proper/commons-chain/ http://commons.apache.org/proper/commons-chain/cookb ...

  2. C# 6.0 Feature list

    Feature Example C# VB Auto-property initializers public int X { get; set; } = x; Added Exists Getter ...

  3. 联合体union和大小端(big-endian、little-endian)

    1.联合体union的基本特性——和struct的同与不同 union,中文名“联合体.共用体”,在某种程度上类似结构体struct的一种数据结构,共用体(union)和结构体(struct)同样可以 ...

  4. 数字图像处理作业使用OpenCV - 自定义直方图

    第二次作业需要打印出来灰度直方图,当然不能使用ocv的自带calcHist函数来得到Mat对象了……结果上网搜索怎么用自己的数据创建直方图,搜到的都是直接用函数的_(:з」∠)_ 结果这个地方拖了好久 ...

  5. hihoCoder挑战赛25

    萌新第一次打hihoCoder的比赛有点慌 T1 T1并不是特别难想到dp就好做了 显而易见的是一个01背包问题 Code: #include <cstdio> #include < ...

  6. markdown语法书

    因为初用markdown,所以对它的语法还不是很熟悉.喜欢简书的风格,特地拷贝了一份markdown语法手册,可以实现效果立显. http://www.jianshu.com/writer#/note ...

  7. Sql Server参数化查询之where in和like实现详解

    where in 的参数化查询实现 首先说一下我们常用的办法,直接拼SQL实现,一般情况下都能满足需要 string userIds = "1,2,3,4"; using (Sql ...

  8. MySql学习(五) —— 数据库优化理论篇(一)

    一.数据库管理系统 数据库管理系统(Database Management System, DBMS) 衡量是否是数据库的标准: ACID:是指在数据库管理系统(DBMS)中事务所具有的四个特性: 1 ...

  9. 艺萌TCP文件传输及自动更新系统介绍(TCP文件传输)(四)

    艺萌TCP文件上传下载及自动更新系统介绍(TCP文件传输) 该系统基于开源的networkComms通讯框架,此通讯框架以前是收费的,目前已经免费并开源,作者是英国的,开发时间5年多,框架很稳定. 项 ...

  10. BlackBerry 9900刷机

    1.安装BlackBerry Desktop Software: 2.安装ROM,双击9900Asia_PBr7.1.0_rel2807_PL5.1.0.692_A7.1.0.1033_China_M ...