AVAssetWriterで出力した動画のtrack情報について
iPadで録画保存済みの動画を読込(A)後、画像を加工(CMSampleBufferを使用)して(B)、出力(C)するために、AVAssetWriterを利用しています。
(A)、(C)の実装は、Apple公式が提供しているドキュメント/サンプルを流用して、その中に、(B)の処理を追加するという実装です。
https://developer.apple.com/jp/documentation/AVFoundationPG.pdf
しかし、上記の方法で出力したファイルを、AVURLAssetとして読み込むと、tracksの数が0になります。
そのため、loadValuesAsynchronouslyForKeys を利用して、加工後の動画ファイルを読み込無む際に、エラーが発生するようになります。
=============
NSArray *requestedKeys = [NSArray arrayWithObjects:@"tracks", kPlayableKey, nil];
[asset loadValuesAsynchronouslyForKeys:requestedKeys completionHandler:
^{
dispatch_async( dispatch_get_main_queue(),
^{
/* IMPORTANT: Must dispatch to main queue in order to operate on the AVPlayer and AVPlayerItem. */
[self prepareToPlayAsset:asset withKeys:requestedKeys];
});
}];
....
....
=============
- (void)prepareToPlayAsset:(AVURLAsset *)asset withKeys:(NSArray *)requestedKeys
{
for (NSString *thisKey in requestedKeys)
{
NSError *error = nil;
AVKeyValueStatus keyStatus = [asset statusOfValueForKey:thisKey error:&error];
if (keyStatus == AVKeyValueStatusFailed)
{
[self assetFailedToPrepareForPlayback:error];
return;
}
}
....
....
AVAssetWriterを利用した処理で、トラックを維持したまま、動画ファイルを出力することはできるのでしょうか?
もしくは、track数が0の状態でも、正常に読み込む方法があるのでしょうか?