从 CMSampleBufferRef 获取当前视频时长

Posted

技术标签:

【中文标题】从 CMSampleBufferRef 获取当前视频时长【英文标题】:Get current video duration from CMSampleBufferRef 【发布时间】:2015-08-03 07:22:59 【问题描述】:

如何在委托方法中从 CMSampleBufferRef 获取当前录制的视频时长

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection;

请用示例代码指导

【问题讨论】:

【参考方案1】:

您需要的详细信息在视频元数据中。要获取视频元数据,您可能需要将您的 CMSampleBuffer 转换为 CVPixelBuffer

CMSampleBuffer 是 Core Foundation 风格的不透明类型;一个实例包含一帧视频数据的样本缓冲区。 CVPixelBuffer 是来自采样缓冲区的核心视频像素。

您可以使用下面的CMSampleBufferGetImageBuffer:从样本缓冲区中获取像素缓冲区

CVPixelBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(<#A CMSampleBuffer#>);

一旦获得像素缓冲区,您就可以获取视频元数据,例如时间和格式信息。

要获取时间信息,请分别使用CMSampleBufferGetPresentationTimeStampCMSampleBufferGetDecodeTimeStamp

更多信息请阅读Representations of Media

【讨论】:

以上是关于从 CMSampleBufferRef 获取当前视频时长的主要内容,如果未能解决你的问题,请参考以下文章

来自 CMSampleBufferRef 的图像始终为白色

捕获仍然没有压缩的 UIImage(来自 CMSampleBufferRef)?

从 CMSampleBufferRef 转换的 UIImage,导致 UIImage 无法正确渲染

如何将 CMSampleBufferRef 转换为 NSData

使用重叠执行缓冲/窗口添加 CMSampleBufferRef

来自 CMSampleBufferRef 的 NSData 或字节