问题标签 [cmsamplebufferref]

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 投票
0 回答
636 浏览

cocoa-touch - 拆分包含音频的 CMSampleBufferRef

我在录制时将录音分成不同的文件......

问题是,captureOutput 视频和音频样本缓冲区不对应 1:1(这是合乎逻辑的)

所以我需要CMSampleBufferRef根据时间分割音频并将第一段用于第一个视频,将缓冲区的第二部分用于第二个视频

导出时也可以做一些事情,AVMutableCompositionAVAssetExportSession问题是关于 中的缓冲区级别captureOutput:,因此记录器文件不需要更多处理


更新:

看起来像 3 个选项,尚未成功实施

1)CMSampleBufferCopySampleBufferForRange

看起来CMSampleBufferCopySampleBufferForRange是要走的路,但我正在努力计算最后一个参数sampleRange......

2)CMSampleBufferCreateCopyWithNewTiming

用这个很迷失

3)看起来有一种方法可以通过提供kCMSampleBufferAttachmentKey_TrimDurationAtStart, kCMSampleBufferAttachmentKey_TrimDurationAtEnd使用来修剪缓冲区CMSetAttachment

0 投票
2 回答
2928 浏览

ios - Audio CMSampleBuffer 的深拷贝

我正在尝试创建一个由 captureOutput 返回的 CMSampleBuffer 的副本AVCaptureAudioDataOutputSampleBufferDelegate

我遇到的问题是我的来自委托方法的帧在我长时间captureOutput:didOutputSampleBuffer:fromConnection:保留它们后被丢弃。CFArray

显然,我需要创建传入缓冲区的深层副本以进行进一步处理。我也知道这CMSampleBufferCreateCopy只会创建浅拷贝。

在 SO 上提出的相关问题很少:

但是它们都不能帮助我正确使用具有 12 个参数的CMSampleBufferCreate函数:

你如何深拷贝音频 CMSampleBuffer?随意在您的答案中使用任何语言(swift/objective-c)。

0 投票
0 回答
163 浏览

ios - 使用 CIImage 或 CGImage 作为直接输入 videotoolbox

我正在尝试制作一个功能,从相机应用过滤器帧捕获并通过网络流式传输。

由于在 CMSampleBuffer 或 CVPixelBuffer(CPU 端)中应用过滤器时性能不佳,我尝试将数据从 CMSampleBuffer(来自相机捕获的原始数据)转换为 CIImage(CPU 端),然后使用 Core Image 的一些内置过滤器。当我转换回 CVPixelByteBuffer(或 CMSampleBuffer)以使用 VideoToolbox 进行编码时,以流畅的 fps 实现实时目标太慢了(我来宾的原因是将数据从 GPU 传输到 CPU)。

那么,有没有办法使用 CIImage 或 GL 纹理(如将纹理绘制到表面作为 MediaCodec 输入)作为 VideoToobox 的输入?或者更快地从 CGImage/CIImage 转换为 CVSampleBuffer,或者使用着色语言?我认为这是可能的,因为 Messenger、Snapchat、Snow ……可以在 iPhone 5 等旧设备上表现良好)

谢谢大家。

0 投票
1 回答
1364 浏览

ios - 如何在解码video.mp4时获取iOS中每个视频帧的时间戳

场景:
我正在编写一个iOS 应用程序来尝试解码videoFile.mp4. 我正在使用AVAssetReaderTrackOutputAVAssetReader来解码视频文件中的帧。这很好用。videoFile.mp4我基本上使用以下核心逻辑来获得每一帧。

代码:

sampleBuffer是这里每个视频帧的缓冲区。

问题:

  • 如何在这里获取每个视频帧的时间戳?
  • 换句话说&更详细,我怎样才能得到每个sampleBuffer我返回的时间戳copyNextSampleBuffer

PS:
请注意,我需要以毫秒为单位的时间戳。

0 投票
1 回答
314 浏览

avfoundation - 如何使用 AVFoundation 从视频流中获取原始格式的图像缓冲区?

在 Apple 的文档中AVAssetReaderTrackOutput,它表示以下有关outputSettings使用实例化实例时的参数+[AVAssetReaderTrackOutput assetReaderTrackOutputWithTrack:outputSettings:]

nil 值将输出配置为以指定轨道存储的原始格式提供样本。

当在例如 MP4 视频资产上使用它时,它似乎会按解码顺序逐步遍历帧(即相对于显示无序),但是CMSampleBufferRef对使用CMSampleBufferGetImageBuffer产生NULL CVImageBufferRef对象的传递对象的所有查询。

我可以确保传递图像缓冲区对象的唯一方法是为提供像素缓冲区格式outputSettings:,例如字典条目。kCVPixelFormatType_32ARGBkCVPixelBufferPixelFormatTypeKey

这样做的另一个有趣的副作用是,帧然后按显示顺序传递,而帧的底层解码顺序被抽象/隐藏起来。

任何想法为什么会这样?

0 投票
1 回答
158 浏览

ios - 来自 CMSampleBufferRef 的图像始终为白色

我正在尝试使用 startCaptureWithHandler 从 replaykit 中获取每一帧。

startCaptureWithHandler 返回一个 CMSampleBufferRef ,我需要将其转换为图像。

我使用这种方法转换为 UIImage 但它总是白色的。

谁能告诉我我哪里出错了?

0 投票
0 回答
511 浏览

swift - 快速从 mp3 文件中提取 CMSampleBuffer

我正在尝试CMSampleBuffer从 mp3 文件中提取以将其用于录制视频。这是代码:

首先从 mp3 获取 PCM 缓冲区

我如何将 pcm 缓冲区转换为 cmsamplebuffer 的代码:

但我总是得到错误代码:-12771: kCMSimpleQueueError_RequiredParameterMissing. 这是我的音频格式和样本缓冲区的日志:

知道为什么CMSampleBufferSetDataBufferFromAudioBufferList总是返回错误

0 投票
1 回答
787 浏览

ios - 我们如何使用 AVSampleBufferDisplayLayer 来渲染 CMSampleBufferRef?

我有这个委托方法

这给了我sampleBuffer

现在我需要知道如何使用它AVSampleBufferDisplayLayer来渲染我的 sampleBuffer。我知道我们必须使用 - enqueueSampleBuffer- 但我是 iOS 新手,所以我们该怎么做?

我不想将 sampleBuffer 转换为 CGImage 然后绘制它。

代码示例受到高度赞赏:)

0 投票
0 回答
237 浏览

uiimage - 当我尝试将缓冲区样本转换为 UIImage 时,iOS 广播扩展随机崩溃

我正在尝试开发广播扩展来进行屏幕录制。我的路径是从扩展中获取 CMSampleBufferRef,检查类型是否是视频转换为 UIImage,然后通过 MMWormhole 与容器应用程序共享。到目前为止,我可以做到。但是扩展在样本缓冲区到 UIImage 转换期间随机崩溃。我不知道为什么。

这是我的 CMSampleBufferRef 到 UIImage 的转换函数

通常扩展在 CVPixelBufferUnlockBaseAddress 上崩溃。因为 EXC_BAD_ACCESS(代码=1,地址=0x0)

任何想法或帮助?

谢谢。

0 投票
0 回答
78 浏览

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

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