问题标签 [cmsamplebuffer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
562 浏览

ios - 将 kCVPixelFormatType_32BGRA sampleBuffer 转换为 kCVPixelFormatType_420YpCbCr8BiPlanarFullRange

我正在为我的 webrtc 应用程序使用 janus 网关,并从我的相机捕获 samplebuffer 作为 kCVPixelFormatType_32BGRA,因为我正在处理 samplebuffer 并且不能直接使用 kCVPixelFormatType_420YpCbCr8BiPlanarFullRange 将其直接发送到 janus。所以我的问题是,如何将样本缓冲区的 RGBA 像素格式转换为 420YpCbCr8BiPlanarFullRange 样本缓冲区

我没有找到任何执行这种转换形式的脚本,我知道有一个代码可以将 420Y 转换为 RGBA,而不是相反。

我期望来自默认 32RGBA 样本缓冲区的 Y420 样本缓冲区

0 投票
0 回答
228 浏览

swift - 将 CMSampleBuffer 转换为 Data 并将 Data 转换回 CMSampleBuffer

我从广播上传扩展接收 cmsamplebuffer,我需要将它发送到主应用程序,以便它可以通过 webrtc 发送。Webrtc 严格需要在主应用程序中。为了将 cmsamplebuffer 发送到主应用程序,我需要先将其转换为 Data,然后在主应用程序中收到后将其转换回 cmsamplebuffer。这是我将其转换为数据的代码:

现在,我找不到如何将数据转换回 cmsamplebuffer。

0 投票
1 回答
1077 浏览

ios - 如何在 iOS 上将编码的 CMSampleBuffer 样本保存到 mp4 文件

我正在使用 VideoToolbox 框架从 AVCaptureSession 检索数据并将其编码为 h264 和 acc。

我正处于这样的地步:

  1. 使用委托方法获取数据func captureOutput(_ captureOutput: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection)
  2. 将视频转换CMSampleBuffer为h264 并将其编码CVImageBuffer为 h264,使用VTCompressionSession它传递编码的帧VTCompressionOutputCallback
  3. 将音频编码CMSampleBuffer为 acc 并将其作为UnsafeMutableAudioBufferListPointer.

我现在被阻止了,我想将这些流正确转换为字节Data以通过FileHandle. 我该怎么办?

我需要在实际文件最终确定之前访问编码流,因此我不能使用(我认为)AVAssetWriter将未编码的流保存到 mp4 文件,因为据我所知,我需要将未编码的样本传递AVAssetWriter给它才能正常工作. 还是我弄错了?

0 投票
2 回答
465 浏览

swift - 如何将包含 AAC 数据的 AudioBufferList 转换为 CMSampleBuffer

我正在使用将通过以下方式捕获的AudioConverter未压缩转换为:CMSampleBufferAVCaptureSessionAudioBufferList

我的输出 asbd 设置如下:

我想转换AudioBufferListCMSampleBuffer包含压缩数据,以便我可以将其写入 mp4 文件使用AVAssetWriter(我已经想出如何用视频来做到这一点),但到目前为止很少。我试过咨询这个答案,但在那种情况下有 PCM 数据,它似乎在这里不可用。

我可以访问AudioBufferList以及原始样本的presentationTimeStamp。我尝试了以下方法,但我不太确定如何计算 numSamples 以及这种方法是否有意义:

最后我确实设法创建了一个CMSampleBuffer,但是当我尝试完成写作时,我收到以下错误:

0 投票
0 回答
280 浏览

ios - 从 CMSampleBuffer 转换为 NSData 图像不超过 50MB 内存

在 RPBroadcastSampleHandler 中处理 CMSampleBuffer 到 NSData 转换时出现超出内存允许的错误。错误代码:线程 7:EXC_RESOURCE RESOURCE_TYPE_MEMORY(限制 = 50 MB,未使用 = 0x0)

我正在处理将大型 1920x1440 图像转换为二进制以发送到套接字服务器的功能。我尝试将大小调整为 1200x900,但没有任何效果。

我花了一个星期来处理这个问题,但无济于事。我尝试了以下方法:使用此处的说明调整图像大小:https ://nshipster.com/image-resizing/

  1. 从 SampleBuffer 中获取 UIImage 对象,然后将其转换为压缩质量最低的 jpegData。
  1. 在转换为 NSData 之前从 CMSampleBuffer 调整 UIImage 对象的大小

或者

  1. 在转换为 NSData 之前从 CMSampleBuffer 获取图像位图
  1. 在转换为 NSData 之前缩放 CIImage

有没有办法在不超过 50MB 内存的情况下从 CMSampleBuffer 转换为 NSData 图像并且图像质量不会降低太多。或者有什么方法可以调整不使用超过 50MB 内存的大图像的大小?

我提供的任何建议都非常感谢。

0 投票
0 回答
315 浏览

ios - 编写编码的音频 CMSampleBuffer 不起作用

我正在使用 AudioConverter 将通过 AVCaptureSession 捕获的未压缩 CMSampleBuffer 转换为 AudioBufferList:

然后,我使用如下数据包描述构造一个包含压缩数据的 CMSampleBuffer:

当我尝试使用 AVAssetWriter 保存缓冲区时,出现以下错误:-[AVAssetWriterInput appendSampleBuffer:] Cannot append sample buffer: First input buffer must have an appropriate kCMSampleBufferAttachmentKey_TrimDurationAtStart since the codec has encoder delay'

我决定准备前三个缓冲区,因为每个缓冲区的长度都是一致的:

现在我不再收到错误,并且在附加样本时也没有收到任何错误,但音频不会在录制中播放,并且还会弄乱整个视频文件(似乎计时信息已损坏)。

这里有什么我想念的吗?我应该如何正确附加音频 CMSampleBuffer?

0 投票
1 回答
83 浏览

iphone - iPhone11 意外数量的音频样本

我有一个使用AVAssetWriter. 它对音频运行快速傅立叶变换 (FFT),以实时创建捕获音频的可视频谱。

直到 iPhone11 发布,这一切都很好。然而,使用 iPhone 11 的用户报告说根本没有捕获音频。我已设法缩小问题范围 - 返回的样本数量为captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection)940 或 941 - 在以前的手机型号上,这始终是 1024 个样本。我CMSampleBufferGetNumSamples用来获取样本数量。我的 FFT 计算依赖于样本数为 2 的幂,因此它会丢弃较新型号 iPhone 上的所有帧。

谁能解释为什么新的 iPhone11 会返回异常数量的样品?这是我配置的方式AVAssetWriter

0 投票
0 回答
78 浏览

ios - 如何提高 CMSampleBuffer 中的音频速度

加速通过 CMSampleBuffer 接收的音频的过程是什么,以便以 2 倍的速度录制。

0 投票
1 回答
152 浏览

swift - 如何为 MLkit 面部检测实现 CMSampleBuffer?

基本上,我正在尝试创建一个简单的实时面部识别 IOS 应用程序,它可以流式传输用户的面部并告诉他们他们的眼睛是否闭合。我在这里关注谷歌教程 - https://firebase.google.com/docs/ml-kit/ios/detect-faces。我在第 2 步(运行人脸检测器),我正在尝试使用 CMSampleBufferRef 创建一个 visionImage。我基本上只是复制代码,当我这样做时,没有参考教程中显示的“sampleBuffer”。我不知道该怎么做,因为我真的不了解 CMSampleBuffer 的东西。

0 投票
1 回答
417 浏览

ios - 使用 AVAssetReader 读取 mp4 文件时丢失第一个音频 CMSampleBuffer

我正在使用 AVAssetWriter 将音频 CMSampleBuffer 写入 mp4 文件,但是当我后来使用 AVAssetReader 读取该文件时,它似乎丢失了初始数据块。

这是传递给写入器输入附加方法的第一个 CMSampleBuffer 的调试描述(注意 1024/44_100 的启动持续时间附件):

这是第二个 CMSampleBuffer 的调试描述(注意 1088/44_100 的启动持续时间附件,它与之前的修剪持续时间相结合产生 2112 的标准值):

现在,当我使用 AVAssetReader 读取音轨时,我得到的第一个 CMSampleBuffer 是:

下一个是包含 1088/44_100 的启动信息:

输入追加方法不断返回true,这原则上意味着所有样本缓冲区都已追加,但读取器由于某种原因跳过了第一块数据。我在这里做错了什么吗?

我正在使用以下代码来读取文件: