问题标签 [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.
ios - 将 kCVPixelFormatType_32BGRA sampleBuffer 转换为 kCVPixelFormatType_420YpCbCr8BiPlanarFullRange
我正在为我的 webrtc 应用程序使用 janus 网关,并从我的相机捕获 samplebuffer 作为 kCVPixelFormatType_32BGRA,因为我正在处理 samplebuffer 并且不能直接使用 kCVPixelFormatType_420YpCbCr8BiPlanarFullRange 将其直接发送到 janus。所以我的问题是,如何将样本缓冲区的 RGBA 像素格式转换为 420YpCbCr8BiPlanarFullRange 样本缓冲区
我没有找到任何执行这种转换形式的脚本,我知道有一个代码可以将 420Y 转换为 RGBA,而不是相反。
我期望来自默认 32RGBA 样本缓冲区的 Y420 样本缓冲区
swift - 将 CMSampleBuffer 转换为 Data 并将 Data 转换回 CMSampleBuffer
我从广播上传扩展接收 cmsamplebuffer,我需要将它发送到主应用程序,以便它可以通过 webrtc 发送。Webrtc 严格需要在主应用程序中。为了将 cmsamplebuffer 发送到主应用程序,我需要先将其转换为 Data,然后在主应用程序中收到后将其转换回 cmsamplebuffer。这是我将其转换为数据的代码:
现在,我找不到如何将数据转换回 cmsamplebuffer。
ios - 如何在 iOS 上将编码的 CMSampleBuffer 样本保存到 mp4 文件
我正在使用 VideoToolbox 框架从 AVCaptureSession 检索数据并将其编码为 h264 和 acc。
我正处于这样的地步:
- 使用委托方法获取数据
func captureOutput(_ captureOutput: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection)
- 将视频转换
CMSampleBuffer
为h264 并将其编码CVImageBuffer
为 h264,使用VTCompressionSession
它传递编码的帧VTCompressionOutputCallback
- 将音频编码
CMSampleBuffer
为 acc 并将其作为UnsafeMutableAudioBufferListPointer
.
我现在被阻止了,我想将这些流正确转换为字节Data
以通过FileHandle
. 我该怎么办?
我需要在实际文件最终确定之前访问编码流,因此我不能使用(我认为)AVAssetWriter
将未编码的流保存到 mp4 文件,因为据我所知,我需要将未编码的样本传递AVAssetWriter
给它才能正常工作. 还是我弄错了?
swift - 如何将包含 AAC 数据的 AudioBufferList 转换为 CMSampleBuffer
我正在使用将通过以下方式捕获的AudioConverter
未压缩转换为:CMSampleBuffer
AVCaptureSession
AudioBufferList
我的输出 asbd 设置如下:
我想转换AudioBufferList
回CMSampleBuffer
包含压缩数据,以便我可以将其写入 mp4 文件使用AVAssetWriter
(我已经想出如何用视频来做到这一点),但到目前为止很少。我试过咨询这个答案,但在那种情况下有 PCM 数据,它似乎在这里不可用。
我可以访问AudioBufferList
以及原始样本的presentationTimeStamp。我尝试了以下方法,但我不太确定如何计算 numSamples 以及这种方法是否有意义:
最后我确实设法创建了一个CMSampleBuffer
,但是当我尝试完成写作时,我收到以下错误:
ios - 从 CMSampleBuffer 转换为 NSData 图像不超过 50MB 内存
在 RPBroadcastSampleHandler 中处理 CMSampleBuffer 到 NSData 转换时出现超出内存允许的错误。错误代码:线程 7:EXC_RESOURCE RESOURCE_TYPE_MEMORY(限制 = 50 MB,未使用 = 0x0)
我正在处理将大型 1920x1440 图像转换为二进制以发送到套接字服务器的功能。我尝试将大小调整为 1200x900,但没有任何效果。
我花了一个星期来处理这个问题,但无济于事。我尝试了以下方法:使用此处的说明调整图像大小:https ://nshipster.com/image-resizing/
- 从 SampleBuffer 中获取 UIImage 对象,然后将其转换为压缩质量最低的 jpegData。
- 在转换为 NSData 之前从 CMSampleBuffer 调整 UIImage 对象的大小
或者
- 在转换为 NSData 之前从 CMSampleBuffer 获取图像位图
- 在转换为 NSData 之前缩放 CIImage
有没有办法在不超过 50MB 内存的情况下从 CMSampleBuffer 转换为 NSData 图像并且图像质量不会降低太多。或者有什么方法可以调整不使用超过 50MB 内存的大图像的大小?
我提供的任何建议都非常感谢。
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?
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
:
ios - 如何提高 CMSampleBuffer 中的音频速度
加速通过 CMSampleBuffer 接收的音频的过程是什么,以便以 2 倍的速度录制。
swift - 如何为 MLkit 面部检测实现 CMSampleBuffer?
基本上,我正在尝试创建一个简单的实时面部识别 IOS 应用程序,它可以流式传输用户的面部并告诉他们他们的眼睛是否闭合。我在这里关注谷歌教程 - https://firebase.google.com/docs/ml-kit/ios/detect-faces。我在第 2 步(运行人脸检测器),我正在尝试使用 CMSampleBufferRef 创建一个 visionImage。我基本上只是复制代码,当我这样做时,没有参考教程中显示的“sampleBuffer”。我不知道该怎么做,因为我真的不了解 CMSampleBuffer 的东西。
ios - 使用 AVAssetReader 读取 mp4 文件时丢失第一个音频 CMSampleBuffer
我正在使用 AVAssetWriter 将音频 CMSampleBuffer 写入 mp4 文件,但是当我后来使用 AVAssetReader 读取该文件时,它似乎丢失了初始数据块。
这是传递给写入器输入附加方法的第一个 CMSampleBuffer 的调试描述(注意 1024/44_100 的启动持续时间附件):
这是第二个 CMSampleBuffer 的调试描述(注意 1088/44_100 的启动持续时间附件,它与之前的修剪持续时间相结合产生 2112 的标准值):
现在,当我使用 AVAssetReader 读取音轨时,我得到的第一个 CMSampleBuffer 是:
下一个是包含 1088/44_100 的启动信息:
输入追加方法不断返回true
,这原则上意味着所有样本缓冲区都已追加,但读取器由于某种原因跳过了第一块数据。我在这里做错了什么吗?
我正在使用以下代码来读取文件: