iOS视频播放之AVPlayer
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相关推荐
- iOS: ios视频播放(MPMediaPlayerController,AVPlayer,AVPlayerViewcontroller、ffmpeg-AVPlayer)...
介绍: 和音频播放一样,ios也提供个很多的API.如mediaPlayer.framework下的MPMediaPlayerController.AVFounditon.framework下的AVP ...
- 【iOS】视频播放之AVPlayer
[iOS]视频播放之AVPlayer iOS平台使用播放视频,可用的选项一般有这四个,他们各自的作用和功能如下: 使用环境 优点 缺点 AVPlayerViewController AVKit 简单易 ...
- iOS视频播放的基本方法
本文总结了iOS中最常见的视频播放方法,不同的方法都各具特点,我希望能够总结它们的不同,方便在开发中选择合适的技术方案. Apple为我们提供了多种方法来实现视频播放,包括MPMoviePlayerC ...
- iOS 视频播放从零开始(二)
iOS 9之后苹果推荐使用AVPlayer进行视频播放,AVPlayer相对于MPMediaPlayerViewController功能更加强大,有更多的灵活性,当然,也需要你去自定义构建UI.其他优 ...
- iOS 视频播放器开发
需求设计 做一个小学生教育辅导视频播放器. 参考小猿搜题视频播放器 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L0GsyFSt-1675164972791)(htt ...
- iOS视频播放器,IJKMediaFramework开发环境和测试环境集合包
iOS视频播放器,IJKMediaFramework开发环境和测试环境集合包,支持https视频流播放,解压后大概160M多一点点.欢迎下载, 链接: https://pan.baidu.com/s/ ...
- iOS开发之AVPlayer的精彩使用---网易新闻视频播放界面的另类实现
遇到个需求需要涉及到视频播放,那么没办法,先找资料开始进一步了解下这个不熟悉的东西 . 一个是 MP ,一个 是AV,MP是封装好的,用起来非常简单,但是自定义样式就基本不可能了.AVPlayer存在 ...
- iOS 视频播放 - AVPlayer
iOS实现视频播放,原生代码播放视频更多的使用AVPlayer和AVPlayerViewController进行播放. 其中, AVPlayer不能单独进行播放,仅使用AVPLayer的话,还需要将其 ...
- iOS 视频播放(AVPlayer)
文章目录一.AVPlayer1.简介2.视频播放的解决方案二.AVPlayer中的MVC1.v层 :AVPlayerLayer2.m层 :AVPlayerItem3.c层 :AVPlayer三.实现简 ...
最新文章
- 马斯克豁出4300员工,参与新冠研究,论文登上Nature子刊
- windows 技术篇 - uispy 工具获取和使用,windows窗口属性快捷查看工具
- 多人互砍游戏的后台服务器的多线程架构
- Apache htaccess的简单总结,以及参数的使用
- javaone_JavaOne 2014:会议与合同利益冲突
- 《HTML5 从入门到精通--7.6.3 单元格垂直跨度——rowspan》
- IPv6 带来的反欺诈难题,程序员该如何破解?
- 苹果三星业绩比惨:iPhone营收降17%,三星手机运营利润降40%
- nginx1.8.1反向代理、负载均衡功能的实现
- windows 下 TensorFlow(GPU 版)的安装
- 开课吧9.9元学python靠谱吗-开课吧的python课程怎么样,值得报名吗?
- NOIP2013提高组华容道题解
- 雷军,打不倒的王者!
- 免费数据集下载(很全面)
- web打印网页指定区域
- 社交媒体用户行为研究,图神经网络 社交网络
- 三维点云 PCA(上)
- 【邢不行|量化小讲堂系列05-Python量化入门】计算创业板平均市盈率
- 测试 这篇是拿来测试51ditu的OpenAPI的
- Java:Windows 10下载和配置JDK
热门文章
- matlab normc函数,matlab normc函数
- 自然语言处理情感分析matlab,自然语言处理中的情感分析
- Redis 入门系列-redis-redis 是什么,redis 的优点
- Redis安装以及在Idea中使用Redis初尝试
- Git笔记-查看TortoiseGit小乌龟工具记录的账号密码
- Android 实现钉钉自动打卡
- Python+Selenium一键进入B站王冰冰近期vlog
- 奇校验编码c语言实现,求助 奇偶校验的C语言编程
- pytorch 对抗样本_DeepRobust-对抗攻击和防御pytorch库
- Python setdefault()函数