我正在尝试为多对等连接应用程序实现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/

10-10 21:09