5

我正在尝试为多点连接应用程序实现视频流。捕获的帧将由 VTCompressionSession 压缩,并且正在调用我的回调。

现在我的 CMSamplebuffer 包含一个 CMBlockBuffer ,我可以提取 NALU 等,就像这个答案中提到的如何使用 VideoToolbox 解压缩 H.264 视频流,但我正在寻找一种不同的方法来做到这一点。

是否可以将 CMSampleBuffer 的整个字节写入 UInt8 数组?我能够得到 CMSampleBuffer 的指针,但我怎样才能算出长度呢?

抱歉我的英语不好,如果有什么问题请告诉我,这是我的第一篇文章。谢谢你

4

1 回答 1

3

这是我使用的代码

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)
}
于 2018-05-09T06:42:37.793 回答