简介

iOS 中视频播放自定义能力最强的就是 AVPlayer,今天主要就介绍 AVPlayer使用的核心流程和代码。

三个关键类 AVPlayerItem AVPlayer AVPlayerLayer

这是AVPlayer播放视频的核心三个类,apple 按照MVC的模式封装了视频播放的整个逻辑,AVPlayerItem 是 Model层 AVPlayer 是C 控制层 AVPlayerLayer 是view展示层。

  1. AVPlayerItem 存储了视频的基本信息 比如 时长 缓冲进度 播放状体等。
  2. AVPlayer提供了视频 播放 暂定 从视频那个位置开始播放的控制功能。
  3. AVPlayerLayer就是一个暂时 提供给我们自定义UI的

简单实例

 NSURL *videoUrl = [NSURL URLWithString:urlStr];AVAsset *asset = [AVAsset assetWithURL:videoUrl];_videoItem = [AVPlayerItem playerItemWithAsset:asset]; // 视频资源信息 M_player = [AVPlayer playerWithPlayerItem:_videoItem]; // 视频控制播放层 C_playerLayer = [[AVPlayerLayer alloc]init]; // 视频展示层 V_playerLayer.player = _player;_playerLayer.frame = CGRectMake(0, 0, superView.bounds.size.width, superView.bounds.size.height);[superView.layer addSublayer:_playerLayer]; // 添加到父视图的layer层

四个关键的监听

 // 监听视频状态[_videoItem addObserver:self forKeyPath:@"status" options:NSKeyValueObservingOptionNew context:@"item.status"];  // 监听缓冲进度[_videoItem addObserver:self forKeyPath:@"loadedTimeRanges" options:NSKeyValueObservingOptionNew context:@"item.loaded"]; // 获取播放进度[_player addPeriodicTimeObserverForInterval:CMTimeMake(1, 1) queue:dispatch_get_main_queue() usingBlock:^(CMTime time) {// CMTimeGetSeconds(time) // 已经播放的秒数}];// 接收播放完成通知[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handlePlayEnd) name:AVPlayerItemDidPlayToEndTimeNotification object:nil];

监听回调

  • (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context{
    if ([keyPath isEqualToString:@“status”] && context == @“item.status”){// 可播放状态
    if (((NSNumber *)[change objectForKey:NSKeyValueChangeNewKey]).integerValue== AVPlayerItemStatusReadyToPlay) {
    [_player play];
    // 视频总时长
    self.duration = CMTimeGetSeconds(_videoItem.duration);
    }
    }
    else if ([keyPath isEqualToString:@“loadedTimeRanges”] && context==@“item.loaded”){
    // 缓冲进度
    CMTimeRange rangeValue = [[change objectForKey:NSKeyValueChangeNewKey][0] CMTimeRangeValue];
    NSLog(@"—rangeValue—%f-------%f",CMTimeGetSeconds(rangeValue.start),CMTimeGetSeconds(rangeValue.duration));
    }
    }

停止播放时一定要移除监听 非常重要

 [[NSNotificationCenter defaultCenter] removeObserver:self];[_videoItem removeObserver:self forKeyPath:@"status"];[_videoItem removeObserver:self forKeyPath:@"loadedTimeRanges"];

更详细的使用 https://github.com/everyStudyNow/XBAVPlayer

iOS AVPlayer 使用总结相关推荐

  1. iOS AVPlayer视频播放器

    代码地址如下: http://www.demodashi.com/demo/11168.html 一.运行效果 二.实现过程 ①.创建播放器avPlayer //创建播放器url = [url str ...

  2. android ios av tv,iOS AVPlayer 实现后台连续播放视频

    最近接到一个需求,需要做一个在后台播放视频的功能.折腾了一下,最后总算完成了.因此写一篇文章,介绍下具体的实现步骤,也说说自己遇到的坑,算是总结和记录. 前言 当 App 退到后台时,会进入 susp ...

  3. IOS AVPlayer无法播放H265编码格式的MP4视频

    具体现象 使用 IOS 的 AVPlayer 播放 H265编码格式的mp4视频时,只有声音无图像. 原因 H265即 HEVC,在打包成mp4时需要有 codec tag.hev1 or hvc1是 ...

  4. iOS AVPlayer 与 AVPlayerViewController

    iOS 媒体功能主要的类 AVPlayer 全功能影音播放器 AVPlayerLayer 主要用于显示视频 AVPlayerViewController 提供了默认的可视化控制界面 一. AVPlay ...

  5. iOS AVPlayer的使用

    AVPlayer 在iOS开发中,播放视频通常有两种方式,一种是使用MPMoviePlayerController(需要导入MediaPlayer.Framework),还有一种是使用AVPlayer ...

  6. iOS AVPlayer和AVPlayerViewController

    1. AVPlayer AVPlayer是iOS常见的播放器,使用时需导入 #import <AVKit/AVKit.h> AVPlayer能控制播放器的播放,暂停,播放速度 // 初始化 ...

  7. iOS AVPlayer 简单应用

    //1 AVPlayerViewController *avvc = [[AVPlayerViewController alloc] init]; //2 avvc.player = [[AVPlay ...

  8. iOS AVplayer 基本使用方法

    *说明:利用AVPlayer可以制作视频播放器.音频播放器:使用AVPlayer播放过的格式有 .mp4  .m3u8   .mp3 1.创建播放器: _player = [[AVPlayer all ...

  9. iOS - AVPlayer播放视频,获取视频尺寸(宽高)

    公司启动页要求播放视频,其实很简单,AVPlayer可以胜任此任务. - (void)playVideoWithType:(NSString *)type {//获取视频sizeNSURL *medi ...

  10. iOS AVPlayer的一些定制

    用户点击了播放视频,但是此时手机是静音状态,产品说静音状态下也需要把声音给播放出来,so~ 原文: https://www.jianshu.com/p/998709165dfd 首先你要确保playe ...

最新文章

  1. poj 1523(无向联通图的割点)
  2. input框的内容变化监听
  3. 基于容器的全链路运维平台实践
  4. CSS设置列表的符号
  5. 掌握 Ajax,第 8 部分: 在请求和响应中使用 XML
  6. element表格里面放图片_Element UI table里上传图片后如何显示在表格里
  7. UILabel设定行间距方法
  8. js组装知识(待续……)
  9. 二分+BFS——刺杀大使(洛谷 P1902)
  10. 小程序自定义组件:摇奖小游戏
  11. songshu-video-uniapp-YYC松鼠短视频前端源码-开源--优雅草科技官方发布
  12. 三步解决NLP数据标注难题,百度大脑EasyDL专业版上线文本智能标注功能
  13. ubuntu和windows双系统默认启动顺序
  14. SOA,SOAP,RPC,以及 RPC协议与 REST 协议之间的关系(搜狗)
  15. N1 从 armbian 刷回 webpad 方法
  16. OpenStack落地德国大众:锐意创新还是孤注一掷?
  17. 苹果公司的电脑发展史——硬件篇
  18. 学asp.net的自己学做网站的第一感受
  19. 瑞工热敏票据打印机不自动裁切的设置
  20. EAS多数据源套打开发流程(实现方式)

热门文章

  1. 汤家凤:可以跳过接力题典强化篇直接动手真题吗?
  2. CUDA编程:笔记1
  3. 企业级PHP后台开发框架
  4. Swift开发之简单计算器项目
  5. 分期手续费率转换成年利率
  6. 用ZK UI解决storm 读取Kafka时的Fetch offset *** is out of range for topic , resetting offset
  7. 海康威视摄像头激活失败的几个原因和方法
  8. Java -- Servlet面试题及答案(需更深入了解)
  9. Endnote X8激活注册信息
  10. 数据库期末知识点汇总