ios - CMSampleBuffer 到 Swift 中的字节数组

标签 ios swift video-streaming multipeer-connectivity cmsamplebuffer

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

现在我的 CMSamplebuffer 包含一个 CMBlockBuffer,我可以提取 NALU 等,就像这个答案中提到的 How to use VideoToolbox to decompress H.264 video stream但我正在寻找一种不同的方法。

是否可以将 CMSampleBuffer 的整个字节写入 UInt8 数组?我能够获取 CMSampleBuffer 的指针,但如何计算出长度?

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

最佳答案

这是我使用的代码

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/

相关文章:

ffmpeg 转码流视频和存储

javascript - react native (RCT_REMAP_METHOD): How to export a method with a parameter and return value?

ios - 降低多个 if else 语句的圈复杂度

ios - AWS iOS v2 Cognito 与 STS 身份验证

ios - Swift CoreStore 订购列表监控问题

ios - 使用 MVP 模式 iOS 将数据传递给另一个 Controller

javascript - 带直播的VideoJs

ios - 从 ios 设备流式传输视频

iphone - iOS 中的子类问题

ios - 无法使用 Swift 语法过滤器