ios AVPlayer 读取本地视频的使用

这里我使用一个播放视频的小例子,会有源码分享给大家
如果要读取网络视频,视频如果是http的则需要修改info.plist

  • 添加 App Transport Security Settings 字典类型
  • 在 App Transport Security Settings 下添加 Allow Arbitrary Loads 改为YES

1.导入AVFoundation.framework框架


ios AVPlayer 读取本地视频的使用_第1张图片

2.在头部导入

#import 

跳过创建视图部分,会有源码分享给大家,只介绍下关键的方法



重要的几个类: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]中
  • 添加观察者,观察播放源的状态
    1. 如果状态是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

你可能感兴趣的:(ios AVPlayer 读取本地视频的使用)