- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我创建了一个 AVCaptureSession 来捕获视频输出并通过 UIView 将其显示给用户。现在我希望能够单击一个按钮(takePhoto 方法)并在 UIImageView 中显示 session 中的图像。我试图遍历每个设备连接并尝试保存输出,但这没有用。我的代码如下
let captureSession = AVCaptureSession()
var stillImageOutput: AVCaptureStillImageOutput!
@IBOutlet var imageView: UIImageView!
@IBOutlet var cameraView: UIView!
// If we find a device we'll store it here for later use
var captureDevice : AVCaptureDevice?
override func viewDidLoad() {
// Do any additional setup after loading the view, typically from a nib.
super.viewDidLoad()
println("I AM AT THE CAMERA")
captureSession.sessionPreset = AVCaptureSessionPresetLow
self.captureDevice = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)
if(captureDevice != nil){
beginSession()
}
}
func beginSession() {
self.stillImageOutput = AVCaptureStillImageOutput()
self.captureSession.addOutput(self.stillImageOutput)
var err : NSError? = nil
self.captureSession.addInput(AVCaptureDeviceInput(device: self.captureDevice, error: &err))
if err != nil {
println("error: \(err?.localizedDescription)")
}
var previewLayer = AVCaptureVideoPreviewLayer(session: self.captureSession)
self.cameraView.layer.addSublayer(previewLayer)
previewLayer?.frame = self.cameraView.layer.frame
captureSession.startRunning()
}
@IBAction func takePhoto(sender: UIButton) {
self.stillImageOutput.captureStillImageAsynchronouslyFromConnection(self.stillImageOutput.connectionWithMediaType(AVMediaTypeVideo)) { (buffer:CMSampleBuffer!, error:NSError!) -> Void in
var image = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(buffer)
var data_image = UIImage(data: image)
self.imageView.image = data_image
}
}
}
最佳答案
在启动 session 之前,您应该在向 session 添加输入和输出时尝试添加一个新线程。在 Apple 的文档中,他们声明
Important: The startRunning method is a blocking call which can take some time, therefore you should perform session setup on a serial queue so that the main queue isn't blocked (which keeps the UI responsive). See AVCam for iOS for the canonical implementation example.
尝试在创建 session 方法中使用分派(dispatch),如下所示
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), { // 1
self.captureSession.addOutput(self.stillImageOutput)
self.captureSession.addInput(AVCaptureDeviceInput(device: self.captureDevice, error: &err))
self.captureSession.sessionPreset = AVCaptureSessionPresetPhoto
if err != nil {
println("error: \(err?.localizedDescription)")
}
var previewLayer = AVCaptureVideoPreviewLayer(session: self.captureSession)
previewLayer?.frame = self.cameraView.layer.bounds
previewLayer?.videoGravity = AVLayerVideoGravityResizeAspectFill
dispatch_async(dispatch_get_main_queue(), { // 2
// 3
self.cameraView.layer.addSublayer(previewLayer)
self.captureSession.startRunning()
});
});
关于ios - AVCapture session 捕获图像 SWIFT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29930699/
我想这样做:当相机对焦时,应用程序会自动拍照。但我发现没有办法检测相机是否对焦。我正在使用 AVFoundation 来拍照我是 iOS 新手,不知道如何编码谁能帮我解决这个问题 最佳答案 impor
我需要捕获我的条形码但是我的代码捕获是全屏的。如何自定义尺寸或固定为小尺寸。请告诉我自定义尺寸的想法或代码,谢谢。 我的代码捕获是全屏的。 import UIKit import AVFoundati
开始在 swift 应用程序中处理相机,我有以下代码块(我从网上获得)按预期工作。 previewLayer = AVCaptureVideoPreviewLayer(session: capture
我有一个允许用户拍照的 View Controller 。我将 avcapture 边界设置为屏幕上 View 的边界。 在这个 View 之上我有一个 Collection View 。因此用户可以
我正在使用 AVFoundation 框架开发一个视频捕获应用程序,基于 AVCam苹果公司的 sample 。我想实现设置最大视频长度的功能,并在达到此限制时自动停止捕获(类似于 UIImagePi
请理解,我无法在此处上传整个代码。 我有 @interface BcsProcessor : NSObject {} 和 BcsProcessor 有 setupCaptureSession和 ca
我需要修复水平屏幕捕获,但是我的代码无法修复屏幕捕获的大小,请遵循代码 > previewLayer.frame = CGRectMake(20, 40, 500, 100)。 请参阅下面的屏幕图片与
我所需要做的就是捕获图像,而我所能找到的只是捕获视频或多帧的复杂代码。我无法使用 UIImagePickerController 因为我不想看到相机快门动画并且我有一个自定义叠加层,并且我的应用程序仅
我正在尝试在录制后以完整 View 播放录制的 session 。有点像“snapchat”。 我可以在 UIView 中录制和播放视频播放,但它显示为“播放”、“完成”、“停止”按钮。我不想要那个。
我是 Swift 的新手,目前正在研究一项包括文本识别在内的功能。我正在使用 Firebase 的 MLKit 并拥有代码,虽然它不是很复杂(我愿意接受每一个改进我的编码的建议),但几乎已经设置好了。
我正在尝试限制我的应用程序的视频捕获帧速率,因为我发现它会影响 VoiceOver 性能。 此时,它从摄像机捕获帧,然后使用 OpenGL 例程尽快处理这些帧。我想在捕获过程中设置一个特定的帧率。 我
我想分别捕获视频和音频,但同时捕获,所以最后我的 NSDocuments 文件夹中有一个 .mp4 文件和一个 .wav(或类似的音频格式)。到目前为止我有这个,但它甚至没有调用 - (void)ca
这让我发疯,因为我无法让它工作。我有以下场景: 我正在使用 AVCaptureSession 和 AVCaptureVideoPreviewLayer 创建我自己的相机界面。界面显示一个矩形。下面是填
我正在 AVCaptureSession 上设置一个麦克风,我需要一个麦克风开关。我该如何处理?我真的需要 captureSession?.removeInput(microphone) 吗?还是有简
我的应用程序使用 AVCapture 捕获图像,这是我的主管的理想。但是我在互联网上进行了研究,无法获得有关 AVCapture 与 iPhone 或 iPop 的默认相机(标签焦点或相机质量....
我写了一个扫描条形码的代码。我想在扫描条形码时显示 View 。这是我的条形码扫描仪代码 func captureOutput(_ captureOutput: AVCaptureOutput
我正在尝试构建条形码扫描器。我改编了其中的一些 tutorial .视频捕获 session 正在运行,但未检测到任何条形码。我已经多次检查代码,但仍然找不到问题所在。这是我检测条形码的代码 clas
这是我的代码 import UIKit import AVFoundation class ViewController: UIViewController { @IBOutlet weak
我们希望在您为我们的 iOS 应用程序捕获视频的同时继续播放来自其他应用程序的音乐。我们的代码建模类似于下面链接的问题的解决方案,在我们进入和离开捕获屏幕时设置 Audio Session 。 How
我有一个导航栏,左上角有一个取消按钮,可以让用户返回到上一个 View 。 当 AVCapture View 出现时,我看不到该栏,该 View 对于相机 View 是全屏的。但是,如果我点击取消按钮
我是一名优秀的程序员,十分优秀!