2010-10-29 23 views
10

Örnekleri AVAssetReader üzerinden nasıl okuyorsunuz? AVAssetReader kullanarak çoğaltma veya karıştırma örnekleri buldum, ancak bu döngüler her zaman AVAssetWriter döngüsü tarafından kontrol edilir. Sadece bir AVAssetReader oluşturmak ve okumak, her örnek almak mümkün mü?Örnekleri AVAssetReader aracılığıyla okuma

Teşekkürler.

cevap

24

Video örnekleri veya ses örnekleri hakkında konuşup sormadığınız sorusundan net değil.

NSArray* video_tracks = [asset tracksWithMediaType:AVMediaTypeVideo]; AVAssetTrack* video_track = [video_tracks objectAtIndex:0];

: En varlıktan

asset_reader = [[AVAssetReader alloc] initWithAsset:asset error:&error]; (error checking goes here)

  • video izi (ler) alın:

    1. bir AVAssetReader Construct: Video örneklerini okumak için, aşağıdakileri yapmanız gerekir

    2. İstenen video karesi formatını ayarlayın:

      Belirli video biçimlerinin çalışmaz hale geldiğini ve gerçek zamanlı bir şey yapıyorsanız, bazı video biçimlerinin diğerlerinden daha iyi performans gösterdiğini unutmayın (örneğin, BGRA, ARGB'den daha hızlıdır).

    3. gerçek ray çıkışını Construct ve varlık okuyucuya ekleyin:

      AVAssetReaderTrackOutput* asset_reader_output = [[AVAssetReaderTrackOutput alloc] initWithTrack:video_track outputSettings:dictionary]; 
      [asset_reader addOutput:asset_reader_output];
    4. varlık okuyucu kapalı Kick:

      [asset_reader startReading];

    5. numuneler kapalı Oku:

       
      CMSampleBufferRef buffer; 
      while ([asset_reader status]==AVAssetReaderStatusReading) 
           buffer = [asset_reader_output copyNextSampleBuffer]; 
      
  • +0

    Teşekkür Damian. Aslında ses hakkında soruyordum. Sesi arabelleğe alabilirim, ancak tampondaki örneklere nasıl ulaşacağımı bilmiyorum. –

    +0

    Video örnek okuma çalışmam var, ancak her seferinde (veya bazı videolar için) her zaman boş video kareleriyle bitiyorum. Hata yok, sadece boş kareler. Herhangi bir fikir? –

    +0

    Emin değilim, üzgünüm. Örneklerde Sunum Zamanı Damgası'nı kontrol edebilir misiniz? Sürekli olarak sürekli boş olan videolar oluşturmak için bir yol bulabilir misiniz - belki bu yardımcı olacak? – damian

    2

    damian cevabı video ile benim için çalıştı ve bir minör modifikasyonu: 3. adımda, ben Sözlük değişken olması gerektiğini düşünüyorum:

    NSMutableDictionary* dictionary = [[NSMutableDictionary alloc] init]; 
    
    +0

    aah, haklısınız. Bunu şimdi tamir ettim. – damian

    +2

    Bunu değiştirilemez hale getirmeye gerek yok. Sadece modern Objective-C'leri kullanın: '@ {(NSString *) kCVPixelBufferPixelFormatTypeKey: @ ()}' ya da klasik '[NSDictionary dictionaryWithObject: [NSNumber numberWithInt: ] forKey: (NSString *) kCVPixelBufferPixelFormatTypeKey] '. Başlatmada anahtar/nesnenin geçirilmesi hiçbir mutabilite gerektirmez. – Regexident

    +0

    Bu açıklama için teşekkürler Regexidnet. –