AVFoundation 框架中的AVPlayer 也可以完成视频的播放,相较于强大及简单的MPMoviePlayerController,AVPlayer使用起来更加灵活,且偏近于底层。

AVPlayer本身不能显示视频,它需要通过播放器层AVPlayerLayer来展示视频,使用时将AVPlayerLayer添加到视图控制器的layer中。

AVPlayer播放视频的使用步骤

1.添加AVFoundation框架,引入头文件#import <AVFoundation/AVFoundation.h>

2.获取设置播放源AVPlayerItem对象

NSString*strURL=[NSString stringWithFormat:@“视频源地址(网络)”];

strURL=[strURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

NSURL*strFinalUrl=[NSURL URLWithString:strURL];

AVPlayerItem* playerItem=[AVPlayerItem playerItemWithURL:strFinalUrl];

3.初始化AVPlayer对象,顺便添加对于AVPlayerItem对象变化的通知

AVPlayer* player=[AVPlayer playerWithPlayerItem:playerItem];

//监控状态属性,监控播放状态

[playerItem addObserver:self forKeyPath:@"status" options:NSKeyValueObservingOptionNew context:nil];

//监控网络加载情况属性

[playerItem addObserver:self forKeyPath:@"loadedTimeRanges" options:NSKeyValueObservingOptionNew context:nil];

//停止监控

[playerItem removeObserver:self forKeyPath:@“监控属性”];

通过KVO监控播放器状态,在-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context中做相 应操作,变量含义如下:

@param keyPath 监控属性  @param object  监视器  @param change  状态改变  @param context 上下文

首先判断监控属性是否是自己想要的属性:播放状态(status)和加载视频时间长度变化(loadedTimeRanges)

AVPlayer的播放状态有三种,如下

typedef NS_ENUM(NSInteger, AVPlayerStatus) {

AVPlayerStatusUnknown,//未知

AVPlayerStatusReadyToPlay,//播放

AVPlayerStatusFailed//失败

};

加载视频长度变化从AVPlayerItem的loadedTimeRanges属性中得到,示例如下:

NSArray *array=playerItem.loadedTimeRanges;

CMTimeRange timeRange = [array.firstObject CMTimeRangeValue];//本次缓冲时间范围

float startSeconds = CMTimeGetSeconds(timeRange.start);//缓冲起始时间

float durationSeconds = CMTimeGetSeconds(timeRange.duration);//本次加载的长度

NSTimeInterval totalBuffer = startSeconds + durationSeconds;//总共加载的长度

4.初始化AVPlayerLayer对象,并添加到控制器视图层中

AVPlayerLayer *playerLayer=[AVPlayerLayer playerLayerWithPlayer:player];

playerLayer.frame=self.container.frame;

playerLayer.videoGravity=AVLayerVideoGravityResizeAspect;//视频填充模式

[self.view.layer addSublayer:playerLayer];

5.进度条的变化,同样需要依靠AVPlayer的- (id)addPeriodicTimeObserverForInterval:(CMTime)interval queue:(dispatch_queue_t)queue usingBlock:(void (^)(CMTime time))block方法获得播放进度,这个方法会在设定的时间间隔内定时更新播放进度,通过time参数通知客户端。

float current=CMTimeGetSeconds(time);//从播放开始获取播放时间(单位:秒)

float total=CMTimeGetSeconds([playerItem duration]);//获取视频播放总时间

[progress setProgress:(current/total) animated:YES];//设置进度条

iOS视频播放之AVPlayer相关推荐

  1. iOS: ios视频播放(MPMediaPlayerController,AVPlayer,AVPlayerViewcontroller、ffmpeg-AVPlayer)...

    介绍: 和音频播放一样,ios也提供个很多的API.如mediaPlayer.framework下的MPMediaPlayerController.AVFounditon.framework下的AVP ...

  2. 【iOS】视频播放之AVPlayer

    [iOS]视频播放之AVPlayer iOS平台使用播放视频,可用的选项一般有这四个,他们各自的作用和功能如下: 使用环境 优点 缺点 AVPlayerViewController AVKit 简单易 ...

  3. iOS视频播放的基本方法

    本文总结了iOS中最常见的视频播放方法,不同的方法都各具特点,我希望能够总结它们的不同,方便在开发中选择合适的技术方案. Apple为我们提供了多种方法来实现视频播放,包括MPMoviePlayerC ...

  4. iOS 视频播放从零开始(二)

    iOS 9之后苹果推荐使用AVPlayer进行视频播放,AVPlayer相对于MPMediaPlayerViewController功能更加强大,有更多的灵活性,当然,也需要你去自定义构建UI.其他优 ...

  5. iOS 视频播放器开发

    需求设计 做一个小学生教育辅导视频播放器. 参考小猿搜题视频播放器 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L0GsyFSt-1675164972791)(htt ...

  6. iOS视频播放器,IJKMediaFramework开发环境和测试环境集合包

    iOS视频播放器,IJKMediaFramework开发环境和测试环境集合包,支持https视频流播放,解压后大概160M多一点点.欢迎下载, 链接: https://pan.baidu.com/s/ ...

  7. iOS开发之AVPlayer的精彩使用---网易新闻视频播放界面的另类实现

    遇到个需求需要涉及到视频播放,那么没办法,先找资料开始进一步了解下这个不熟悉的东西 . 一个是 MP ,一个 是AV,MP是封装好的,用起来非常简单,但是自定义样式就基本不可能了.AVPlayer存在 ...

  8. iOS 视频播放 - AVPlayer

    iOS实现视频播放,原生代码播放视频更多的使用AVPlayer和AVPlayerViewController进行播放. 其中, AVPlayer不能单独进行播放,仅使用AVPLayer的话,还需要将其 ...

  9. iOS 视频播放(AVPlayer)

    文章目录一.AVPlayer1.简介2.视频播放的解决方案二.AVPlayer中的MVC1.v层 :AVPlayerLayer2.m层 :AVPlayerItem3.c层 :AVPlayer三.实现简 ...

最新文章

  1. 马斯克豁出4300员工,参与新冠研究,论文登上Nature子刊
  2. windows 技术篇 - uispy 工具获取和使用,windows窗口属性快捷查看工具
  3. 多人互砍游戏的后台服务器的多线程架构
  4. Apache htaccess的简单总结,以及参数的使用
  5. javaone_JavaOne 2014:会议与合同利益冲突
  6. 《HTML5 从入门到精通--7.6.3 单元格垂直跨度——rowspan》
  7. IPv6 带来的反欺诈难题,程序员该如何破解?
  8. 苹果三星业绩比惨:iPhone营收降17%,三星手机运营利润降40%
  9. nginx1.8.1反向代理、负载均衡功能的实现
  10. windows 下 TensorFlow(GPU 版)的安装
  11. 开课吧9.9元学python靠谱吗-开课吧的python课程怎么样,值得报名吗?
  12. NOIP2013提高组华容道题解
  13. 雷军,打不倒的王者!
  14. 免费数据集下载(很全面)
  15. web打印网页指定区域
  16. 社交媒体用户行为研究,图神经网络 社交网络
  17. 三维点云 PCA(上)
  18. 【邢不行|量化小讲堂系列05-Python量化入门】计算创业板平均市盈率
  19. 测试 这篇是拿来测试51ditu的OpenAPI的
  20. Java:Windows 10下载和配置JDK

热门文章

  1. matlab normc函数,matlab normc函数
  2. 自然语言处理情感分析matlab,自然语言处理中的情感分析
  3. Redis 入门系列-redis-redis 是什么,redis 的优点
  4. Redis安装以及在Idea中使用Redis初尝试
  5. Git笔记-查看TortoiseGit小乌龟工具记录的账号密码
  6. Android 实现钉钉自动打卡
  7. Python+Selenium一键进入B站王冰冰近期vlog
  8. 奇校验编码c语言实现,求助 奇偶校验的C语言编程
  9. pytorch 对抗样本_DeepRobust-对抗攻击和防御pytorch库
  10. Python setdefault()函数