问题描述
我一直在尝试进行压缩回调,该压缩回调将压缩后的数据发送到流程的其他部分,但是当我放置发送数据的行时,我得到了这个错误
实例成员'ptManager'不能用于类型'SampleHandler'
这是回调的代码:
let vtCallback : @convention(c) (UnsafeMutableRawPointer?,UnsafeMutableRawPointer?,OSStatus,VTEncodeInfoFlags,CMSampleBuffer?) -> Swift.Void =
{
(outputCallbackRefCon,sourceFrameRefCon,status,infoFlags,sampleBuffer) -> Swift.Void in
let imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer!)
CVPixelBufferLockBaseAddress(imageBuffer!,CVPixelBufferLockFlags(rawValue: 0))
CVPixelBufferLockBaseAddress(imageBuffer!,CVPixelBufferLockFlags(rawValue: 0))
let bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer!)
let height = CVPixelBufferGetHeight(imageBuffer!)
let src_buff = CVPixelBufferGetBaseAddress(imageBuffer!)
let data = NSData(bytes: src_buff,length: bytesPerRow * height)
CVPixelBufferUnlockBaseAddress(imageBuffer!,CVPixelBufferLockFlags(rawValue: 0))
NSLog("Size: " + String((data as Data).count))
ptManager.sendObject(object: data,type: 102)
}
我已经查看了其他解决方案,但是没有找到任何可行的方法,因为如果我将ptManager
设置为静态,则会导致比解决的问题多得多的问题,并且与删除=
相同。
在此方面的所有帮助将不胜感激!
编辑
以下是我尝试过的一些较早的代码,这些代码可能有用,但在将其分配给回调时却从未被调用:
func compressionOutputCallback(
outputCallbackRefCon:UnsafeMutableRawPointer?,sourceFrameRefCon:UnsafeMutableRawPointer?,status:OSStatus,infoFlags:VTEncodeInfoFlags,sampleBuffer:CMSampleBuffer) {
let imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)
CVPixelBufferLockBaseAddress(imageBuffer!,CVPixelBufferLockFlags(rawValue: 0))
CVPixelBufferLockBaseAddress(imageBuffer!,CVPixelBufferLockFlags(rawValue: 0))
let bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer!)
let height = CVPixelBufferGetHeight(imageBuffer!)
let src_buff = CVPixelBufferGetBaseAddress(imageBuffer!)
let data = NSData(bytes: src_buff,length: bytesPerRow * height)
CVPixelBufferUnlockBaseAddress(imageBuffer!,CVPixelBufferLockFlags(rawValue: 0))
NSLog("Size: " + String((data as Data).count))
ptManager.sendObject(object: data,type: 102)
if status != noErr{
NSLog("SBC: Error encoding video",status)
print("SBC: Error encoding video",status)
return
}
print("SBC: compressionOutputCallback dataBuffer",status)
}
//Does not get called at all
编辑2:
在这里使用回调:
VTCompressionSessionCreate(allocator: nil,width: 1080,height: 1920,codecType: kCMVideoCodecType_H264,encoderSpecification: nil,imageBufferAttributes: nil,compressedDataAllocator: nil,outputCallback: vtCallback as? VTCompressionOutputCallback,refcon: nil,compressionSessionOut: sessionOut)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)