一.来自 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. 基于Red5的视频直播平台

    搭建环境:Win2008 server + jdk1.8+red5-server-1.0.6 下载地址:https://github.com/Red5 修改启动配置文件(修改为jdk路径): 安装模版 ...

  2. swift_简单值 | 元祖 | 流程控制 | 字符串 | 集合

    //: Playground - noun: a place where people can play import Cocoa var str = "Hello, playground& ...

  3. 【安全测试】sqlmap安装方法

    参考资料:http://jingyan.baidu.com/article/60ccbceb64cc2064cbb19748.html SQLMap是利用Python语言写的,所以需要将Python这 ...

  4. n进制转化成十进制

    一个字节是8位二进制. 我的天啊.我发现char特别厉害: char类型能够输入整形常量.不能超过-128~127. 只能是整数类型,且范围一般不能超出-128~127.超出会溢出的.

  5. JavaScript中的splice方法

    splice方法根据传入的不同参数可分别实现删除和插入操作 使用splice(pra1,pra2,pra3)方法,需要为其提供如下参数: 1.pra1为其起始索引(即希望开始添加元素的地方) 2.pr ...

  6. .net网站发布后的没有权限及被上传asp漏洞等问题

    前一阶段网站移到阿里云上,发现在线支付出现了问题,也接收不到银行返回的支付信息. 检查了源代码,发现是和支付有关的加密文件位置不对了,以前是放在e盘,现在新的是放在d盘,位置的信息是写死在代码中的.找 ...

  7. 关于链接到QQ客服的问题,原来只需要在a标签上加一串话而已呐~~~~

    <a class="btn" target=blank href=tencent://message/?uin=&Site=www.woyouli.com&M ...

  8. CSS网页布局全精通

    在本文中将使用四种常见的做法,结合CSS于结构化标记语法制作两栏布局.很快地就会发现,不用嵌套表格,间隔用的GIF也能做出分栏版面布局. 相关文章:CSS网页布局开发小技巧24则 稍后在"技 ...

  9. running programmer——spring-01(初谈spring)

    今天主要是通过一个简单的登录程序学习一些spring做基础的配置和功能. I.spring的核心配置applicationContext.xml 关于bean的配置官方给出的最基础的配置文件如下: & ...

  10. layout内容整理

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...