美文网首页
【iOS】AVQueuePlayer讲解

【iOS】AVQueuePlayer讲解

作者: 794f64d7a292 | 来源:发表于2017-05-25 16:40 被阅读9612次

    最近在做的项目中使用AVPlayer进行视频播放,因为第一次做功能点这样庞大的视频播放项目,所以在带着团队review代码的时候发现有些地方还是值得优化的,很经典的一块就是按照集数顺序播放,当时做的是思路如下:

    AVPlayer

    1.为当前AVPlayerItem添加播放结束的通知AVPlayerItemDidPlayToEndTimeNotification

    //监听视频是否已经播放完毕,然后实现KVO的方法:
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(mediaPlayDidEnd:) name:AVPlayerItemDidPlayToEndTimeNotification object:self.playerItem];
    

    2.实现监听方法

    //视频播放结束通知
    - (void)mediaPlayDidEnd:(NSNotification *)notification{
      //在此实现切换相应集数的逻辑,例如:刷新UI、切换播放地址等
    }
    

    review代码的时候一不小心点到官方API里面,发现一个神奇的字眼queue,给我的直觉就是队列播放,仔细阅读官方文档后内心感觉这玩意简直就是为自己量身打造的,无比激动 ——AVQueuePlayer

    AVQueuePlayer

    下面我根据官方文档简单进行翻译下,就不上代码了,因为文档很简单,功能很直白

    AVQueuePlayer is a subclass of [AVPlayer](https://developer.apple.com/reference/avfoundation/avplayer?language=objc) used to play a number of items in sequence. Using this class you can create and manage a queue of player items comprised of local or progressively downloaded file-based media, such as QuickTime movies or MP3 audio files, as well as media served using HTTP Live Streaming.
    AVQueuePlayerAVPlayer被用来依次播放的子类。用这个类你能够创建和管理一个播放或文件下载的队列,例如QuickTime格式的视频或MP3音频文件,同样还支持流媒体的使用。

    • 创建队列对象的方法有两种,都是根据数组创建的,数组元素类型是AVPlayerItem
    + (instancetype)queuePlayerWithItems:(NSArray<AVPlayerItem *> *)items;
    
    - (AVQueuePlayer *)initWithItems:(NSArray<AVPlayerItem *> *)items;
    
    • 获取当前存在于队列里元素的方法
    - (NSArray<AVPlayerItem *> *)items;
    
    • 结束当前播放并播放下一集(将当前item从队列中移除)
    - (void)advanceToNextItem;
    
    • 判断是否能够在队列中追加播放资源(需要注意的是,不支持队列中存在多个相同的播放资源,即AVPlayerItem*
    - (BOOL)canInsertItem:(AVPlayerItem *)item afterItem:(nullable AVPlayerItem *)afterItem;
    
    • 在指定位置插入一条播放资源(如果元素是空的则自动会过滤掉)
    - (void)insertItem:(AVPlayerItem *)item afterItem:(nullable AVPlayerItem *)afterItem;
    
    • 从队列中移除播放资源(如果移除的是当前正在播放的元素,则会自动执行advanceToNextItem播放下一集)
    - (void)removeItem:(AVPlayerItem *)item;
    
    • 清除所有播放资源(当执行这一操作后,将会暂停播放)
    - (void)removeAllItems;
    

    以上就是AVQueuePlayer相关的介绍,使用它可以平滑的进行连续播放

    等以后有时间了,将会把播放器这块代码整理下和大家共享(需要和公司申请)~~

    相关文章

      网友评论

          本文标题:【iOS】AVQueuePlayer讲解

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