如何檢測AVPlayer
何時播放?在調用play()
函數和實際播放視頻之間似乎有一點點延遲。AVPlayer播放時檢測
3
A
回答
6
據我所知,我同意你的看法,有從調用play()
函數到視頻實際播放(換句話說,視頻的第一幀被渲染的時間)之間有輕微的延遲。延遲取決於一些標準,例如視頻類型(視頻點播或直播),網絡狀況......但幸運的是,無論何時呈現視頻的第一幀,我的意思是視頻實際播放的時間。
通過觀察當前AVPlayerItem
的status
,並且每當它是AVPlayerItemStatusReadyToPlay
時,應該是第一幀已經被渲染。
[self.playerItem addObserver:self forKeyPath:@"status" options:NSKeyValueObservingOptionInitial | NSKeyValueObservingOptionNew context:NULL];
-(void)observeValueForKeyPath:(NSString*)path ofObject:(id)object change:(NSDictionary*)change context:(void*) context {
if([self.playerItem status] == AVPlayerStatusReadyToPlay){
NSLog(@"The video actually plays")
}
}
順便提一下,還有另一種解決方案,我們觀察到的AVPlayerLayer
readyForDisplay
狀態,這也表明,每當視頻呈現。然而,這種解決方案具有蘋果文件
/*!
@property readyForDisplay
@abstract Boolean indicating that the first video frame has been made ready for display for the current item of the associated AVPlayer.
@discusssion Use this property as an indicator of when best to show or animate-in an AVPlayerLayer into view.
An AVPlayerLayer may be displayed, or made visible, while this propoerty is NO, however the layer will not have any
user-visible content until the value becomes YES.
This property remains NO for an AVPlayer currentItem whose AVAsset contains no enabled video tracks.
*/
@property(nonatomic, readonly, getter=isReadyForDisplay) BOOL readyForDisplay;
這裏提到一個缺點是示例代碼
self.playerLayer = [AVPlayerLayer playerLayerWithPlayer:self.player];
[self.playerLayer addObserver:self forKeyPath:@"readyForDisplay" options:NSKeyValueObservingOptionInitial | NSKeyValueObservingOptionNew context:NULL];
-(void)observeValueForKeyPath:(NSString*)path ofObject:(id)object change:(NSDictionary*)change context:(void*) context {
if([self.playerLayer isReadyForDisplay]){
NSLog(@"Ready to display");
}
}
Thereotically,[self.playerLayer isReadyForDisplay]
然而,應該返回YES,作爲文檔,它不guaranted。
我希望這會有所幫助。
5
對於視頻:
AVPlayer
有一個名爲rate (Float)
的說法,如果rate
大於0.0,那裏正在播放的視頻。
您可以檢查是否rate
爲!=0
:(速度可以爲負,如果玩家會倒流)
if vidPlayer != nil && vidPlayer.rate != 0 {
println("playing")
}
相關問題
- 1. 如何檢測AVPlayer視頻何時結束播放?
- 2. 如何檢測AVPlayer何時開始/停止播放
- 3. AVPlayer不播放
- 4. AVPlayer自動播放
- 5. AVPlayer不能播放
- 6. 如何檢測AVPlayer中的錯誤鏈接播放swift
- 7. 如何檢測AVPlayer實際開始快速播放
- 8. AVPlayer的播放時間目前的播放時間
- 9. 使用AVPlayer播放.pls播放列表
- 10. AVPlayer Streaming - 在特定時間播放流
- 11. 帶AVPlayer的AVAudioSession:狀態菜單中的「播放」圖標不顯示AVPlayer播放器正在播放的時間
- 12. 播放m3u8播放列表時,AVPlayer會自動調整嗎?
- 13. 用AVPlayer播放pls文件?
- 14. 在AVPlayer中播放視頻
- 15. AVPlayer不播放視頻
- 16. AVPlayer播放TS文件
- 17. Avplayer視頻播放方法
- 18. 使用AVPlayer播放視頻
- 19. 多個AVPlayer同步播放
- 20. AVPlayer不會播放MovieFile
- 21. AVPlayer不播放本地MP4
- 22. AVPlayer seekToTime從頭播放
- 23. AVComposition的AVPlayer播放速率
- 24. AQRecorder AAC在AVPlayer中播放
- 25. 檢測音樂何時播放
- 26. 如何在AVPlayer中獲得當前播放時間和總播放時間?
- 27. 檢測Spotify歌曲播放
- 28. Kinect SDK播放器檢測
- 29. 如何在播放廣播流時設置AVPLayer的音量
- 30. m3u8音頻流在MPMoviePlayerController播放,但不是AVPlayer播放?
我覺得它非常有幫助。我目前正在使用「self.player!.addBoundaryTimeObserverForTimes([NSValue(CMTime:CMTimeMake(1,20))],隊列:nil,usingBlock:{()」並且它不是100%的時間發射,我是目前正在尋找你的解決方案,給我一個小時,我會更新如果它的工作,謝謝! –
我不得不添加更多的東西,這是測試,如果狀態是AVPlayerStatusReadyToPlay AND player.rate> 0.我需要確保播放器正在播放,但除此之外,完美答案 –
@ JoshO'Connor很高興聽到這個消息,謝謝。 – HDT