AVPlayer

AVPlayer

一、定义必要的属性

//AVplayer
@property (strong, nonatomic)AVPlayer *player;//播放器
@property (strong, nonatomic)AVPlayerItem *playerItem;//播放单元
@property (strong, nonatomic)AVPlayerLayer *playerLayer;//播放界面(layer)

二、必要的配置

1.视频URL:

/ 本地视频
- (NSURL *)getLocalUrl{
    NSString *urlString = [[NSBundle mainBundle] pathForResource:@"xxx.mp4" ofType:nil];
    NSURL *url = [NSURL fileURLWithPath:urlString];
    return url;
}

// 网络视频
- (NSURL *)getNetworkUrl{
    NSString *urlString = @"http://xxx.xxx/xxx.mp4";
    NSURL *url = [NSURL URLWithString:[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
    return url;
}

2.播放单元

NSURL *mediaURL = [self getLocalUrl]; //或getNetworkUrl
//AVPlayerItem
self.playerItem = [AVPlayerItem playerItemWithURL:mediaURL];

3.播放对象

//AVPlayer
self.player = [AVPlayer playerWithPlayerItem:self.playerItem];

4.播放器的Layer

//AVPlayerLayer
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 200, 200)];

self.playerLayer = [AVPlayerLayer playerLayerWithPlayer:self.player];
self.playerLayer.frame = view.bounds;  self.playerLayer.videoGravity=AVLayerVideoGravityResizeAspectFill;//视频填充模式   

[view.layer addSublayer:self.playerLayer];   
[self.view addSubview:view];

5.开始播放

[self.player play];

到此一个简单的视频播放器完成。

三、常规设置

1.播放/暂停

[self.player play];
[self.player pause];

2.指定位置播放

//指定位置播放
[self.player seekToTime:startTime completionHandler:^(BOOL finished) {
        if (finished) {
            //到达指定位置,可以播放
            [self.player play]; //注意使用weakself,此处仅为示例
        }else{
            //没有完成
        }
    }];

3.观察状态变化

//通过KVO来观察status属性的变化,来获得状态信息
[self.playerItem addObserver:self forKeyPath:@"status" options:NSKeyValueObservingOptionNew context:nil];
//在observe方法中判断status
AVPlayerItemStatusUnknown,    //未知错误
AVPlayerItemStatusReadyToPlay,//已准备好
AVPlayerItemStatusFailed      //获取失败

四、其他操作

1.视频替换

NSURL *mediaURL = [self getNetworkUrl];
//AVPlayerItem
self.playerItem = [AVPlayerItem playerItemWithURL:mediaURL];
[self.player replaceCurrentItemWithPlayerItem:self.playerItem];

2.缓冲进度

NSArray *array = _player.currentItem.loadedTimeRanges;
CMTimeRange timeRange = [array.firstObject CMTimeRangeValue];//本次缓冲时间范围
NSTimeInterval startSeconds = CMTimeGetSeconds(timeRange.start);//本次缓冲起始时间
NSTimeInterval durationSeconds = CMTimeGetSeconds(timeRange.duration);//缓冲时间
NSTimeInterval totalBuffer = startSeconds + durationSeconds;//缓冲总长度
float totalTime = CMTimeGetSeconds(_player.currentItem.duration);//视频总长度
float progress = totalBuffer/totalTime;//缓冲进度

3.视频时间

CMTimeGetSeconds(_player.currentItem.duration)//视频总时间
CMTimeGetSeconds(_player.currentTime)//当前时间
//更新视频时间的方法
- (id)addPeriodicTimeObserverForInterval:(CMTime)interval queue:(nullable dispatch_queue_t)queue usingBlock:(void (^)(CMTime time))block
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值