问题标签 [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 投票
1 回答
373 浏览

iphone - 是否存在类似 cvShowImage for iOS 的东西?

我正在处理图像(在 iOS 上使用 AVFoundation 和 OpenCV),我想简单地将 CMSampleBufferRef(或 IplImage)的内容显示到屏幕上。

简单地说:我只想显示(如使用 OpenCV 的cvShowImage())未转换的图像,看看我是否没有处理损坏或以某种方式变形的图像。

0 投票
1 回答
181 浏览

iphone - 在适用于 iOS 的视频通话应用中需要帮助

我正在创建一个简单的视频通话应用程序,其中音频/视频将从一个设备流式传输到另一个设备,但问题是我不知道视频通话是如何工作的,尤其是如何在iOS. 到目前为止,我已经通过使用AVCaptureSession和使用此委托方法中的缓冲区来捕获视频

为了测试,我使用 . 将音频和视频缓冲区写入文档目录AVAssetWriter。之后,我轻松地将视频存储到 iPhone 画廊或使用MPMoviecontroller播放器播放。

现在,我有以下问题

  1. 我不知道如何将这些缓冲区连续发送到服务器,然后将服务器发送到其他设备。
  2. 如果我成功地将数据发送到其他设备,那么我将如何对其进行解码以在其他设备上显示视频。

    我已经搜索过了。喜欢通过 udp 数据包发送数据,但我对此一无所知。

    如果我得到正确的知识该做什么,那么我相信我将能够做到。请向我提供您的意见,我应该怎么做才能实现这一目标。我会感谢你的帮助

0 投票
2 回答
8886 浏览

ios - 如何为 AVWriter 写入设置 CMSampleBuffer 的时间戳

我正在使用 AVFoundation 来捕获和录制音频。有些问题我不是很明白。

基本上我想从 AVCaptureSession 捕获音频并使用 AVWriter 编写它,但是我需要对从 AVCaptureSession 获得的 CMSampleBuffer 的时间戳进行一些转换。我阅读了 CMSampleBuffer 的文档,我看到了两个不同的时间戳术语:“演示时间戳”和“输出演示时间戳”。两者有什么不同?

假设我从 AVCaptureSession 获得了一个 CMSampleBuffer(用于音频)实例,并且我想使用 AVWriter 将其写入文件,我应该使用什么函数将 CMTime“注入”到缓冲区以便设置它的呈现时间戳结果文件?

谢谢。

0 投票
2 回答
3369 浏览

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

我需要从 CMSampleBufferRef 中获取UIImage未压缩的图像数据我正在使用代码:

http://developer.apple.com/library/ios/#qa/qa1702/_index.htmlimageFromSampleBuffer函数的链接。

但它不能正常工作。:(

有一种jpegStillImageNSDataRepresentation:imageSampleBuffer方法,但它给出了压缩数据(嗯,因为 JPEG)。

捕获静止图像后如何UIImage使用最原始的非压缩数据创建?

也许,我应该为视频输出指定一些设置?我目前正在使用这些:

我注意到,该输出的默认值为AVVideoCodecKey,即AVVideoCodecJPEG。是否可以以任何方式避免它,或者在捕获静止图像时它是否重要?

我在那里找到了一些东西:来自“645 PRO”之类的相机的原始图像数据,但我只需要一个 UIImage,而不使用 OpenCV 或 OGLES 或其他第 3 方。

0 投票
1 回答
3060 浏览

iphone - 将 AVAssetWriter 与原始 NAL 单元一起使用

我在 iOS 文档中注意到,AVAssetWriterInput您可以通过nil字典outputSettings来指定不应重新编码输入数据。

用于对附加到输出的媒体进行编码的设置。传递 nil 以指定不应重新编码附加的样本。

我想利用此功能传入原始 H.264 NAL 流,但我无法将原始字节流调整为CMSampleBuffer可以传入 AVAssetWriterInputappendSampleBuffer方法的流。我的 NAL 流仅包含 SPS/PPS/IDR/P NAL(1、5、7、8)。我无法找到有关如何将预编码的 H264 数据与 AVAssetWriter 一起使用的文档或结论性答案。生成的视频文件无法播放。

如何正确地将 NAL 单元打包成CMSampleBuffers? 我需要使用起始代码前缀吗?长度前缀?我需要确保我只放一个 NALCMSampleBuffer吗?我的最终目标是使用 H264/AAC 创建 MP4 或 MOV 容器。

这是我一直在玩的代码:

请注意,在我实际尝试附加它之前,我使用我认为有效的时间调用方法CMSampleBufferSetOutputPresentationTimeStamp内部的示例缓冲区。writeSampleBuffer

任何帮助表示赞赏。

0 投票
1 回答
4672 浏览

ios - 裁剪 CMSampleBufferRef

我正在尝试将图像裁剪CMSampleBufferRef为特定大小。我正在做 5 个步骤 - 1.PixelBufferSampleBuffer2. 转换PixelBufferCIImage3. 裁剪CIImage4. 渲染CIImagePixelBuffer5. 附加PixelBufferSampleBuffer. 到目前为止,我在第 4 步遇到问题 - 将图像渲染回PixelBuffer(无法检查超出这一点)没有渲染到缓冲区(我使用相同的方法检查它CIImage imageWithCVPixelBuffer并获得 NULL 作为返回)。非常感谢任何提示或帮助。

0 投票
0 回答
870 浏览

avfoundation - 使用 AVAssetWriter 时未释放 PixelBuffer

我正在使用带有单个视频输入的 AVAssetWriter 将视频帧写入电影。写循环的机制不是问题:但我发现内存管理是。

关于 CMSampleBufferRef,我要附加:a)我从一些图像数据(原始字节)创建一个 CVPixelBufferRef。因此,CVPBR 拥有数据。b)然后我像这样将其包装在 CMSampleBufferRef 中(为简洁起见,删除了错误检查):

这为我创建了一个可以传递给 AVWriter 的缓冲区。到目前为止,一切都很好。问题是,如果我在将缓冲区附加到写入器后简单地释放缓冲区,我会看到奇怪的失真。

如果我这样做:

然后它工作,没有内存泄漏,但偶尔我会看到损坏的帧。注意有时不同步的帧,以及在第 391,394 帧处明显的内存损坏。对我来说,看起来内存缓冲区在 AVF 完成编码之前就被释放了。

如果我删除 CFRelease(pixelBuffer),问题就会消失。生成的电影非常流畅,完全没有损坏。当然; 那么我有一个多 GB 内存泄漏的问题!

有没有其他人遇到过这样的事情?

顺便说一句:我是否使用 AVAssetWriterInputPixelBufferAdaptor 也没关系。得到相同的结果。

这是重现问题的完整代码片段:

0 投票
1 回答
792 浏览

ios - 如何确定 AVAssetWriter 中使用的样本缓冲区的持续时间

我有一个示例缓冲区,用于为 AVAssetWriter 捕获视频。我试图找出一种方法来确定我捕获了多少视频(时间)。目前我可以通过使用访问当前缓冲区时间戳

我正在寻找一种方法来确定缓冲区的持续时间,我试过了

由于某种原因,在 .002333 和 nan 之间

0 投票
0 回答
2048 浏览

ios - 使用 UIImage 创建 CMSampleBufferRef

如何使用 UIImage 创建 CMSampleBufferRef,我需要在录制时在视频帧上添加文本。*请不要告诉我使用 PixelBuffer。

0 投票
1 回答
2809 浏览

objective-c - 来自 CMSampleBufferRef 的 NSData 或字节

您好,我需要CMSampleBufferRef通过网络发送一个。客户端然后CMSampleBufferRef通过音频队列服务播放。我看过一些关于堆栈溢出的例子,但大多数只是发送缓冲区。但随后一些信息丢失了。我发现它[AVAssetReaderOutput copyNextSampleBuffer]返回了对opaqueCMSampleBuffer结构的引用。我知道如何获取 的内存地址opaqueCMSampleBuffer,但是如何将地址的内容复制到数组中,以便通过网络发送?或者有没有更优雅的方法来CMSampleBuffer通过网络发送。或者我什至可以以某种方式访问opaqueCMSampleBuffer​​?

感谢您的时间和帮助