最近在做的項目中使用AVPlayer進行視頻播放任斋,因為第一次做功能點這樣龐大的視頻播放項目柴淘,所以在帶著團隊review代碼的時候發(fā)現(xiàn)有些地方還是值得優(yōu)化的脾歇,很經(jīng)典的一塊就是按照集數(shù)順序播放蚣录,當時做的是思路如下:
AVPlayer
1.為當前
AVPlayerItem
添加播放結束的通知AVPlayerItemDidPlayToEndTimeNotification
;
//監(jiān)聽視頻是否已經(jīng)播放完畢立宜,然后實現(xiàn)KVO的方法:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(mediaPlayDidEnd:) name:AVPlayerItemDidPlayToEndTimeNotification object:self.playerItem];
2.實現(xiàn)監(jiān)聽方法
//視頻播放結束通知
- (void)mediaPlayDidEnd:(NSNotification *)notification{
//在此實現(xiàn)切換相應集數(shù)的邏輯,例如:刷新UI臊岸、切換播放地址等
}
review代碼的時候一不小心點到官方API里面橙数,發(fā)現(xiàn)一個神奇的字眼queue,給我的直覺就是隊列播放帅戒,仔細閱讀官方文檔后內(nèi)心感覺這玩意簡直就是為自己量身打造的灯帮,無比激動 ——AVQueuePlayer
AVQueuePlayer
下面我根據(jù)官方文檔簡單進行翻譯下崖技,就不上代碼了,因為文檔很簡單钟哥,功能很直白
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.
AVQueuePlayer是AVPlayer被用來依次播放的子類迎献。用這個類你能夠創(chuàng)建和管理一個播放或文件下載的隊列,例如QuickTime格式的視頻或MP3音頻文件腻贰,同樣還支持流媒體的使用吁恍。
- 創(chuàng)建隊列對象的方法有兩種,都是根據(jù)數(shù)組創(chuàng)建的播演,數(shù)組元素類型是
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;
- 從隊列中移除播放資源(如果移除的是當前正在播放的元素写烤,則會自動執(zhí)行
advanceToNextItem
播放下一集)
- (void)removeItem:(AVPlayerItem *)item;
- 清除所有播放資源(當執(zhí)行這一操作后翼闽,將會暫停播放)
- (void)removeAllItems;
以上就是AVQueuePlayer相關的介紹,使用它可以平滑的進行連續(xù)播放洲炊。
等以后有時間了感局,將會把播放器這塊代碼整理下和大家共享(需要和公司申請)~~