视频播放

一.视频播放介绍(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. KVC vs KVO(内容为转载记录,整合大家的总结为我所用)

    KVC即key-value coding的缩写, KVO即key-value observing的缩写 假如需要掌握Key-Value Observing机制,那么需要阅读本文应该有帮助.本文提供了K ...

  2. ECshop Strict Standards: Only variables should be passed by reference in解决办法

    本文章来给各位同学介绍关于ECshop Strict Standards: Only variables should be passed by reference in解决办法,希望此教程 对各位同 ...

  3. Seay工具分享

    百度网盘:http://pan.baidu.com/share/home?uk=4045637737&view=share#category/type=0

  4. 388A Fox and Box Accumulation

    一开始贪心策略想错了! #include<cstdio> #include<algorithm> using namespace std; ]; int main() { in ...

  5. jsp接收相同复合参数 request.getParameterValues()用法

    在网站中往往需要用户选择复选框,此时需要创建多个复选框让用户进行选择: <head> <meta http-equiv="Content-Type" conten ...

  6. Protel封装库

    一.目录下面的一些封装库中,根据元件的不同封装我们将其封装分为二大类:一类是分立元件的封装,一类是集成电路元件的封装 1.分立元件类: 电容:电容分普通电容和贴片电容: 普通电容在Miscellane ...

  7. Android 使用MediaStore.Images和 Cursor查询本地图片和图片缩略图

    先看一个实例: String[] projection = { MediaStore.Images.Thumbnails._ID ,MediaStore.Images.Thumbnails.DATA} ...

  8. Server.MapPath()目录详解

    最近在做相关的开发,碰到了Server.MapPath(),顺便来温习一下 Server.MapPath()获取网站的目录详解  ./当前目录 /网站主目录 ../上层目录 ~/网站虚拟目录 如果当前 ...

  9. IBM Rational-完整的软件工程解决方案工具集

    IBM,即国际商业机器公司,1911年创立于美国,是全球最大的信息技术和业务解决方案公司,其业务遍及全球170多个国家和地区.IBM软件分为五个部分,其中Rational系列是专门针对软件工程的软件工 ...

  10. MySQL 内存监控

    上一篇blog介绍了因为sql查询information_schema表而导致内存暴涨的case. 今天顺便做了一个thd内存的监控: 先来介绍下MySQL的内存: 1. 线程内内存:thd-> ...