2011-02-08 27 views
5

AVURLAsset kullanarak bir sorunum var. tamamlama bloğunda AVURLAsset uzak dosya ile yüklenemiyor

NSString * const kContentURL = @ 

"http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8"; 
... 

    NSURL *contentURL = [NSURL URLWithString:kContentURL]; 
    AVURLAsset *asset = [AVURLAsset URLAssetWithURL:contentURL 
               options:nil]; 
    [asset loadValuesAsynchronouslyForKeys:[NSArray arrayWithObject:tracksKey] 
          completionHandler:^{ 
    ... 
           NSError *error = nil; 
           AVKeyValueStatus status = [asset statusOfValueForKey:tracksKey 
                       error:&error]; 
    ... 
    } 

, durum AVKeyValueStatusFailed ve hata iletisi "açamıyorsunuz" mesafesindedir. Gördüğüm tüm exemples, doğrudan bir HTTP Canlı akışı olarak bir AVURLAsset yaratamazsınız ... böylelikle uzak dosyasını kullanarak bir sorun olduğunda,

Saygılarımızla, Quentin

cevap

6

yerel bir dosya kullanmak Apple'ın AV Foundation Programming Guide numaralı telefonunda belirtilmiştir. Eğer bu adımları izleyin verebilecek arkasında AVURLAsset erişimi gerekiyorsa Bunun

AVPlayerItem *pItem = [AVPlayerItem playerItemWithURL:theStreamURL]; 
AVPlayer *player = [AVPlayer playerWithPlayerItem:pItem]; 

ile AVPlayer akışı URL'sini içeren bir AVPlayerItem oluşturup örneğini gerekecek.

Adım 1/oyuncu kaleminin status mülkiyet değişiklikleri için kayıt

[playerItem addObserver:self forKeyPath:@"status" options:0 context:nil]; 

Adım 2/observeValueForKeyPath:ofObject:change:context:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object 
         change:(NSDictionary *)change context:(void *)context { 
    if ([keyPath isEqualToString:@"status"]) { 
     AVPlayerItem *pItem = (AVPlayerItem *)object; 
     if (pItem.status == AVPlayerItemStatusReadyToPlay) { 
      // Here you can access to the player item's asset 
      // e.g.: self.asset = (AVURLAsset *)pItem.asset; 
     } 
    } 
} 

EDIT yılında: Yanıtın

+0

Teşekkür düzeltilmiş, ben Bu çözümü denedim ancak gözlemi eklediğimde özellik zaten ayarlandığından currentItem değerine yönelik gözlemci yöntemi çağrılmıyor er. Bu yüzden AVPlayerItem statüsüne bir gözlemci metodu yerleştirdim ve buradan AVPlayer currentItem'i alabildim. – Quentin

+0

@Quentin Haklısınız, teşekkürler! Kodumun başka bir parçası ile karıştırıldım ... Bunu düzeltmek için cevabımı düzenledim. – Jilouc

İlgili konular