iOS視訊播放(二)
這篇文章介紹一下基於
AVPlayer
的視訊播放器。
先上Demo,點選我的GitHub下載Demo。
AVPlayer介紹
AVPlayer最大的優勢是能夠定製播放器的介面樣式。AVPlayer本身是不能播放視訊的,要播放視訊,必須建立一個AVPlayerLayer,將AVPlayerLayer新增到控制器檢視才能播放。除了AVPlayer和AVPlayerLayer,還需要一個類AVPlayerItem。AVPlayerItem是媒體資源管理物件,管理視訊的一些基本資訊和狀態,一個AVPlayerItem對應著一個視訊資源。
建立好AVPlayer、AVPlayerLayer、AVPlayerItem物件之後就能開始播放視訊。下面一一介紹播放暫停、播放時間、緩衝進度等功能。
1、播放/暫停
使用視訊URL初始化一個AVPlayerItem,把AVPlayerItem設定為AVPlayer的currentItem,然後通過KVO監聽AVPlayerItem的屬性[playerItem addObserver:self forKeyPath:@"status" options:NSKeyValueObservingOptionNew context:nil]
,當屬性變為AVPlayerStatusReadyToPlay
時,通過AVPlayer呼叫- (void)play
方法即可播放視訊。
AVPlayer的- (void)play
和- (void)pause
分別控制播放和暫停,根據AVPlayer的播放速度rate可以判斷當前是否為播放狀態,rate=0暫停,rate=1播放。視訊播放完成後AVPlayerItem會傳送AVPlayerItemDidPlayToEndTimeNotification
通知。
2、視訊時間
視訊時間包含兩部分:視訊總時間和視訊當前播放時間。視訊總時間通過CMTimeGetSeconds(_player.currentItem.duration)
獲取,當前播放時間通過CMTimeGetSeconds(_player.currentTime)
獲取。
獲取到這兩個時間,就可以展示視訊播放進度。播放進度需要一秒更新一次,可以用定時器來更新,也可以用AVPlayer的方法- (id)addPeriodicTimeObserverForInterval:(CMTime)interval queue:(nullable dispatch_queue_t)queue usingBlock:(void (^)(CMTime time))block
在Block裡更新。建議使用這個方法更新時間,因為它更新時間更加準確,使用block的引數time
獲得準確的播放進度。
獲取播放進度之後,分別給顯示時間的Label和UISlider賦值,使用者可以拖動UISlider對視訊進行拖動播放,在拖拽結束之後,使用- (void)seekToTime:(CMTime)time toleranceBefore:(CMTime)toleranceBefore toleranceAfter:(CMTime)toleranceAfter
讓視訊從拖拽到的地方開始播放。
3、緩衝進度
通過KVO監聽AVPlayerItem的loadedTimeRanges屬性來監聽緩衝進度更新,在KVO中新增下面程式碼獲取當前緩衝進度。
NSArray *array = _player.currentItem.loadedTimeRanges;
CMTimeRange timeRange = [array.firstObject CMTimeRangeValue];//本次緩衝時間範圍
NSTimeInterval startSeconds = CMTimeGetSeconds(timeRange.start);//本次緩衝起始時間
NSTimeInterval durationSeconds = CMTimeGetSeconds(timeRange.duration);//緩衝時間
NSTimeInterval totalBuffer = startSeconds + durationSeconds;//緩衝總長度
float totalTime = CMTimeGetSeconds(_player.currentItem.duration);//視訊總長度
float progress = totalBuffer/totalTime;//緩衝進度
4、視訊切換
每個AVPlayer只能播放一個視訊,切換視訊可以用- (void)replaceCurrentItemWithPlayerItem:(AVPlayerItem *)item
來實現。
播放器程式碼已經上傳了我的GitHub,歡迎下載,這裡就不貼程式碼了。
** 全屏播放效果:**
相關文章
- iOS開發:音訊播放、錄音、視訊播放、拍照、視訊錄製iOS音訊
- iOS開發系列--音訊播放、錄音、視訊播放、拍照、視訊錄製(轉)iOS音訊
- iOS 視訊播放的簡單使用iOS
- IOS音視訊(二)AVFoundation視訊捕捉iOS
- iOS之視訊的三種播放方式iOS
- IOS 無限迴圈小視訊播放iOS
- iOS開發 webview禁止視訊全屏播放iOSWebView
- iOS AVPlayer之後臺連續播放視訊iOS
- iOS AVPlayer播放視訊的留白處理iOS
- iOS 視訊播放之切換清晰度iOS
- IOS播放視訊載入之前的logoiOSGo
- IOS 整合 Bilibili IJKPlayer播放器,播放rtmp視訊流iOS播放器
- iOS 基於AVPlayer自定義視訊播放器iOS播放器
- ios網路學習------9 播放網路視訊iOS
- 視音訊播放音訊
- opencv視訊播放OpenCV
- iOS 9音訊應用播放音訊之iOS 9音訊播放進度iOS音訊
- iOS--React Native視訊播放器外掛iOSReact Native播放器
- Android開發 海康威視 多路視訊播放(同時播放視訊)Android
- unity中播放視訊Unity
- 視訊播放學習
- 視訊播放器播放器
- iOS AVPlayer之無縫切換播放(類似今日頭條視訊播放效果)iOS
- iOS AVAudioPlayer(音訊播放)iOS音訊
- iOS視訊邊下邊播–快取播放資料流iOS快取
- iOS 9音訊應用播放音訊之控制播放速度iOS音訊
- ios平臺cocos2d-x播放音訊、視訊、音效的Demo(支援網路視訊)iOS音訊
- 【Android 進階】仿抖音系列之列表播放視訊(二)Android
- 【Android開發VR實戰】二.播放360°全景視訊AndroidVR
- Android音視訊之MediaPlayer音視訊播放Android
- 小程式播放當前視訊關閉其他視訊
- 如何使用 iOS 15 和 macOS Monterey 將視訊隔空播放到 MaciOSMac
- 自定義視訊播放器播放器
- 視訊播放器工具Infuse播放器
- 視訊播放–踩坑小計
- HTML video 播放本地視訊HTMLIDE
- 視訊播放--踩坑小計
- Android播放swf類視訊Android