一.来自 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. Centos下Yum安装PHP5.5,5.6,7.0

    默认的版本太低了,手动安装有一些麻烦,想采用Yum安装的可以使用下面的方案: 1.检查当前安装的PHP包 yum list installed | grep php 如果有安装的PHP包,先删除他们 ...

  2. sqlite字段属性删除方法

    Sqlite 不支持直接修改字段的名称. 我们可以使用别的方法来实现修改字段名. 1.修改原表的名称 ALTER TABLE table RENAME TO tableOld; 2.新建修改字段后的表 ...

  3. 005_kafka_Java_API

    1.生产者Producer 1)添加依赖 <dependency> <groupId>org.apache.kafka</groupId> <artifact ...

  4. oralce 密码长度

    Oracle 11G的新特性所致, Oracle 11G创建用户时缺省密码过期限制是180天, 如果超过180天用户密码未做修改则该用户无法登录. Oracle提示错误消息ORA-28001: the ...

  5. Oracle表空间,用户,用户授权

    一:Oracle表空间 1,Oracle表空间与SQL Server文件组对比 SQL Server的文件组(文件组包括若干MDF,NDF数据文件)对我们来说并不陌生,前段时间我在博客“怎样玩转千万级 ...

  6. guava学习--AsyncFunction

    AsyncFuntion接口与之前学习吃的使用Function和Functions进行对象转换有很密切的联系,AsyncFuction接口是Function接口的异步表现,AsyncFuction和F ...

  7. Traveling in Blade & Soul

    Traveling in Blade & Soul Walking is too simple. Having trained their physics and spirits for ye ...

  8. css3过渡

    语法格式: transition:属性名 完成时间 速度曲线 何时开始 transition:width 2s ease-in 3s: width 2s 整个过渡效果持续的时间 ease-in 指定了 ...

  9. JSP基础语法

    JSP页面元素构成: 指令: page指令: ISO-8859-1 是纯英文的字符集,UTF-8 是中文字符集,将pageEncoding =ISO-8859-1 改为 contentType=utf ...

  10. learn python, ref, diveintopython 分类: python 2015-07-22 14:42 14人阅读 评论(0) 收藏

    for notes of learing python. // just ignore the ugly/wrong highlight for python code. ""&q ...