2012-02-01 38 views
7

Câu hỏi này khá liên quan đến AVMutableComposition - Blank/Black frame between videos assets nhưng vì tôi không sử dụng AVAssetExportSession, các câu trả lời không phù hợp với vấn đề của tôi.Khung màu đen trong AVMutableComposition

Tôi đang sử dụng AVMutableComposition để tạo thành phần video và tôi đang đọc nó bằng AVAssetReader (Tôi cần có dữ liệu khung, tôi không thể sử dụng AVPlayer) nhưng tôi thường có khung màu đen giữa video của mình khối (không có trục trặc đáng chú ý trong âm thanh).

tôi tạo Thành phần của tôi như

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]; 

Tôi cũng đã cố gắng để chèn mỗi ca khúc bằng tay trong thành phần của tôi, nhưng tôi có hiện tượng tương tự.

Cảm ơn

+0

Bạn đã từng giải quyết vấn đề này chưa? Tôi nhận được một vấn đề tương tự. – elprl

+0

@ helprl Tôi đã xem mã của tôi và nó vẫn khá giống nhau. Tôi nghĩ rằng chúng tôi "cố định" vấn đề bằng cách tinh chỉnh (khoảng thời gian khung hình chính, tốc độ khung hình, ...) đầu vào định dạng video (chúng tôi có thể kiểm soát nó). Đó là một thời gian dài trước đây và tôi không thể nói chắc chắn những gì parametter cải thiện tình hình. – chub

Trả lời

0

Thử tạo hai bản nhạc video, sau đó thay thế giữa hai video khi thêm clip.

19

Tôi đã giải quyết vấn đề này sau nhiều giờ thử nghiệm. Có hai điều tôi cần thay đổi. 1) thêm tùy chọn 'chính xác' khi tạo nội dung.

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

2) không sử dụng

CMTime duration3 = [videoAsset3 duration]; 

sử dụng thay vì

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

Tôi thấy điều này ra sau khi tôi đặt màu nền AVPlayer Blue, sau đó tôi nhận thấy khung màu xanh xuất hiện, do đó, vấn đề là phải làm với thời gian. Sau khi tôi thay đổi thành cài đặt ở trên, các video khác nhau được căn chỉnh tốt khi sử dụng:

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

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

Cảm ơn @elprl .. công trình này hoàn hảo – MAMN84

Các vấn đề liên quan