iOS基于AVPlayer自定义播放器
来源:互联网 发布:js飘窗代码 编辑:程序博客网 时间:2024/04/29 21:15
@interface PlayerView : UIView@property (nonatomic, strong) AVPlayer *avPlayer;@end
1. 配置
AVPlayer本身是无法显示视频的,首先要把AVPlayer添加到AVPlayerLayer。
@abstract Indicates the instance of AVPlayer for which the AVPlayerLayer displays visual output
在PlayerView中重写+ (Class)layerClass;
方法,使得PlayerView的 underlying layer 为 AVPlayerLayer:
+ (Class)layerClass{ return [AVPlayerLayer class];}
然后初始化AVPlayer:
+ (instancetype)playerWithPlayerItem:(AVPlayerItem *)item; + (instancetype)initWithPlayerItem:(AVPlayerItem *)item;
AVPlayerItem可以根据AVAsset创建,可以创建在线资源item,也可以是本地资源item。
创建AVPlayer之后就添加到AVPlayerLayer。
[(AVPlayerLayer *)self.layer setPlayer:self.avPlayer];
2. 使用
播放和暂停。
+ (void)play; + (void)pause;
音量控制。
@property (nonatomic) float volume;@property (nonatomic, getter=isMuted) BOOL muted;
切换播放Item。
- (void)replaceCurrentItemWithPlayerItem:(nullable AVPlayerItem *)item;
获取播放状态和缓存进度,这需要监听AVPlayer中当前播放的item中的属性变化。
[self.avPlayer.currentItem addObserver:self forKeyPath:@"status" options:NSKeyValueObservingOptionNew context:nil];[self.avPlayer.currentItem addObserver:self forKeyPath:@"loadedTimeRanges" options:NSKeyValueObservingOptionNew context:nil];
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{ AVPlayerItem *playerItem = (AVPlayerItem *)object; if ([keyPath isEqualToString:@"status"]) { if ([playerItem status] == AVPlayerStatusReadyToPlay) { // 正常播放 } else if ([playerItem status] == AVPlayerStatusFailed) { // 播放失败 // show retry } else { // 未知错误 // show retry } } else if ([keyPath isEqualToString:@"loadedTimeRanges"]) { NSArray *loadedTimeRanges = [playerItem loadedTimeRanges]; CMTimeRange timeRange = [loadedTimeRanges.firstObject CMTimeRangeValue]; // 获取缓冲区域 float startSeconds = CMTimeGetSeconds(timeRange.start); float durationSeconds = CMTimeGetSeconds(timeRange.duration); NSTimeInterval result = startSeconds + durationSeconds; // 计算缓冲总进度 }}
可参考 https://github.com/czb1n/ZBVideoPlayer
0 0
- iOS基于AVPlayer自定义播放器
- 基于AVPlayer 自定义播放器
- 基于 AVPlayer 自定义播放器
- iOS 基于AVPLayer封装视频播放器
- ios 使用AVPlayer自定义视频播放器
- ios 使用AVPlayer自定义视频播放器
- 基于AVPlayer播放器
- iOS中使用AVPLayer自定义视频播放器
- AVPlayer自定义视频播放器
- iOS AVPlayer播放器 简介
- 基于AVPlayer简单封装的播放器
- iOS 利用AVPlayer创建视频播放器
- iOS 利用AVPlayer创建视频播放器
- iOS开发--AVPlayer实现音乐播放器
- iOS自带AVPlayer视频播放器
- iOS开发--AVPlayer实现音乐播放器
- iOS-基于AVPlayer的视频播放器代码封装-0-需求分析与框架设计阶段
- ios开发-AVPlayer 音乐播放自定义经典例题
- Windows平台安装配置Hadoop2.5.2(不借助cygwin)
- 把一个List<String>集合中的数据用分隔符分开,并以字符串展示出来
- eclipse 以及各个常用插件
- EASYUI FORM表单提交post
- 判断银行卡号是否有效
- iOS基于AVPlayer自定义播放器
- 海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一
- 端口占用
- 如何提取非行间样式
- 【Android 1.6】View和ViewGroup的touch事件分析和总结
- Python数据分析编程技能
- Spring在代码中获取bean的几种方式
- Kylin使用之创建Cube和高级设置
- 演示集合的迭代遍历