问题标签 [avcapturesession]

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 投票
3 回答
2148 浏览

iphone - 音频将使 AVCaptureSession 终止

我写了一个应用程序来从 iPhone 录制视频。它工作正常,但有一个大问题。当 AVCaptureSession 开始运行并且用户尝试从他们的库(iPod)播放音频。此操作将使 AVCaptureSession 终止。有什么想法可以阻止用户尝试播放音频或解决此问题吗?


这是我的代码:

0 投票
3 回答
1403 浏览

iphone - 快速点击按钮时 iPhone 手电筒应用程序崩溃

我的手电筒应用程序运行良好。出于某种原因,每次我非常快地点击手电筒按钮时,应用程序都会冻结并且不执行任何操作。当我调用 AVCaptureSession stopRunning 时,它似乎冻结了。这是我的切换手电筒方法的代码。我还希望最终调用此方法以实现频闪功能。

0 投票
2 回答
6826 浏览

iphone - 将效果应用于 iPhone 相机预览“视频”

我的目标是编写一个自定义的相机视图控制器:

  1. 可以使用后置摄像头和前置摄像头(如果有的话)在所有四个界面方向上拍照。
  2. 正确旋转和缩放预览“视频”以及全分辨率照片。
  3. 允许将(简单)效果应用于预览“视频”和全分辨率照片。

实现(在 iOS 4.2 / Xcode 3.2.5 上):

由于要求(3),我需要下拉到 AVFoundation。

我从技术问答 QA1702开始并进行了以下更改:

  1. 将 sessionPreset 更改为 AVCaptureSessionPresetPhoto。
  2. 在开始会话之前添加了 AVCaptureStillImageOutput 作为附加输出。

我遇到的问题是处理预览图像(预览“视频”的帧)的性能。

首先,我imageFromSampleBuffer:captureOutput:didOutputSampleBuffer:fromConnection:. 然后,我使用 CGGraphicsContext 为屏幕缩放和旋转它。

此时,帧速率已经低于会话视频输出中指定的 15 FPS,当我添加效果时,它会下降到 10 以下或左右。由于内存不足,应用程序很快就会崩溃。

我在将 iPhone 4 的帧速率降低到 9 FPS 并将 iPod Touch(第 4 代)的帧速率降低到 8 FPS 方面取得了一些成功。

我还添加了一些代码来“刷新”调度队列,但我不确定它实际上有多大帮助。基本上,每 8-10 帧,就会设置一个标志,指示captureOutput:didOutputSampleBuffer:fromConnection:立即返回而不是处理该帧。在输出调度队列上的同步操作完成后,该标志被重置。

在这一点上,我什至不介意低帧率,但显然我们不能在低内存崩溃的情况下发货。任何人都知道在这种情况下如何采取措施来防止内存不足的情况(和/或“刷新”调度队列的更好方法)?

0 投票
2 回答
5180 浏览

iphone - 使用 OpenGL 将效果应用于 iPhone 相机预览“视频”

我的目标是编写一个自定义的相机视图控制器:

  1. 可以使用后置摄像头和前置摄像头(如果有的话)在所有四个界面方向上拍照。
  2. 正确旋转和缩放预览“视频”以及全分辨率照片。
  3. 允许将(简单)效果应用于预览“视频”和全分辨率照片。

我以前的努力记录在这个问题中。我最近的尝试是修改 Apple 的示例 GLVideoFrame(来自 WWDC 2010)。但是,当会话预设为 AVCaptureSessionPresetPhoto 时,我无法让 iPhone 4 正确显示预览“视频”。

有没有人试过这个或者知道为什么这个例子不适用于这个预设?

Apple 的示例使用具有 640x480 视频尺寸和 1280x720 默认纹理大小的预设。当预设为 AVCaptureSessionPresetPhoto 时,iPhone 4 后置摄像头仅提供 852x640。

预设为 AVCaptureSessionPresetPhoto 时的 iOS 设备相机视频/照片尺寸:

  • iPhone 4 背面:视频为 852x640,照片为 2592x1936
  • iPhone 4 正面:视频和照片为 640x480
  • iPod Touch 4G 背面:视频和照片为 960x720
  • iPod Touch 4G 正面:视频和照片为 640x480
  • iPhone 3GS:视频为 512x384,照片为 2048x1536

更新

在将 Brad Larson 的 ColorTracking 示例(博客文章)切换为使用 AVCaptureSessionPresetPhoto时,我得到了相同的乱码视频结果。

0 投票
1 回答
3562 浏览

ios4 - 如何清理 applicationDidEnterBackground 中的 AVCaptureSession?

我有一个使用 AVCaptureSession 处理视频的应用程序。我喜欢写零内存泄漏和正确处理所有对象。

这就是为什么这篇文章 -如何正确释放 AVCaptureSession - 非常有帮助 - 因为[session stopRunning]是异步的,您不能只是停止会话并继续释放持有的对象。

这样就解决了。这是代码:

现在我来支持应用程序中断作为一个电话,或按主页按钮。如果应用程序进入后台,我想停止捕获并弹出我的视图控制器。

我似乎无法在 applicationDidEnterBackground 上下文中执行此操作。dealloc 永远不会被调用,我的对象仍然存在,当我重新打开应用程序时,框架会自动开始进入。

我尝试使用 beginBackgroundTaskWithExpirationHandler 但无济于事。它没有太大变化。

有什么建议么?谢谢!

0 投票
3 回答
28113 浏览

iphone - 如何将“过滤器”应用于 AVCaptureVideoPreviewLayer

我的应用程序目前正在使用 AVFoundation 从 iPhone 的后置摄像头获取原始摄像头数据,并将其实时显示在 AVCaptureVideoPreviewLayer 上。

我的目标是有条件地将简单的图像过滤器应用于预览层。图像没有保存,所以我不需要捕获输出。例如,我想切换一个设置,将进入预览层的视频转换为黑白。

我在这里发现了一个问题,它似乎通过在缓冲区中捕获单个视频帧,应用所需的转换,然后将每个帧显示为 UIImage 来完成类似的事情。出于几个原因,这对我的项目来说似乎有点过头了,我想避免这可能导致的任何性能问题。

这是实现我的目标的唯一方法吗?

正如我所提到的,我不想捕捉任何 AVCaptureSession 的视频,只是预览它。

0 投票
2 回答
3639 浏览

iphone - NSRunLoop 和 GCD 队列

我正在创建一个用于 iOS 的 c++ 库(是的,不幸的是它必须是 C++),它使用 AVCaptureSession 来捕获通过 captureOutput 回调传递的视频帧。C++ 库是我可交付的产品。我有一个可可触摸应用程序来测试/演示它。所以,它看起来像这样:

(测试应用程序)<----->(C++ 库(AVFoundation 回调))

测试应用程序具有 UI 控件并负责几乎所有图形。c++ 库通过 OpenGL 将帧渲染到 UIView。

你和我在一起吗?好的


好的,首先,用户按下一个 UIButton 来调用我的库。此调用需要 10 秒或更长时间才能完成。因此,如果我将调用直接放在按钮单击之后,UI 将被阻塞,直到库函数返回:

这不好。我尝试的下一件事是生成一个线程来调用 lib:

这不再阻塞 UI,但现在视频帧回调函数永远不会触发(AVCaptureSession 的 captureOutput)。似乎主 NSRunLoop 已被阻止。

接下来我尝试了同样的事情,但使用了 Grand Central Dispatch:

这具有相同的行为。也就是说,视频帧的回调不会触发。瘸

为什么主 NSRunLoop 在第 2 和第 3 种情况下被阻止?有没有办法将队列与之关联?

这有意义吗?

0 投票
3 回答
3345 浏览

iphone - 音频和视频结合的 AVCaptureSession - 音频部分给出 EXC_BAD_ACCESS

我做了一个很棒的小应用,叫做 Night Cam,可以录制夜视效果视频。我目前正在更新它。

视频捕获工作得很好,但音频却不行。当没有录制到文件时,一旦我打开应用程序就会出现一个问题(我将在稍后录制时将其更改为仅激活音频)。

以下是相关代码:

“特别代表”是这样的:

录制布尔值未设置,因此没有附加任何内容。您也不必担心 AVAssestWriter 的设置,因为它在应用程序崩溃时根本没有设置。我必须是音频输入的设置。

这是崩溃时的调用堆栈:

感谢您的任何帮助。

0 投票
1 回答
2114 浏览

iphone - 使用 AVCaptureSession 捕获和操作麦克风音频?

虽然有很多关于如何使用 AVCaptureSession 获取摄像头数据的教程,但我找不到关于如何正确处理麦克风数据的信息(即使在苹果的开发网络本身上)。

我已经实现了 AVCaptureAudioDataOutputSampleBufferDelegate,并且正在接到我的代表的电话,但我不知道我得到的 CMSampleBufferRef 的内容是如何格式化的。缓冲区的内容是一个离散样本吗?它的属性是什么?这些属性可以在哪里设置?

可以使用 [AVCaptureVideoDataOutput setVideoSettings:] 设置视频属性,但没有对 AVCaptureAudioDataOutput 的相应调用(没有 setAudioSettings 或类似的东西)。

0 投票
2 回答
5146 浏览

ios - AVCaptureSession 废弃内存 - 分配 - 仪器

我使用默认的 AVCaptureSession 来捕获相机视图。
一切正常,我没有任何泄漏,但是当我在启动和关闭 AVCaptureDevice 后使用 Allocations 查找 Abandoned memory 时,它向我显示了大约 230 个对象,这些对象仍然存在。

这是我的代码:

控制器.h:

控制器.m:

我用这段代码清理一切:

仪器向我展示了这样的东西:http: //i.stack.imgur.com/NBWgZ.png

http://i.stack.imgur.com/1GB6C.png

任何想法我做错了什么?