我正在尝试为多对等连接应用程序实现vidoestream。捕获的帧将由VTCompressionSession压缩,并且将调用我的回调。
现在,我的CMSamplebuffer包含一个CMBlockBuffer,我可以提取NALU等。如此答案How to use VideoToolbox to decompress H.264 video stream所述,但我正在寻找一种不同的方法来实现。
是否可以将CMSampleBuffer的整个字节写入UInt8数组?我可以获取CMSampleBuffer的Pointer,但如何计算长度?
对不起,我的英语不好,如果有什么问题请让我知道,这是我的第一篇文章。谢谢
最佳答案
这是我使用的代码
private func bufferToUInt(sampleBuffer: CMSampleBuffer) -> [UInt8] {
let imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)!
CVPixelBufferLockBaseAddress(imageBuffer, CVPixelBufferLockFlags(rawValue: 0))
let byterPerRow = CVPixelBufferGetBytesPerRow(imageBuffer)
let height = CVPixelBufferGetHeight(imageBuffer)
let srcBuff = CVPixelBufferGetBaseAddress(imageBuffer)
let data = NSData(bytes: srcBuff, length: byterPerRow * height)
CVPixelBufferUnlockBaseAddress(imageBuffer, CVPixelBufferLockFlags(rawValue: 0))
return [UInt8].init(repeating: 0, count: data.length / MemoryLayout<UInt8>.size)
}
关于ios - CMSampleBuffer到Swift中的字节数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35425836/