实例成员x不能用于类型y

问题描述

我一直在尝试进行压缩回调,该压缩回调将压缩后的数据发送到流程的其他部分,但是当我放置发送数据的行时,我得到了这个错误

实例成员'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 (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...