VTCompressionSession跳过第一帧
问题描述:
我正在与一个VTCompressionSession编码夫特3用下面的代码:VTCompressionSession跳过第一帧
let pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
let statusCode = VTCompressionSessionEncodeFrame(compressionSession!, pixelBuffer!, CMSampleBufferGetPresentationTimeStamp(sampleBuffer), CMSampleBufferGetDuration(sampleBuffer)/* CMTimeMake(counter, 1000), kCMTimeInvalid*/, nil, nil, nil)
if statusCode != noErr {
NSLog("VT Error!", statusCode)
}
的pixelBuffer变量是输出一个AVCaptureSession。这个AVCaptureSession的回调然后调用上面的代码。 问题是,上面的代码被调用了n次,但VTCompressionSession的回调只调用了n - 10次,这让我想知道其他框架的去向。他们只是存储在队列中以提高压缩率还是存在问题? 我的最终h264流不是100%正确的,我不确定这是否会导致问题。
的VTCompressionSession与下面的代码创建:
var error = VTCompressionSessionCreate(kCFAllocatorDefault,
270,
480,
kCMVideoCodecType_H264,
nil,
nil,
nil,
vtCallback,
selfPointer,
&tmpSession);
的VT回调定义如下:
let vtCallback : @convention(c) (UnsafeMutableRawPointer?, UnsafeMutableRawPointer?, OSStatus, VTEncodeInfoFlags, CMSampleBuffer?) -> Swift.Void =
{
(outputCallbackRefCon, sourceFrameRefCon, status, infoFlags, sampleBuffer) -> Swift.Void in
NSLog("vtCallback")
}
谢谢您的帮助!
非常好的猜测! 我确实没有先打过电话,稍后再添加它,但没有重新检查。这并没有解决我的“更深层次”的问题,因为这显然不是问题的根源。由于这个问题解决了框架走向的问题,这绝对是一个很好的答案。非常感谢你! –
不客气!很幸运,我正在寻找一个“同花顺”类型的API,这是最接近的事情。 –