这里我使用一个播放视频的小例子,会有源码分享给大家
如果要读取网络视频,视频如果是http的则需要修改info.plist
- 添加 App Transport Security Settings 字典类型
- 在 App Transport Security Settings 下添加 Allow Arbitrary Loads 改为YES

1.导入AVFoundation.framework框架

2.在头部导入
#import <AVFoundation/AVFoundation.h>
跳过创建视图部分,会有源码分享给大家,只介绍下关键的方法
重要的几个类:AVPlayer 、AVPlayerItem 、AVPlayerLayer
#判断AVPlayerItem的状态(status)来对AVPlayer进行操作
#AVPlayer本身无法播放视频,必须要把视频加到AVPlayerLayer中,才能显示。
两个KVO :
NSKeyValueObservingOptionNew
NSKeyValueObservingOptionOld
AVPlayerItem
//添加观察者
[_playerItem
addObserver:self
forKeyPath:@"status"
options:NSKeyValueObservingOptionNew
context:nil];
//对播放源的三个状态(status)
AVPlayerItemStatusReadyToPlay播放源准备好
AVPlayerItemStatusUnknown播放源未知
AVPlayerItemStatusFailed播放源失败
currentTime 获取播放源当前播放时间
duration 获取播放源总播放时长
#获取到的是CMTime value/timescale = 秒数
AVPlayer
//添加定时器,更新当前的播放进度
- (id)addPeriodicTimeObserverForInterval:(CMTime)interval queue:(nullable dispatch_queue_t)queue usingBlock:(void (^)(CMTime time))block;
//设置当前播放时间
- (void)seekToTime:(CMTime)time;
//开始播放
- (void)play;
//停止播放
- (void)pause;
AVPlayerLayer
//将player添加到layer中
+ (AVPlayerLayer *)playerLayerWithPlayer:(nullable AVPlayer *)player;
//设置player的播放方式
_playerLayer.videoGravity = AVLayerVideoGravityResizeAspect;
/*
AVLayerVideoGravityResizeAspectFill
AVLayerVideoGravityResizeAspect
AVCoreAnimationBeginTimeAtZero
AVLayerVideoGravityResize
*/
创建一个视频播放器的思路:
- 创建一个view用来放置AVPlayerLayer
- 设置AVPlayer AVPlayerItem 并将 AVPlayer放到AVPlayerLayer中,在将AVPlayerLayer添加到[view.layer addSubLayer]中
- 添加观察者,观察播放源的状态
- 如果状态是AVPlayerItemStatusReadyToPlay就开始播放
- 在做一些功能上的操作
//获取url 本地url
//NSURL *url = [[NSBundle mainBundle]URLForResource:@"视频" withExtension:@"mp4"];
NSURL *url = [NSURL URLWithString:@"http://v1.mukewang.com/a45016f4-08d6-4277-abe6-bcfd5244c201/L.mp4"];
//创建playerItem
_playerItem = [AVPlayerItem playerItemWithURL:url];
//添加item的观察者 监听播放源的播放状态(status)
[_playerItem addObserver:self forKeyPath:@"status" options:NSKeyValueObservingOptionNew context:nil];
//创建playerItem
_player = [AVPlayer playerWithPlayerItem:_playerItem];
//创建playerLayer
_playerLayer=[AVPlayerLayer playerLayerWithPlayer:_player];
//设置_layer的frame
_playerLayer.frame=CGRectMake(_playerView.frame.origin.x, _playerView.frame.origin.y, _playerView.frame.size.width,300);
//添加到_playerView中
[_playerView.layer addSublayer:_playerLayer];
demo 链接 --> (百度网盘)简单视频播放器 提取密码:3zv4
网友评论