【问题标题】:Capturing a CMSampleBuffer using an RTCAudioSource on iOS在 iOS 上使用 RTCAudioSource 捕获 CMSampleBuffer
【发布时间】:2021-05-07 10:44:16
【问题描述】:

我正在尝试在 iOS 上使用 WebRTC 流式传输 CMSampleBuffer 视频/音频组合,但我在尝试捕获音频时遇到了麻烦。视频效果很好:

guard let pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else {
    print("couldn't get image from buffer :~(")
    
    return
}
        
let rtcPixelBuffer = RTCCVPixelBuffer(pixelBuffer: pixelBuffer)
let rtcVideoFrame = RTCVideoFrame(buffer: rtcPixelBuffer, rotation: ._0, timeStampNs: timeStampNs)

videoSource.capturer(videoCapturer, didCapture: rtcVideoFrame)

在音频方面,我在 RTCAudioSource 类上看不到任何用于捕获音频的方法,我们将不胜感激!

【问题讨论】:

    标签: ios webrtc cmsamplebuffer rpbroadcastsamplehandler


    【解决方案1】:

    我发现了 WebRTC 代码库的一个分支,它通过添加一种方法让 RTCAudioDeviceModule 捕获音频样本来解决这个问题:

    https://github.com/pixiv/webrtc/blob/87.0.4280.142-pixiv0/README.pixiv.en.md

    【讨论】:

    • 嗨,威廉,我目前遇到了同样的问题,并且正在努力解决好几天。我将此分支中的 WebRTC.framework 添加到我的项目中。视频工作正常,但我无法通过音频获得结果。您能否分享您从 CMSampleBuffer 发送音频的实现?我看到广播上传扩展中 RTCAudioSession.useManualAudio 设置为 YES 和 RTCAudioSession.isAudioEnabled 设置为 NO 进行了一些调整。如果您可以使用此 WebRTC fork 中的代码编写如何从 CMSampleBuffer 发送音频的步骤,那就太好了。提前致谢!
    • @MileDev Hey Mile,有了这个 fork,您应该可以使用 RTCAudioDeviceModule.deliverRecordedData 并在那里传递样本缓冲区。我从事这个项目已经有一段时间了,所以除了将RTCAudioSession.useManualAudio 设置为YES and RTCAudioSession.isAudioEnabled` 为NO 之外,我不确定您还需要做什么。
    • 感谢您的回答。我已经按照他们的指南实现了他们的 fork 并添加了 deliverRecordedData 方法。还要根据要求设置 .useManualAudio 和 .isAudioEnabled。由于某种原因,当应用程序在后台运行时,传出的音频停止工作。如果您对此有任何建议,请告诉我。再次感谢您的回复!
    猜你喜欢
    • 1970-01-01
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-24
    • 1970-01-01
    • 2012-08-01
    相关资源
    最近更新 更多