2013-09-29 15 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. 
    }]; 

希望、これは同じ問題で誰にも役立ちます。

関連する問題