视频播放

一.视频播放介绍(5种实现方案)

  1. AVPlayer

    • 优点

      • 可以自定义UI,进行控制
    • 缺点
      • 单纯的播放,没有控制UI,而且如果要显示播放界面,需要借助AVPlayerLayer,添加图层到需要展示的图层上
  2. MPMoviePlayerController
    • 优点

      • 自带播放控制UI,不需要手动添加
    • 缺点
      • 不能自定义UI
      • 只能将此控制器视图添加到其他视图进行展示
      • 此控制器不是视图控制器,不能弹出
  3. MPMoviePlayerViewController
    • 优点

      • 自带播放控制UI,不需要手动添加
      • 此控制器是视图控制器,可以弹出,可以压栈
      • 也可以手动调整视图大小,添加其他视图上
    • 缺点
      • 不能自定义UI
  4. 针对第2/3种情况,在iOS9之后,统一使用AVPlayerViewController
    • 优点

      • 自带播放控制UI,不需要手动添加
      • 此控制器是视图控制器,可以弹出,可以压栈
      • 也可以手动调整视图大小,添加到其他视图上
    • 缺点
      • 不能自定义UI
  5. 第三方框架Vitamio

二.使用AVPlayer播放远程视频

1.实现播放功能

  1. 通过远程URL创建AVPlayer

  2. 开始播放
    • [self.player play];
  3. 存在问题
    • 只能播放声音,看不到图像
    • 解决方案:需要借助AVPlayerLayer对象,根据player创建图层,添加到视图上

2.实现视频显示功能

  1. 根据player对象,创建AVPlayerLayer对象

    • AVPlayerLayer *layer = [AVPlayerLayer playerLayerWithPlayer:self.player];
  2. 设置图层AVPlayerLayer的大小
    • layer.frame = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height * 9 / 16);
  3. 添加到需要展示的视图上即可
    • [self.view.layer addSublayer:layer];

3.封装专门用于播放的视图

  • 主要封装一些操作的工具条

备注

  • iOS9.0网络请求(ATS)适配(HTTPS->HTTP)
  • NSAppTransportSecurity
  • NSAllowsArbitraryLoads->true

三.使用MPMoviePlayerController播放视频

  • 相比于AVPlayer播放,自带一些控制按钮
  • 导入MediaPlayer框架
  • 根据URL创建控制器MPMoviePlayerController
  • 设置播放视图frame,添加到需要展示的视图上
    • 设置播放视图的frame

      • self.moviePlayer.view.frame = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height * 9 / 16);
    • 设置播放视图控制样式
      • self.moviePlayer.controlStyle = MPMovieControlStyleFullscreen;
    • 添加播放视图到要显示的视图
      • [self.view addSubview:self.moviePlayer.view];
  • 播放
    • [self.moviePlayer play];
  • 注意事项
    • 此控制器不是视图控制器,不能直接弹出
    • 播放器的播放状态,是通过通知的方式告诉外界

四.使用MPMoviePlayerViewController播放视频

  • 导入MediaPlayer框架
  • 根据URL创建控制器MPMoviePlayerViewController
  • 直接modal弹出该控制器(或者设置播放视图frame,添加到需要展示的视图上)
    • [self presentViewController:self.playerVC animated:YES completion:nil];
  • 播放
    • [self.playerVC.moviePlayer play];

五.iOS9.0之后,需要使用AVPlayerViewController

  • 导入框架

    • AVFoundation
    • AVKit
  • 根据URL创建AVPlayer
  • 根据AVPlayer,创建AVPlayerViewController控制器
    • self.playerVC = [[AVPlayerViewController alloc] init];
    • self.playerVC.player = player;
  • 设置播放视图frame,添加到需要展示的视图上
    • 设置播放视图的frame

      • self.playerVC.view.frame = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height * 9 / 16);
    • 添加播放视图到要显示的视图
      • [self.view addSubview:self.playerVC.view];
    • 或者直接弹出此控制器
      • [self presentViewController:self.playerVC animated:YES completion:nil];
  • 播放
    • [self.playerVC.player play];

六.Vitamio框架

  • 官网

  • 主要功能
    • Vitamio能够流畅播放720P甚至1080P高清mkv/flv/mp4/mov/ts/rmvb等常见格式的视频
    • 还可以在Android和iOS上跨平台支持mms/rtsp/rtmp/hls(m3u8)等常见的多种视频流媒体协议,包括直播与点播
  • 使用权限
    • 非个人移动应用均需购买Vitamio使用授权
    • 标准免费版仅限于个人开发者使用
  • 使用步骤
    • 导入框架
    • 添加系统依赖库
    • 项目配置
      • TARGETS->Build Settings->Other Linker Flags->"-OjbC"
    • 导入头文件
      • #import "Vitamio.h"
    • 代码实现
      • 获取单例

        • VMediaPlayer.sharedInstance()
      • 设置承载式图,以及代理
        • mMPlayer.setupPlayerWithCarrierView(view,withDelegate:self)
      • 设置数据源
        • mMPlayer.setDataSource(NSURL(string:videoUrl),header:nil)
      • 异步准备视频
        • mMPlayer.prepareAsync()
      • 在代理方法中开始播放(VMediaPlayerDelegate)
// 当'播放器准备完成'时, 该协议方法被调用, 我们可以在此调用 [player start] 来开始音视频的播放.
func mediaPlayer(player: VMediaPlayer!, didPrepared arg: AnyObject!) {
mMPayer.start()
} // 当'该音视频播放完毕'时, 该协议方法被调用, 我们可以在此作一些播放器善后操作, 如: 重置播放器, 准备播放下一个音视频等
func mediaPlayer(player: VMediaPlayer!, playbackComplete arg: AnyObject!) {
player.reset()
} // 如果播放由于某某原因发生了错误, 导致无法正常播放, 该协议方法被调用, 参数 arg 包含了错误原因.
func mediaPlayer(player: VMediaPlayer!, error arg: AnyObject!) {
print("nal")
}
	- 暂停播放
- mMPlayer.pause()
- 停止播放
- mMPlayer.reset()
- mMPlayer.unSetupPlayer()
- 继续播放
- mMPlayer.start()
- 倍速播放
- mMPlayer.setPlaybackSpeed
- 播放到指定时间
- seekTo

视频播放(iOS开发)的更多相关文章

  1. iOS开发——视频播放 待更新……

    本文主要实现调用系统自带的播放器,自带的播放器已经做好了屏幕的适配,集成播放,暂停,快进等功能.能够满足基本的视频播放功能及iOS的视频播放的开发. 最后将其简单的封装成一个iOS视频播放工具类. 一 ...

  2. ios开发视频播放后台下载功能实现 :1,ios播放视频 ,包含基于AVPlayer播放器,2,实现下载,iOS后台下载(多任务同时下载,单任务下载,下载进度,下载百分比,文件大小,下载状态)(真机调试功能正常)

    ABBPlayerKit ios开发视频播放后台下载功能实现 : 代码下载地址:https://github.com/niexiaobo/ABBPlayerKit github资料学习和下载地址:ht ...

  3. iOS开发系列文章(持续更新……)

    iOS开发系列的文章,内容循序渐进,包含C语言.ObjC.iOS开发以及日后要写的游戏开发和Swift编程几部分内容.文章会持续更新,希望大家多多关注,如果文章对你有帮助请点赞支持,多谢! 为了方便大 ...

  4. ios开发中的小技巧

    在这里总结一些iOS开发中的小技巧,能大大方便我们的开发,持续更新. UITableView的Group样式下顶部空白处理 //分组列表头部空白处理 UIView *view = [[UIViewal ...

  5. IOS 开发中要注意的事项

    1.关于拍摄 TGCameraViewController – 基于 AVFoundation 的自定义相机.样式漂亮,轻量并且可以很容易地集成到 iOS 项目中.不会内存吃紧 2.block 中对控 ...

  6. 文顶顶iOS开发博客链接整理及部分项目源代码下载

    文顶顶iOS开发博客链接整理及部分项目源代码下载   网上的iOS开发的教程很多,但是像cnblogs博主文顶顶的博客这样内容图文并茂,代码齐全,示例经典,原理也有阐述,覆盖面宽广,自成系统的系列教程 ...

  7. iOS开发常见BUG和一些小技巧(ps:耐心看完,很实用)

    [385][scrollView不接受点击事件,是因为事件传递失败] // // MyScrollView.m // Created by beyond on 15/6/6. // Copyright ...

  8. iOS开发人员不容错过的10大工具

    内容简介 1.iOS简介 2.iOS开发十大实用工具之开发环境 3.iOS开发十大实用工具之图标设计 4.iOS开发十大实用工具之原型设计 5.iOS开发十大实用工具之演示工具 6.iOS开发十大实用 ...

  9. iOS - 开发类库

    开发类库   UI 项目名称 项目信息 1.MJRefresh 仅需一行代码就可以为UITableView或者CollectionView加上下拉刷新或者上拉刷新功能.可以自定义上下拉刷新的文字说明. ...

随机推荐

  1. textarea中的文字自动换行问题

    在textarea中设置输入内容的自动换行,也是在CSS中设置word-wrap:break-word; 属性.需要额外注意的是textarea元素本身有一个warp属性,其取值含义如下: off:不 ...

  2. sqlite优化记录:建立索引加快查询速度

    凡是数据库中,索引的存在就是为了提高查询速度的,数据库的索引有点类似于书本上面的目录的概念,因为在英文中都是index,事实上也就是目录. 其算法应该叫做“倒排索引”,这个其实也类似于搜索引擎里面的基 ...

  3. loadrunner 一个诡异问题

    最近使用loadrunner压测一个项目的时候,发现TPS波动巨大.且平均值较低.使用jmeter压测则没有这个问题.经过多方排查发现一个让人极度费解的原因: 原脚本: //脚本其他代码...... ...

  4. Asp.Net中的三种分页方式

    Asp.Net中的三种分页方式 通常分页有3种方法,分别是asp.net自带的数据显示空间如GridView等自带的分页,第三方分页控件如aspnetpager,存储过程分页等. 第一种:使用Grid ...

  5. wait和waitpid详解

    wait的flag参数不是很明确,考虑多个进程同时结束的情况,信号时如何处理的,是否会出现覆盖情况 wait的函数原型是: #include<sys/types.h> #include & ...

  6. a++与=++a的区别

    //a++;//a=a+1;              // ++a;//a=a+1;               //Console.WriteLine(a++);// Console.WriteL ...

  7. -_-#【减少 DOM 访问】“离线”更新节点,再将它们添加到树中

    Minimize DOM Access javascript 之 DOM 优化 <!DOCTYPE html> <html> <head> <meta cha ...

  8. VM Depot 分布式计算框架主题应用精选

     发布于 2014-12-24 作者 陈 忠岳 在前几期为各位介绍了大数据应用主题以及开发运营主题的各类镜像后,这次我们精选了 VM Depot 站点中分布式计算相关主题的虚拟机镜像和大家一起分享 ...

  9. WebService的优点和基本原理

    WebService简介(1)WebService是一个SOA(面向服务的编程)的架构,它是不依赖于语言,不依赖于平台,可以实现不同的语言间的相互调用,通过Internet进行基于Http协议的网络应 ...

  10. testng 注解

    testng.xml suite(套件):  由一个或多个测试组成 test(测试):  由一个或多个类组成 class(类):  一个或多个方法组成 @BeforeSuite: 在某个测试套件开始之 ...