2012-02-01 31 views
7

Bu soru tam olarak AVMutableComposition - Blank/Black frame between videos assets ile ilgilidir, ancak bir AVAssetExportSession kullanmıyordum çünkü cevaplar sorunuma uygun değil.AVMutableComposition içinde siyah çerçeveler

Video kompozisyonu oluşturmak için bir AVMutableComposition kullanıyorum ve bir AVAssetReader kullanarak okuyorum (çerçeve verisine ihtiyacım var, AVPlayer kullanamıyorum) ancak videom arasında sıklıkla siyah çerçeveler var parçalar (seste fark edilebilir bir aksaklık yoktur). Ben de kompozisyonda elle her parçayı eklemek için çalıştı

AVMutableCompositionTrack *compositionVideoTrack = [composition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid]; 
AVMutableCompositionTrack *compositionAudioTrack = [composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid]; 

NSMutableArray* durationList = [NSMutableArray array]; 
NSMutableArray* videoList= [NSMutableArray array]; 
NSMutableArray* audioList= [NSMutableArray array]; 

for (NSInteger i = 0; i < [clips count]; i++) 
{ 
    AVURLAsset *myasset = [clips objectAtIndex:i]; 
    AVAssetTrack *clipVideoTrack = [[myasset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0]; 
    [videoList addObject:clipVideoTrack]; 

    AVAssetTrack *clipAudioTrack = [[myasset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0]; 
    [audioList addObject:clipAudioTrack]; 

    CMTime clipDuration = [myasset duration]; 
    CMTimeRange clipRange = CMTimeRangeMake(kCMTimeZero, clipDuration); 
    [durationList addObject:[NSValue valueWithCMTimeRange:clipRange]]; 
} 

[compositionVideoTrack insertTimeRanges:durationList ofTracks:videoList atTime:kCMTimeZero error:nil]; 
[compositionAudioTrack insertTimeRanges:durationList ofTracks:audioList atTime:kCMTimeZero error:nil]; 

olarak

benim Kompozisyon oluşturmak ama aynı fenomeni var. klipleri eklerken

Teşekkür

+0

Bu sorunu çözdünüz mü? Benzer bir problem alıyorum. – elprl

+0

@elprl Koduma bir baktım ve hemen hemen aynı kaldı. Bence bu sorunu (anahtar kare aralığı, çerçeve, ...) video formatı girişi (biz kontrol edebiliriz) yaparak "düzelttik" diye düşünüyorum. Bu uzun zaman önceydi ve ne parametrenin durumu geliştirdiğinden emin olamıyorum. – chub

cevap

0

sonra ikisi arasında alternatif iki video parçaları oluşturmayı deneyin ve.

19

Bu sorunu birkaç saatlik bir testten sonra çözmeyi başardım. Değiştirmem gereken iki şey var. 1) Varlığı oluştururken 'kesin' seçeneğini ekleyin.

NSDictionary *options = @{AVURLAssetPreferPreciseDurationAndTimingKey:@YES}; 
AVURLAsset *videoAsset3 = [AVURLAsset URLAssetWithURL:clip3URL options:options]; 

2) Ben Blue AVPlayer arka plan rengini ayarlamak sonra bu öğrendim yerine

AVAssetTrack *videoAsset3Track = [[videoAsset3 tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0]; 
CMTime duration3 = videoAsset3Track.timeRange.duration; 

CMTime duration3 = [videoAsset3 duration]; 

kullanımını kullanmayın, o zaman görünen mavi çerçeveler, fark Bu yüzden sorun zamanlamalarla ilgiliydi. Yukarıdaki ayarlara geçtiğimde, farklı videolar şu şekillerde hizada hizalanır:

AVMutableCompositionTrack *videoTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeVideo 
                     preferredTrackID:kCMPersistentTrackID_Invalid]; 

[videoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, duration3) 
         ofTrack:videoAsset3Track 
         atTime:kCMTimeZero error:&error]; 
+2

Teşekkürler @elprl .. bu mükemmel çalışıyor – MAMN84

İlgili konular