视频播放

一.视频播放介绍(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. Javascript事件传播

    MicroSoft的设计是当事件在元素上触发时,该事件将接着在该节点的父节点触发,以此类推,事件一直沿着DOM树向上传播,直到到达顶层对象document元素.这种自底向上的事件传播方式称为" ...

  2. asp.net推送

    http://tech.it168.com/a2012/0210/1310/000001310252_all.shtml http://www.infoq.com/cn/news/2012/09/rc ...

  3. 用CURL来实现file_get_contents函数:curl_file_get_contents

    <?php $url='http://www.bamuyu.com/news/zixun/list_7_2.html'; $content=curl_file_get_contents($url ...

  4. [dp]HDOJ4960 Another OCD Patient

    题意: 给一个n, 第二行给n堆的价值v[i], 第三行给a[i].  a[i]表示把i堆合在一起需要的花费. 求把n堆变成类似回文的 需要的最小花费. 思路: ①记忆化搜索 比较好理解... dp[ ...

  5. Android 导出db并查看内容

    1.导出sqlite的db文件: 使用工具DDMS,切换到DDMS,显示File Explorer窗口,找到/data/data/应用名/databases/数据库名,点击导出按钮,导出文件. 2.使 ...

  6. 注意EntityFramework.extended中的坑

    EntityFramework.extended 的好处就不用多说了 详情:https://github.com/loresoft/EntityFramework.Extended 但是使用时还是要注 ...

  7. phpMyAdmin import.php 跨站脚本漏洞

    漏洞名称: phpMyAdmin import.php 跨站脚本漏洞 CNNVD编号: CNNVD-201402-281 发布时间: 2014-02-21 更新时间: 2014-02-21 危害等级: ...

  8. NOI2010海拔

    2007: [Noi2010]海拔 Time Limit: 20 Sec  Memory Limit: 552 MBSubmit: 1302  Solved: 612[Submit][Status] ...

  9. iOS开发 .framework的Optional(弱引用)和Required(强引用)区别, 有错误 Library not found………………

    http://www.cnblogs.com/wanyakun/p/3494323.html 强引用(Required)的framework是一定会被加载到内存的,但是弱引用(Optional)的fr ...

  10. 【转】简单几步让App Store软件下载快如迅雷 -- 不错!!!

    原文网址:http://pad.zol.com.cn/237/2376160_all.html 下载速度慢的原因     1)国内用户从苹果软件商店下载软件速度很慢这是大家都知道的事实,究其原因就是苹 ...