2011-05-10 23 views
11

için çalışır Bir HTTP canlı akışından "playlist.m3u8" video oynatan bir iOS uygulamasına sahibim ve AVPlayer kullanarak özel bir oynatıcım var. Scrubbing gibi normal kullanıcı etkileşimlerini işlemek için videonun süresini almam gerekiyor, fakat bir sebepten dolayı IOS 4.3'te aşağıdaki kodu çağırdığımda xcode 4.0 kullanarak bir CMTime aldım. ne yapıyor, çünkü CMNimeValue = 0 ve CMTimeScale = 0, NaN ve CMTimeFlags = 17'yi veren daha da garip.iOS AVAsset.duration, HTTP canlı akışı için sıfırdır ancak ilerleyen

AVPlayerItem *pItem = mPlayer.currentItem; 
AVAsset* asset = pItem.asset; 
CMTime d = asset.duration; 
double duration = CMTimeGetSeconds(asset.duration); 

Ben de i/oynamaya ovalama başlamadan önce hazır olduğundan emin olmak için yükleme çalma listesinin durumunu izlemek do bahsetmeliyiz: Burada

hiç karmaşık değil ben kullandığı kod:

[mPlayer addObserver:self forKeyPath:@"currentItem.status" options:0 context:VideoPlaybackViewDelegateStatusContext]; 

Herkesin sağlayabileceği bu konularla ilgili yardımlarınız için teşekkür ederiz.

+0

Bunun iOS 4.2'de çalıştığından bahsetmeyi unuttum - hem simülatör hem de aygıt. – Aaron

cevap

8

https://developer.apple.com/library/ios/releasenotes/AudioVideo/RN-AVFoundation-Old/#//apple_ref/doc/uid/TP40011199-CH1-SW4

süresi artık yerine onun AVAsset karşılık gelen daha AVPlayerItem örneği elde edilmelidir için yukarıda belirtilen dokümanlar.

- (void)loadPlayerWithItem:(AVPlayerItem *)playerItem { 
    self.player = [AVPlayer playerWithPlayerItem:playerItem]; 
    ... 
    // changed this from previous value currentItem.asset.duration 
    [self.player addObserver:self forKeyPath:@"currentItem.duration" 
            options:0 
            context:nil]; 
    ... 
} 

benim oyuncu ve yukarıdaki değişikliği uygulanan: anahtar-değer gözlemleyerek aracılığıyla geçerli oynatıcı öğesinden süresini almak için, (iOS 4.0 için yazılmıştır aslen NGMoviePlayer çekilmiş) şu yöntemi kullanın süre şimdi çalışıyor! AVFoundation'daki bu değişiklik, sorunun temel sebebiydi. CMTimeFlags = 17 kCMTimeFlags_Indefinite & kCMTimeFlags_Valid belirtir ve docs belirtin: Özellikle

, URL varlık tarafından rapor süresi akış bazlı ortam karşılık gelen bir AVPlayerItem süresi farklı olabilir ve süre, tipik olarak kCMTimeIndefinite olduğu oynatılırken değişir.

+0

Çok teşekkürler darvids0n ve sürüm notu :-) eksik aptal hissediyorum. – Aaron

+0

hala benim için nan'i geri döndürüyor :(, iOS 9.0 kullanarak –