一.来自 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. 可以结合react的ui组件

    https://ant.design/components/switch-cn/

  2. JQuery实现table分页

    1.直接贴代码: ; //每页显示的记录条数 ; //显示第curPage页 var len; //总行数 var page; //总页数 $(function(){ len =$(; //去掉表头 ...

  3. Linux文件权限查看及修改命令chmod

    查看权限 Linux文件访问权限分为可读,可写和可执行三种. 可用ls -l命令查看,例: ls -l或者 ll 显示为 -r--r--r--. 1 root root 21 Jan 5 23:02 ...

  4. OpenGL利用模板测试实现不规则裁剪

    本文是原创文章,如需转载,请注明文章出处 在游戏开发中,经常会有这样的需求:给定一张64x64的卡牌素材,要求只显示以图片中心为圆点.直径为64的圆形区域,这就要用到模板测试来进行不规则裁剪. 实现不 ...

  5. python——线程与多线程基础

    我们之前已经初步了解了进程.线程与协程的概念,现在就来看看python的线程.下面说的都是一个进程里的故事了,暂时忘记进程和协程,先来看一个进程中的线程和多线程.这篇博客将要讲一些单线程与多线程的基础 ...

  6. python的字符串内建函数

    http://www.ziqiangxuetang.com/python/python-strings.html

  7. js工作中日常问题集中

    1.判断问题 如果type存在就设置type的值为type,否则设置type为0: 原始的写法,使用 if else:if(type){type = type} 使用三元操作符:type : type ...

  8. 做为一名PHP程序员,应该关注的互联网IT大牛!

    俗话说:“读万卷书不如行万里路,行万里路不如高人指路”,做为一名新人,以后的路还很长,多年你的成就取决于今天的自己付出,选中自己的方向比什么都重要,关注大牛,向他们学习,才不会迷失自己! 1.惠新宸( ...

  9. Scala练习(二)

    3.计算指定目录下以".txt"为扩展名的文件个数.注:随便建个目录,建几个.txt文件即可. 4.计算"input_4.txt"文件中搜索词的出现次数,并按次 ...

  10. 拾取模型的原理及其在THREE.JS中的代码实现

    1. Three.js中的拾取  1.1. 从模型转到屏幕上的过程说开 由于图形显示的基本单位是三角形,那就先从一个三角形从世界坐标转到屏幕坐标说起,例如三角形abc 乘以模型视图矩阵就进入了视点坐标 ...