GitHub 倉庫地址
一個高度封裝的視頻播放器視圖,基於 AVPlayer、AVPlayerLayer、AVPlayerItem。
繼承自 UIView,能夠當作通常視圖使用,適用於 Swift 和 Objective-C。git
pod 'BBPlayerView'
@class BBPlayerView; @protocol BBPlayerViewDelegate <NSObject> @optional /** 播放進度更新回調 當播放結束後能夠決定是否循環播放 */ - (void)bb_playerView:(nullable BBPlayerView *)playerView progressDidUpdatedAtTime:(CGFloat)currentTime totalTime:(CGFloat)totalTime progress:(CGFloat)progress; /** 播放狀態變化回調 */ - (void)bb_playerView:(nullable BBPlayerView *)playerView statusDidUpdated:(BBPlayerViewStatus)status; /** 預加載進度回調 */ - (void)bb_playerView:(nullable BBPlayerView *)playerView didPreloadData:(CGFloat)startTime durationTime:(CGFloat)durationTime totalLoadedTime:(CGFloat)totalLoadedTime totalTime:(CGFloat)totalTime; @end
@interface BBPlayerView : UIView /** 代理 經過代理方法能夠獲取播放狀態、播放進度、預加載進度的變化 !!!確保在調用 -bb_loadDataWithURL: 方法以前設置代理屬性(若是不須要代理則不用設置)!!! */ @property (nonatomic, weak, nullable) IBOutlet id <BBPlayerViewDelegate> bb_delegate; /** 加載媒體資源或切換媒體資源 若是新加載的媒體資源 URL 和當前載入的 ULR 相同且播放器處於 BBPlayerViewStatusReadyToPlay 狀態,則忽略本次加載操做 每次真正載入媒體資源時,都會自動調用一次 -bb_release 方法 */ - (void)bb_loadDataWithURL:(nullable NSString *)url; /** 清空播放器 */ - (void)bb_release; /** 播放 因爲 AVPlayer 的屬性 actionAtItemEnd 設置爲 AVPlayerActionAtItemEndPause (默認值) 因此在媒體資源播放結束後 AVPlayer 的 rate 會設爲 0.0 在媒體資源結尾處調用該方法無效(進度不變仍處在 1.0) 注意:在加載某些媒體資源時,播放結束後調用 -bb_play/-bb_pause 方法可能會改變 AVPlayer 的 rate 值爲 1.0/0.0 那麼再去調用 -bb_seekToProgress:completionHandler: 方法,可能在跳轉成功後處於 播放/暫停 狀態 因此確保媒體資源播放結束後不要調用 -bb_play/-bb_pause 方法 */ - (void)bb_play; /** 暫停 */ - (void)bb_pause; /// 跳轉至指定進度。 /// 該方法完成後不會改變播放速率 /// 該方法是異步操做 /// @param progress 指定進度。取值範圍:0.0 ~ 1.0 /// @param completionHandler 結束回調。finished 參數:YES 表示跳轉完成;NO 表示跳轉失敗或取消了 - (void)bb_seekToProgress:(CGFloat)progress completionHandler:(void (^ _Nullable)(BOOL finished))completionHandler; /** 視頻填充模式 BBPlayerViewGravityScaleFill -- 填充滿視圖,可能變形,內容不會缺失 BBPlayerViewGravityAspectFill -- 填充滿視圖,不變形,可能內容缺失 BBPlayerViewGravityAspectFit -- 不變形填充視圖,直到一個邊到達視圖邊界,內容不會缺失 */ @property(nonatomic) BBPlayerViewGravity bb_videoGravity; @end
@interface BBPlayerViewCellManager : NSObject @property (class, readonly) BBPlayerViewCellManager *bb_manager; /** 添加真實播放視頻的 cell 只在 cell 播放視頻時把該 cell 加入到 manager 來管理 */ - (void)addCell:(id<BBPlayerViewCellManagerDelegate>)cell; /** 移除 cell 在 cell 進入可複用狀態調用 即:在 -prepareForReuse 調用該方法 */ - (void)removeCell:(id<BBPlayerViewCellManagerDelegate>)cell; /** 移除所有 cell 在列表所在控制器銷燬時調用 即:在 -dealloc 調用該方法 */ - (void)removeAllCells; /** 全部 cell 暫停播放 指定某個 cell 播放時,其餘全部 cell 暫停播放 */ - (void)pauseAllCellPlayers; @end
import BBPlayerView
#import "BBPlayerView.h"
BBPlayerView 能夠像 UIView 同樣代碼建立或者在 xib、storyboard 拖拽建立。
詳細使用方法請下載項目參考使用示例,包括簡單的視頻播放和視頻列表播放功能。github
[_playerView bb_loadDataWithURL:_URLField.text]; [_playerView bb_play];
圖片中箭頭表示操做或持續操做的結果,矩形表示狀態。
GitHub 倉庫地址api