CVImageBufferRef を受け取り、処理のために VTCompressionSession に渡す関数があります。
VTCompressionSession が開始され、VTCompressionSessionCreate への呼び出しが成功しました。
写真ライブラリからビデオ URL を取得し、次を使用して処理しています。
- (void)processImageBuffersFromURL:(NSURL *)url withBlock:(void (^)(CVImageBufferRef bufferRef))block {
AVAsset *asset = [AVAsset assetWithURL:url];
AVAssetTrack *track = [[asset
tracksWithMediaType:AVMediaTypeVideo]
objectAtIndex:0];
AVAssetReaderTrackOutput
*readerTrack = [AVAssetReaderTrackOutput
assetReaderTrackOutputWithTrack:track
outputSettings:@{(id)kCVPixelBufferPixelFormatTypeKey: @(kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange)}];
AVAssetReader *reader = [AVAssetReader assetReaderWithAsset:asset
error:nil];
[reader addOutput:readerTrack];
[reader startReading];
CMSampleBufferRef sample = NULL;
while ((sample = [readerTrack copyNextSampleBuffer])) {
CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sample);
block(imageBuffer);
}
}
ブロックは基本的に呼び出すだけです
SInt32 status = VTCompressionSessionEncodeFrame(_compressionSession, imageBuffer, CMTimeMake(self.currentFrameNumber++, 30), kCMTimeInvalid, NULL, (__bridge void *)self, NULL);
ステータスは -12902 です。このサイトでステータスに関する情報を調べましたが、他に関連する情報は見つかりませんでした。サイトによると、エラーはkVTParameterErr
.
VTCompressionOutputCallback が呼び出されていません。
このエラーコードを説明できる人はいますか?