在Swift中将CMSampleBuffer转换为字节数组

5

我正在尝试为多点连接应用实现视频流。捕获的帧将通过VTCompressionSession进行压缩,我的回调正在被调用。

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

是否有可能将CMSampleBuffer的整个字节写入UInt8数组?我能够获取CMSampleBuffer的指针,但如何确定长度呢?

抱歉我的英语不好,请让我知道是否有任何错误,这是我的第一篇文章。谢谢。


你解决了这个问题吗? - omarojo
你解决了这个2吗? - user924
1个回答

4
这是我用的代码。
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)
}

你尝试过使用UIImage(data: Data)将数据转换为UIImage吗? - Hope

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接