美文网首页
iOS 视频播放(AVPlayer)的使用

iOS 视频播放(AVPlayer)的使用

作者: Double丶K | 来源:发表于2019-06-14 14:07 被阅读0次

小记:很久没有用系统播放器,都快忘没了.整理下,好记住
要实现系统视频播放的功能,就是使用下面的3个类,缺一不可.

AVPlayerItem:继承NSObject,可以理解为一个模型,里面有很多视频的信息,时间,播放状态,设置播放的连接,等等功能.
AVPlayer:播放器对象.播放,暂停,设置PlayerItem,时间监听的回调(addPeriodicTimeObserverForInterval),设置快进拖拽等方法(seekToTime)
AVPlayerLayer:播放器的占位layer

一:基本的播放功能

使用这三个类能实现最基本的播放功能,添加进度条,播放暂停按钮,调节声音大小,都需要自己去添加.

#import <AVFoundation/AVFoundation.h>
@property (nonatomic, strong) AVPlayerItem      *playItem;
@property (nonatomic, strong) AVPlayerLayer     *playerLayer;
@property (nonatomic, strong) AVPlayer          *player;
//
_playItem = [[AVPlayerItem alloc] initWithURL:[NSURL URLWithString:urlStr]];
self.player = [[AVPlayer alloc] initWithPlayerItem:_playItem];
_playerLayer = [AVPlayerLayer playerLayerWithPlayer:_player];
 _playerLayer.frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 211);
//视频在AvPlayerLayer中的显示方式
_playerLayer.videoGravity = AVLayerVideoGravityResizeAspect;
[self.view.layer addSublayer:_playerLayer];

//再调用播放,最好通过监听播放器的status为AVPlayerStatusReadyToPlay再开始播放
[_player play];

二:细节处理

这里只做了一个播放状态的监听

//播放完成的通知,用于循环播放等功能
 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playDidFinish) name:AVPlayerItemDidPlayToEndTimeNotification object:self.player.currentItem];
//监听播放状态
[self.playItem addObserver:self forKeyPath:@"status" options:NSKeyValueObservingOptionNew context:nil];
//不用的时候移除监听
[self.playItem removeObserver:self forKeyPath:@"status"];

#pragma mark -------播放属性监听--------
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context {
    if ([keyPath isEqualToString:@"status"]) {
        switch (self.playItem.status) {
            case AVPlayerStatusUnknown:
                NSLog(@"KVO:未知状态,此时不能播放");
                break;
            case AVPlayerStatusReadyToPlay:
                if (!_player.timeControlStatus || _player.timeControlStatus != AVPlayerTimeControlStatusPaused) {
                    [_player play];
                }
                NSLog(@"KVO:准备完毕,可以播放");
                break;
            case AVPlayerStatusFailed:
                NSLog(@"KVO:加载失败,网络或者服务器出现问题");
                break;
            default:
                break;
        }
    }
}

相关文章

  • 使用 AVPlayer 进行多视频播放

    使用 AVPlayer 进行多视频播放 链接:http://ios.jobbole.com/84287/ 从前……...

  • iOS音频篇-AVPlayer

    iOS音频篇:使用AVPlayer播放网络音乐 iOS音频篇:AVPlayer的缓存实现

  • avplayer

    参考1.iOS通过AVPlayer打造自己的视频播放器2.基于 AVPlayer 自定义播放器3.AVPlayer...

  • iOS使用AVPlayer播放视频

    在iOS开发中,播放视频通常有两种方式,一种是使用MPMoviePlayerController(需要导入Medi...

  • AVPlayer 视频播放seek 导致视频卡住不播放

    iOS开发中经常视频开发,使用AV Foundation 提供的AVPlayer播放视频是,需要通过进度条进行拖拽...

  • AVPlayer那些坑

    AVPlayer是iOS上常用的视频播放器组件,支持常见的音视频格式。对于一般应用而言,使用AVPlayer和一套...

  • iOS使用AVPlayer自定义视频播放器

    上一篇:iOS使用AVPlayer自定义音频播放器iOS内部提供的有三种视频播放的方式,且都能播放本地、远程的音频...

  • 播放远程视频

    使用AVPlayer 播放远程视频 ViewController 使用MPMoviePlayerViewContr...

  • AVPlayer的基本使用

    AVPlayer的基本使用 在iOS开发中,播放视频通常有两种方式,一种是使用MPMoviePlayerContr...

  • iOS AVPlayer(视频播放)

    AVPlayer 在iOS开发中,播放视频通常有两种方式,一种是使用MPMoviePlayerController...

网友评论

      本文标题:iOS 视频播放(AVPlayer)的使用

      本文链接:https://www.haomeiwen.com/subject/grjufctx.html