视频播放

一.视频播放介绍(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. C++函数转换成C#函数

            ///                        /// </param>         /// <returns></returns>    ...

  2. asp.net gridview 绑定图片字段,图片不显示

    在浏览器中查看,图片属性. 右键查看,若后面出现若干%20 可使用以下办法解决. 备份表数据,然后删除表,把图片路径字符串在数据库中应使用varchar()类型. 原因可以查看vchar()  var ...

  3. c++函数内部可以返回函数内部定义的指针 但是不能返回函数内部定义的数组

    1.返回数组 // demo.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<stdio.h> char *m ...

  4. UI/UE对个性化推荐的影响

            用户界面,用户体验.         在创建网站选择色调时,大多数企业想到的是美观.其实,颜色所起到的作用远超出人们的想象.         关于颜色与购买习惯的心理学书籍比比皆是,下 ...

  5. Qt Add ons Modules(听说QtSystem有接口可以获取 imei号)

    http://wiki.qt.io/Qt-Add-ons-Modules 听说QtSystem有接口可以获取 imei号.http://wiki.qt.io/Qt-Add-ons-Modules这儿下 ...

  6. Python‘ssl.match_hostname()’函数SSL证书验证安全绕过漏洞

    漏洞名称: Python‘ssl.match_hostname()’函数SSL证书验证安全绕过漏洞 CNNVD编号: CNNVD-201312-033 发布时间: 2013-12-04 更新时间: 2 ...

  7. c#调用带有安全认证的java webservice

    最近使用c#调用另外一个同事写的java webservice耽误了很多时间,网上资料不太完整,走了很多弯路,希望对大家有帮助. 基本思路是1.拼装soap使用http post ,主要将验证身份信息 ...

  8. Android中TextView输入字数统计和限制

    在Android开发应用的时候,文本编辑框中最多输入140个字,经常会显示还剩多少字以限制用户输入的字数, EditText content;//定义一个文本输入框 TextView hasnum;/ ...

  9. Setting Up the ADT Bundle

    Setting Up the ADT Bundle The ADT Bundle provides everything you need to start developing apps, incl ...

  10. [Raobin] Ext.net在前端直接将对象转为json形式传入后台

    d.Render.ExtraParams.Add(Html.Y().Parameter("Json", new JavaScriptSerializer().Serialize(e ...