2016-04-07 15 views
4

Canlı akışı izlemek için AVPlayer kullanıyorum. Bu akış, kullanıcının bir saat önce arama yapabildiği ve oynayabileceği bir saat yakalamayı destekler. Ama bir sorum var, oyuncunun oynadığı doğru pozisyonu nasıl bilebilirim. Oyuncu pozisyonunda mevcut pozisyonu göstermem gerekiyor. Örneğin, kullanıcı yarım saat önce oynuyorsa, ekran -30: 00; Kullanıcı en son içeriği oynatıyorsa, oynatıcı 00:00 gösterecek ya da yaşayacak. TeşekkürCanlı yayın akışının doğru zamanlama nasıl elde edilir avplayer

cevap

2

canlı pozisyon zehir olsun ve seekableTimeRangesAVPlayerItem ait kullanarak kendisine yapabilirsiniz etmeye için: currentTime yöntem

arayarak

CMTimeRange seekableRange = [player.currentItem.seekableTimeRanges.lastObject CMTimeRangeValue]; 
CGFloat seekableStart = CMTimeGetSeconds(seekableRange.start); 
CGFloat seekableDuration = CMTimeGetSeconds(seekableRange.duration); 
CGFloat livePosition = seekableStart + seekableDuration; 

[player seekToTime:CMTimeMake(livePosition, 1)]; 

geri biraz zaman aramaya Ayrıca, geçerli oyun konumunu elde edebilirsiniz

CGFloat current = CMTimeGetSeconds([self.player.currentItem currentTime]); 
GCFloat diff = livePosition - current; 
+0

Harika bir çözüm, ama benim durumumda (AVPlayerItem: loadedTimeRanges start + duration) değerinin livePosition değerinden neden biraz daha büyük olduğunu merak ediyorum. –

2

Swift çözeltisi:

override func getLiveDuration() -> Float { 
    var result : Float = 0.0; 

    if let items = player.currentItem?.seekableTimeRanges { 

     if(!items.isEmpty) { 
      let range = items[items.count - 1] 
      let timeRange = range.timeRangeValue 
      let startSeconds = CMTimeGetSeconds(timeRange.start) 
      let durationSeconds = CMTimeGetSeconds(timeRange.duration) 

      result = Float(startSeconds + durationSeconds) 
     } 

    } 
    return result; 
} 
İlgili konular