问题标签 [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 回答
296 浏览

ios - 从麦克风捕获音频时,我陷入内存泄漏或音频中的过度静态之间

我正在编写一个 iPhone 应用程序,我需要从麦克风捕获音频并将其流式传输到 AAC 格式的流媒体服务器。所以我首先捕获音频,然后使用

将音频转换为 AAC 的方法。

下面是代码

getAudioBufferDataFromCMSampleBufferRef 的代码如下

在上面的代码版本中,我收到 BAD_ACCESS 错误。相反,如果我删除了释放 blockBuffer 的代码,则会出现内存泄漏,并且应用程序最终会因内存压力而终止。

如果我不保留blockBuffer并编写代码

如下所示

在这个版本中,块缓冲区没有被保留,所以不需要释放它。但是现在我在音频中得到了可怕的静电。

有人知道如何解决这个问题吗?

谢谢, 厄兹古尔

0 投票
1 回答
826 浏览

swift - 从 Swift 中的 unSafeMutablePointer Int16 获取价值以用于音频数据

我正在努力将此代码转换为 Swift,这有助于我获取用于可视化的音频数据。我在 Obj C 中使用的运行良好的代码是:

在 Swift 中,我试图写的是这一部分:

但是,当我 println() sampleValue 在控制台中出现(不透明值)时。我不知道如何实际阅读 sampleValue。

我是尝试读取音频数据以进行可视化的新手。任何有关获取音频数据缓冲区的帮助都会有所帮助。谢谢你。

0 投票
1 回答
817 浏览

video-capture - 无法从捕获输出中获取 AudioStreamBasicDescription

我正在尝试访问 mSampleRate 和 mChannelsPerFrame 并将值分配给全局变量。

方法:

方法调用:

难道我做错了什么?有没有更好的方法从捕获输出样本缓冲区中获取 AudioStreamBasicDescription

编辑:

格式保存这些值:

0 投票
3 回答
2992 浏览

ios - 设置 AVSampleBufferDisplayLayer 渲染样本缓冲区的速率

我正在使用 AVSampleBufferDisplayLayer 来显示通过网络连接以 h.264 格式出现的 CMSampleBuffers。视频播放流畅且工作正常,但我似乎无法控制帧速率。具体来说,如果我在 AVSampleBufferDisplayLayer 中以每秒 60 帧的速度排队,它会显示这 60 帧,即使视频是以 30 FPS 的速度录制的。

创建样本缓冲区时,可以通过将时间信息数组传递给 CMSampleBufferCreate 来设置演示时间戳(时间信息不存在于 h.264 流中,但可以计算或以容器格式传递)。我设置的演示时间戳相隔大约 0.033 秒,持续时间为 0.033,但显示层仍然每秒显示尽可能多的帧。

有两种方法可以在 AVSampleBufferDisplayLayer 上对缓冲区进行排队:每当缓冲区准备好时通过调用 -[AVSampleBufferDisplayLayer enqueueSampleBuffer:] 来“约束”,或者通过调用 -[AVSampleBufferDisplayLayer requestMediaDataWhenReadyOnQueue:usingBlock:] 并将缓冲区排队在该块中的“不受约束”。我已经尝试了这两种方法,但即使是第二种方法也尽可能快地显示缓冲区 - 例如,如果我在接收端排队了 300 帧,那么第一次执行上述方法中的块时,无论有多少,readyForMoreMediaData 都保持为真缓冲区被排入队列,并且它们都在很短的时间内显示出来。

如果在 CMSampleBuffer 上设置了 kCMSampleAttachmentKey_DisplayImmediately 附件,则此行为类似于人们所期望的,但是当前未设置(默认值为 false)。

我尝试设置图层 controlTimeBase,但似乎没有任何效果。我不知道要尝试的其他事情,也无法在网上找到示例。有谁知道如何控制 AVSampleBufferDisplayLayer 显示帧的帧速率?

0 投票
1 回答
1473 浏览

ios - CMSampleBuffer 到 Swift 中的字节数组

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

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

是否可以将 CMSampleBuffer 的整个字节写入 UInt8 数组?我能够得到 CMSampleBuffer 的指针,但我怎样才能算出长度呢?

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

0 投票
3 回答
1507 浏览

ios - 在 Swift 中创建 CMSampleBuffer 的副本返回 OSStatus -12743(无效的媒体格式)

我正在尝试执行深度克隆CMSampleBuffer来存储AVCaptureSession. kCMSampleBufferError_InvalidMediaFormat (OSStatus -12743)运行该功能时收到错误消息CMSampleBufferCreateForImageBuffer。我看不出我是如何CVImageBufferCMSampleBuffer格式描述不匹配的。有谁知道我哪里出错了?她是我的测试代码。

0 投票
1 回答
1082 浏览

ios - 如何正确处理 CVPixelBuffer 中的像素?

简短的问题是:解决 a 中像素值的公式是什么CVPixelBuffer

我正在尝试将 a 转换为CVPixelBuffer平面字节数组,并注意到一些奇怪的事情: TheCVPixelBuffer是从 a 获得的CMSampleBuffer。它的宽度和高度是852x640像素。总和像素,考虑到每个像素的字节数545280,这将需要字节数。21811204

现在第一个奇怪的事情是,每行CVPixelBuffer返回相同的字节数,这对于像素3456来说是足够的空间。864这些额外的12像素从何而来?如果最终图像中的一行只有852像素宽,但实际上864一行中有像素CVPixelBuffer,我怎么知道需要复制哪些字节?或者这些字节中的哪些未使用?顺便说一句,它们是未使用的吗?

另一件事是报告的数据大小CVPixelBuffers,即2211848字节。3456现在,如果我们将每行的字节数乘以640行数,我们将得到2211840字节数。再次,我们留下了8额外的字节。这些8字节是怎么回事?它们没有被使用吗?他们在最后吗?

欢迎任何对此事有所启发的建议,谢谢。

0 投票
2 回答
1519 浏览

swift - didOutputSampleBuffer 丢帧

我正在编写一个用于长时间曝光图像拍摄的应用程序。

我曾经func captureOutput(captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, fromConnection connection: AVCaptureConnection!) 得到一个CMSampleBuffer用于应用CIFilterusing CILightenBlendMode

问题是,混合时间太长并且会导致帧丢失。我试图复制缓冲区:

但这并没有帮助,帧仍然下降。

完整代码:

0 投票
1 回答
272 浏览

ios - 我必须使用哪些 SampleBuffer 方法来测量帧速率?

我与 AvFoundation 合作。我需要从 ios 相机准确测量帧速率。

算法:

帧率= 1/(time(f2)-time(f1)) = __(每秒帧数);

其中 time(f2) - 这是第二帧的时间,而 (f1) - 这是第一帧的时间。如何使用 sampleBuffer?

0 投票
0 回答
615 浏览

objective-c - AVCaptureSession 像素格式对话

该文档指出,AVCaptureVideoDataOutput.availableVideoCVPixelFormatTypes数组中的第一个元素是最有效的像素格式(即,这意味着无需进一步的转换工作)。

我打算使用Metal它来操作CMSampleBuffer视频输出。

底线,

设置捕获会话以将样本缓冲区作为 BGRA( kCVPixelFormatType_32BGRA) 提供更有意义,还是 YCbCr( kCVPixelFormatType_420YpCbCr8BiPlanarFullRange) 到 RGB 转换在使用金属时提供更好的性能?