iOS AVPlayer 使用总结
生活随笔
收集整理的這篇文章主要介紹了
iOS AVPlayer 使用总结
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
簡介
iOS 中視頻播放自定義能力最強的就是 AVPlayer,今天主要就介紹 AVPlayer使用的核心流程和代碼。
三個關鍵類 AVPlayerItem AVPlayer AVPlayerLayer
這是AVPlayer播放視頻的核心三個類,apple 按照MVC的模式封裝了視頻播放的整個邏輯,AVPlayerItem 是 Model層 AVPlayer 是C 控制層 AVPlayerLayer 是view展示層。
簡單實例
NSURL *videoUrl = [NSURL URLWithString:urlStr];AVAsset *asset = [AVAsset assetWithURL:videoUrl];_videoItem = [AVPlayerItem playerItemWithAsset:asset]; // 視頻資源信息 M_player = [AVPlayer playerWithPlayerItem:_videoItem]; // 視頻控制播放層 C_playerLayer = [[AVPlayerLayer alloc]init]; // 視頻展示層 V_playerLayer.player = _player;_playerLayer.frame = CGRectMake(0, 0, superView.bounds.size.width, superView.bounds.size.height);[superView.layer addSublayer:_playerLayer]; // 添加到父視圖的layer層四個關鍵的監聽
// 監聽視頻狀態[_videoItem addObserver:self forKeyPath:@"status" options:NSKeyValueObservingOptionNew context:@"item.status"]; // 監聽緩沖進度[_videoItem addObserver:self forKeyPath:@"loadedTimeRanges" options:NSKeyValueObservingOptionNew context:@"item.loaded"]; // 獲取播放進度[_player addPeriodicTimeObserverForInterval:CMTimeMake(1, 1) queue:dispatch_get_main_queue() usingBlock:^(CMTime time) {// CMTimeGetSeconds(time) // 已經播放的秒數}];// 接收播放完成通知[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handlePlayEnd) name:AVPlayerItemDidPlayToEndTimeNotification object:nil];監聽回調
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context{
if ([keyPath isEqualToString:@“status”] && context == @“item.status”){// 可播放狀態
if (((NSNumber *)[change objectForKey:NSKeyValueChangeNewKey]).integerValue== AVPlayerItemStatusReadyToPlay) {
[_player play];
// 視頻總時長
self.duration = CMTimeGetSeconds(_videoItem.duration);
}
}
else if ([keyPath isEqualToString:@“loadedTimeRanges”] && context==@“item.loaded”){
// 緩沖進度
CMTimeRange rangeValue = [[change objectForKey:NSKeyValueChangeNewKey][0] CMTimeRangeValue];
NSLog(@"—rangeValue—%f-------%f",CMTimeGetSeconds(rangeValue.start),CMTimeGetSeconds(rangeValue.duration));
}
}
停止播放時一定要移除監聽 非常重要
[[NSNotificationCenter defaultCenter] removeObserver:self];[_videoItem removeObserver:self forKeyPath:@"status"];[_videoItem removeObserver:self forKeyPath:@"loadedTimeRanges"];更詳細的使用 https://github.com/everyStudyNow/XBAVPlayer
總結
以上是生活随笔為你收集整理的iOS AVPlayer 使用总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle rman在线备份,Orac
- 下一篇: 吴恩达深度学习笔记 最全最详细!这一篇足