iOS AVPlayer 使用总结
简介
iOS 中视频播放自定义能力最强的就是 AVPlayer,今天主要就介绍 AVPlayer使用的核心流程和代码。
三个关键类 AVPlayerItem AVPlayer AVPlayerLayer
这是AVPlayer播放视频的核心三个类,apple 按照MVC的模式封装了视频播放的整个逻辑,AVPlayerItem 是 Model层 AVPlayer 是C 控制层 AVPlayerLayer 是view展示层。
- AVPlayerItem 存储了视频的基本信息 比如 时长 缓冲进度 播放状体等。
- AVPlayer提供了视频 播放 暂定 从视频那个位置开始播放的控制功能。
- 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 使用总结相关推荐
- iOS AVPlayer视频播放器
代码地址如下: http://www.demodashi.com/demo/11168.html 一.运行效果 二.实现过程 ①.创建播放器avPlayer //创建播放器url = [url str ...
- android ios av tv,iOS AVPlayer 实现后台连续播放视频
最近接到一个需求,需要做一个在后台播放视频的功能.折腾了一下,最后总算完成了.因此写一篇文章,介绍下具体的实现步骤,也说说自己遇到的坑,算是总结和记录. 前言 当 App 退到后台时,会进入 susp ...
- IOS AVPlayer无法播放H265编码格式的MP4视频
具体现象 使用 IOS 的 AVPlayer 播放 H265编码格式的mp4视频时,只有声音无图像. 原因 H265即 HEVC,在打包成mp4时需要有 codec tag.hev1 or hvc1是 ...
- iOS AVPlayer 与 AVPlayerViewController
iOS 媒体功能主要的类 AVPlayer 全功能影音播放器 AVPlayerLayer 主要用于显示视频 AVPlayerViewController 提供了默认的可视化控制界面 一. AVPlay ...
- iOS AVPlayer的使用
AVPlayer 在iOS开发中,播放视频通常有两种方式,一种是使用MPMoviePlayerController(需要导入MediaPlayer.Framework),还有一种是使用AVPlayer ...
- iOS AVPlayer和AVPlayerViewController
1. AVPlayer AVPlayer是iOS常见的播放器,使用时需导入 #import <AVKit/AVKit.h> AVPlayer能控制播放器的播放,暂停,播放速度 // 初始化 ...
- iOS AVPlayer 简单应用
//1 AVPlayerViewController *avvc = [[AVPlayerViewController alloc] init]; //2 avvc.player = [[AVPlay ...
- iOS AVplayer 基本使用方法
*说明:利用AVPlayer可以制作视频播放器.音频播放器:使用AVPlayer播放过的格式有 .mp4 .m3u8 .mp3 1.创建播放器: _player = [[AVPlayer all ...
- iOS - AVPlayer播放视频,获取视频尺寸(宽高)
公司启动页要求播放视频,其实很简单,AVPlayer可以胜任此任务. - (void)playVideoWithType:(NSString *)type {//获取视频sizeNSURL *medi ...
- iOS AVPlayer的一些定制
用户点击了播放视频,但是此时手机是静音状态,产品说静音状态下也需要把声音给播放出来,so~ 原文: https://www.jianshu.com/p/998709165dfd 首先你要确保playe ...
最新文章
- poj 1523(无向联通图的割点)
- input框的内容变化监听
- 基于容器的全链路运维平台实践
- CSS设置列表的符号
- 掌握 Ajax,第 8 部分: 在请求和响应中使用 XML
- element表格里面放图片_Element UI table里上传图片后如何显示在表格里
- UILabel设定行间距方法
- js组装知识(待续……)
- 二分+BFS——刺杀大使(洛谷 P1902)
- 小程序自定义组件:摇奖小游戏
- songshu-video-uniapp-YYC松鼠短视频前端源码-开源--优雅草科技官方发布
- 三步解决NLP数据标注难题,百度大脑EasyDL专业版上线文本智能标注功能
- ubuntu和windows双系统默认启动顺序
- SOA,SOAP,RPC,以及 RPC协议与 REST 协议之间的关系(搜狗)
- N1 从 armbian 刷回 webpad 方法
- OpenStack落地德国大众:锐意创新还是孤注一掷?
- 苹果公司的电脑发展史——硬件篇
- 学asp.net的自己学做网站的第一感受
- 瑞工热敏票据打印机不自动裁切的设置
- EAS多数据源套打开发流程(实现方式)