2013-09-29 3 views
5

iOS7 SDK에서 AVMutableVideoCompositionLayerInstruction을 통해 일부 비디오를 수정하고 있습니다.iOS7 AVMutableVideoCompositionLayerInstruction이 비디오 프레임을 고정시킵니다.

다음 코드는 iOS 6.1.3에서 작동하지만 iOS7에서는 첫 번째 프레임에서 비디오가 고정됩니다 (그래도 오디오는 계속 들릴 수 있음). 비디오 컴포지션 만 추가하면 문제가 발생하는지 확인하기 위해 적용한 모든 실제 변환을 제거했습니다.

AVURLAsset* videoAsset = [[AVURLAsset alloc] initWithURL:inputFileURL options:NULL]; 
AVAssetTrack *videoAssetTrack = [[videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0]; 

AVMutableVideoCompositionLayerInstruction *layerInstruction = 
[AVMutableVideoCompositionLayerInstruction videoCompositionLayerInstructionWithAssetTrack:videoAssetTrack]; 

AVMutableVideoComposition *mainComposition = [AVMutableVideoComposition videoComposition]; 
AVMutableVideoCompositionInstruction *mainInstruction = [AVMutableVideoCompositionInstruction videoCompositionInstruction]; 
mainInstruction.layerInstructions = [NSArray arrayWithObject:layerInstruction]; 
mainInstruction.timeRange = CMTimeRangeMake(kCMTimeZero, videoAsset.duration); 
mainComposition.instructions = [NSArray arrayWithObject:mainInstruction]; 
mainComposition.frameDuration = videoAsset.duration; 
mainComposition.renderSize = CGSizeMake(320, 320); 

... 
exportSession.videoComposition = mainComposition; 

내가 확인 후 비디오 기록을 exportSessionvideoComposition 속성을 설정하지 않지만, 내가 어떤 변환을 적용 할 수 없습니다. 누구든지이 원인을 알 수 있습니까?

감사합니다.

+0

여기와 같기 때문에 인터넷에 도움이되지 않습니다. –

답변

0

비디오 컴포지션의 문제를 디버깅하는 좋은 방법은 [AVMutableVideoComposition videoCompositionWithPropertiesOfAsset:asset]을 사용하는 것입니다. 반환 된 AVMutableVideoComposition이 올바로 작동해야합니다. 그런 다음 instructions 어레이의 내용을 지침과 비교할 수 있습니다.

혼동 수준을 높이려면 asset도 있습니다 (AVComposition). 나는 AVFoundation 팀이 이런 것들의 이름을 지을 때 최선의 일을하지 않았다고 생각합니다. ...

1

저는 AVMutableVideoCompositionLayerInstruction과 CALayers와의 비디오 믹스에 어려움을 겪고 있습니다. 며칠 후 다른 방법을 시도해 보니 자산의 시간이 매우 중요하다는 것을 깨닫습니다.

loadValuesAsynchronouslyForKeys : 각 자산의 시간을 찾을 수있는 적절한 방법은 재산 사용입니다 @를 [@ "시간"이 같은 문제로 다른 사람에게 도움이

//Asset url 
    NSURL *assetUrl = [NSURL fileURLWithPath:_firstVideoFilePath]; 

    //audio/video assets 
    AVURLAsset * videoAsset = [[AVURLAsset alloc]initWithURL:assetUrl options:nil]; 

    //var to store the duration 
    CMTime __block durationTime; 

    //And here we'll be able to proper get the asset duration 
    [videoAsset loadValuesAsynchronouslyForKeys:@[@"duration"] completionHandler: ^{ 
     Float64 durationSeconds = CMTimeGetSeconds([videoAsset duration]); 
     durationTime = [videoAsset duration]; 
     //At this point you have the proper asset duration value, you can start any video processing from here. 
    }]; 

희망 .

관련 문제