SORU
23 HAZİRAN 2012, CUMARTESİ


Nasıl gecikme başlangıç AVPlayer iOS azaltmak için

Not, soru aşağıda: Tüm varlıklar cihaz üzerinde yerel ağ akışı gerçekleşiyor. Videoları ses parçaları içerir.

Minimum gecikme ile video dosyalarını çalmak söz konusu video klibin başlangıç gerektiren bir iOS uygulaması üzerinde çalışıyorum. Ne yazık ki belirli bir video klibi biz aslında başlangıç için ihtiyacınız olana kadar bir sonraki ne olduğunu bilmiyoruz. Özellikle ne Zaman bir video klibi oynuyor, biz biliyoruz ne de (kabaca) 10 video klipler, bilmiyoruz hangisi tam olarak ne kadar gelir o zaman "hemen" play sonraki klibi.

Ne yaptım bakmak fiili başlangıç gecikmeler arayın addBoundaryTimeObserverForTimes video Oynatıcı ile bir süre bir milisaniye için görünce bu video aslında başladı oynayacağım, sanırım farkı o zaman damgası ile ilk etapta kod gösteren varlık için oynamaya başla.

Gördüklerim böylece-çok, var bulduğu kullanarak kombinasyonu AVAsset yükleme ve oluşturma AVPlayerItem Bu kez hazır, ve sonra bekleyen için AVPlayerStatusReadyToPlay çağırırım oynamak eğilimindedir için 1 ila 3 saniye için başlangıç klibi.

Beri kabaca eşdeğer olduğunu düşündüğüm için açık ettik: [AVPlayerItem playerItemWithURL:] arıyorum AVPlayerItemStatusReadyToPlay oynamak için bekliyorum. Aynı performansı kabaca.

Gözlemlediğim bir şeyi ilk AVPlayer madde yükü diğerlerinden daha yavaştır. Bir fikir gibi görünüyor iyi bir genel uygulama olabilir ilk video oynatmak için denemeden önce uçuş öncesi kısa / boş bir varlık ile AVPlayer. [Slow start for AVAudioPlayer the first time a sound is played

Video başlangıç saatleri mümkün olduğunca aşağı almak istiyorum ve denemek için bazı şeyleri fikirleri var, ama yardım edebilecek kimse bazı rehberlik istiyorum.

Güncelleme: fikir altında 7 olarak uygulanan verimleri yaklaşık 500 ms geçiş süreleri. Bu bir gelişmedir, ama bu bile daha iyi olurdu.

Fikir 1: N AVPlayers (işe yaramaz) Kullanın

Kullanma ~ 10 AVPPlayer nesneler ve start-pause all ~ 10 klipleri ve sonra bildiğim tek ihtiyacımız, geçiş yapmak için, ve BM-pause doğru AVPlayer ve baştan başlayacak bir sonraki döngüsü.

Bu işler sanmıyorum, okudum çünkü iOS 4 aktif AVPlayer's sınırı kabaca. Burada biri StackOverflow bu konuda soran oldu, 4 AVPlayer sınırı öğrendi: fast-switching-between-videos-using-avfoundation

Fikir 2: Kullanın AVQueuePlayer (işe yaramaz)

AVQueuePlayer 10 AVPlayerItems sokmak-yükleme öncesi tüm sorunsuz başlamak için onlardan olacağını sanmıyorum. AVQueuePlayer bir kuyruk, ve gerçekten sadece sıradaki video hemen oynatmak için hazır hale getirir bence. ~10 videoları bir başlangıç zamanı gelene kadar tekrar oynamak ister, biz yaparız bilmiyorum. ios-avplayer-video-preloading

Fikir 3: Yük, Oyun ve arka plan (0 emin henüz ama hiç iç açıcı değil, değil) AVPlayerItems korumak

Bakıyorum bir fayda için, yük ve oyun ilk saniye her video klipte arka bastırmak video ve ses çıkışı), bir başvuru için her AVPlayerItem ve ne zaman bildiğimiz madde ihtiyaçlarını karşılamak üzere oynadığı için gerçek, takas, takas ve arka plan AVPlayer ile aktif. Durulayın ve Tekrarlayın.

Teorisi AVPlayer/AVPlayerItem'hala sonraki oynatma daha hızlı kılacak bazı hazır kaynaklarını elinde s. ki son çalınan olurdu Şimdiye kadar, bu fayda görmedim, ama AVPlayerLayer Kur, düzgün arka plan için olmayabilir. Bu gerçekten gördüğüm kadarıyla daha iyi olacaktır şüphesiz.

Fikir 4: farklı bir dosya biçimi yüklemek için daha hızlıdır belki bir tane kullanman?

Ben şu anda kullanıyorum .M4A (video-MPEG4) H. 264 format. H. 264 farklı Kodek seçenekleri bir yeri vardır, Bazı seçenekler diğerlerinden daha aramak daha hızlı olabilir. Dosya boyutu daha küçük artış sağlayacak daha gelişmiş ayarları kullanarak arama süresi, ancak başka herhangi bir seçenek bulamadım.

Fikir 5: kayıpsız video Kombinasyonu biçimi AVQueuePlayer

Varsa bir video format yani hızlı yükleme, ama belki dosya boyutu delice bir fikir olabilir; ön hazırlık ilk 10 saniye her video klibi olan bir versiyon bu şişirilmiş ama daha hızlı yüklemek için, ama o bir varlık olduğunu kodlanmış H. 264. Bir AVQueuePlayer kullanın ve sıkıştırılmamış dosya biçiminde ilk 10 saniye ekleyin ve bunu hazırlamak için 10 saniye alır 264 H. bir takip/önyükleme zaman. 'En iyi' iki dünyanın: fast times, ama aynı zamanda daha kompakt. faydaları başlangıç olsun diye

Fikir 6: standart olmayan AVPlayer a / benim / başkasının kullanın yazma Kullanın

Verilen ihtiyaçlarımı, belki de kullanamıyorum AVPlayer, ama tatil için AVAssetReader ve decode ilk birkaç saniye (muhtemelen yazma raw dosya disk) ve gelince çalma, faydalanmak raw biçimi için oyun geri hızlı. Benim için çok büyük bir proje gibi görünüyor, ve eğer saf bir şekilde bu konuda gidiyorum, belirsiz / daha iyi bir işe yaramaz. Sorunsuz ve sıkıştırılmamış videonun her karesini 2.25 MB. Safça eğer ~ 30 fps ile gidersek konuşuyor video, ~60 MB/s ile bitirmek istiyorum herhalde ısrar / imkansız olan-okuma-disk gereksinimi. Açıkçası görüntü sıkıştırma belli bir düzeyde (belki PVRTC) yerli openGL/es biçimleri) yapmak zorunda kalırız... ama bu biraz çılgınca. Belki kullanabileceğim bir kütüphane var mı?

Fikir 7: her şey tek bir film varlık ve seekToTime . Birleştirmek

Yukarıda biraz daha kolay olabilecek bir fikir, tek bir film içine her şeyi birleştirmek ve seekToTime kullanmaktır. Şey her tarafa zıplıyor olurduk. Bu film aslında rasgele erişim. Bu aslında iyi bir iş olabilir: avplayer-movie-playing-lag-in-ios5

Hangi yaklaşım en iyi olacağını düşünüyor musunuz? Şimdiye kadar, lag azaltılması açısından çok ilerleme kaydettim.

CEVAP
31 EKİM 2012, ÇARŞAMBA


Varlığın hazır bir kere oluşturun, film süresi gibi hesaplamaları yapar, dosyasında filmin tüm meta verileri içeren emin olmayabilir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CNNMoney

    CNNMoney

    16 Kasım 2006
  • HowtoDrawAndPaint

    HowtoDrawAnd

    24 EKİM 2010
  • psidot

    psidot

    2 Kasım 2006