视频播放

一.视频播放介绍(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. axure rp pro 6.5

    现在地址:http://www.xdowns.com/soft/1/95/2012/Soft_94434.html Axure6.5正式版推出了,大大改善了用户体验以及修复了很多6.0上的bug. 而 ...

  2. C#基础|面向对象之继承

      面向对象的世界 在现实的世界里,发现事物可以进行分类,并且各个分类中又有这关系. 在面向对象的世界里,人们用类来模拟现实世界中的各种关系. 从大的范围来说,人属于人类,如果按照不同的身份将人类进行 ...

  3. xml & 符号表示方法,xml转义字符

    HTML,xml 中<, >,&等有特别含义,(前两个字符用于链接签,&用于转义),不能直接使用.使用这三个字符时,应使用他们的转义序列,如下所示: & 或 &am ...

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

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

  5. APT攻防对抗

    APT(高级持续性威胁)攻击是指近年来,专业甚至是有组织和国家背景支持的黑客,针对重要目标和系统发起的一种攻击手段,主要特征有 1)持续性:攻击者为了重要的目标长时间持续攻击直到攻破为止.攻击成功用上 ...

  6. 部分视图调用方法总结(Action 、 RenderAction 、 Partial 、 RenderPartial)

    Action . RenderAction . Partial . RenderPartial 1.Action . RenderAction Action 方法以字符串的形式返回子视图,可以直接被呈 ...

  7. PieTTY

    PieTTY 用 pietty 連上主機時 鍵盤右方數字鍵 (keypad) 失效的問題 用 pietty 連上主機時 鍵盤右方數字鍵 (keypad) 失效的問題 應該滿多人用 pietty 連上程 ...

  8. 自定义的IntentFileter 无法找到activity

    <intent-filter > <action android:name="com.leo.enjoytime.VIEW"/></intent-fi ...

  9. Android SurfaceView实现全屏播放例子

    public class Mymedia extends Activity implements OnBufferingUpdateListener, OnCompletionListener, Me ...

  10. C#中的OLEDB连接2

    在通过ADO对Excel对象进行连接时(此时Excel则认为是一个数据源),需要配置对Excel数据源对应的连接串,这个连接串中包括了Provider信息(其实类似对数据库进行连接操作时,都需要指定连 ...