- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不希望在屏幕上显示静态照片图像要求提供个人资料照片,而是希望屏幕在实时相机 View 中打开。之后,我不介意使用uipickercontroller来抓取照片。但是,我希望用户立即看到一些东西而不是静态图像。
我是否需要像 this answer for Swift 中那样使用 AVFoundation?或者在 Objective-C 中执行此操作的最简单方法是什么。
这是一些在 Swift 中使用 AVFoundation 的代码,来自 SO question , 然而,我不擅长 Swift,想在 Objective-C 中实现;
extension SelfieViewController: AVCaptureVideoDataOutputSampleBufferDelegate{
func setupAVCapture(){
session.sessionPreset = AVCaptureSessionPreset640x480
let devices = AVCaptureDevice.devices();
// Loop through all the capture devices on this phone
for device in devices {
// Make sure this particular device supports video
if (device.hasMediaType(AVMediaTypeVideo)) {
// Finally check the position and confirm we've got the front camera
if(device.position == AVCaptureDevicePosition.Front) {
captureDevice = device as? AVCaptureDevice
if captureDevice != nil {
beginSession()
break
}
}
}
}
}
func beginSession(){
var err : NSError? = nil
var deviceInput:AVCaptureDeviceInput = AVCaptureDeviceInput(device: captureDevice, error: &err)
if err != nil {
println("error: \(err?.localizedDescription)")
}
if self.session.canAddInput(deviceInput){
self.session.addInput(deviceInput)
}
self.videoDataOutput = AVCaptureVideoDataOutput()
var rgbOutputSettings = [NSNumber(integer: kCMPixelFormat_32BGRA):kCVPixelBufferPixelFormatTypeKey]
self.videoDataOutput.alwaysDiscardsLateVideoFrames=true
self.videoDataOutputQueue = dispatch_queue_create("VideoDataOutputQueue", DISPATCH_QUEUE_SERIAL)
self.videoDataOutput.setSampleBufferDelegate(self, queue:self.videoDataOutputQueue)
if session.canAddOutput(self.videoDataOutput){
session.addOutput(self.videoDataOutput)
}
self.videoDataOutput.connectionWithMediaType(AVMediaTypeVideo).enabled = true
self.previewLayer = AVCaptureVideoPreviewLayer(session: self.session)
self.previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
var rootLayer :CALayer = self.cameraView.layer
rootLayer.masksToBounds=true
self.previewLayer.frame = rootLayer.bounds
rootLayer.addSublayer(self.previewLayer)
session.startRunning()
}
func captureOutput(captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, fromConnection connection: AVCaptureConnection!) {
// do stuff here
}
// clean up AVCapture
func stopCamera(){
session.stopRunning()
}
}
提前感谢您的任何建议。
最佳答案
我只是将示例代码翻译成 Obj-C。如果你想了解更多,也许你可以看看我的项目FaceDetectionDemo .希望对你有所帮助。
- (void)setupAVCapture {
NSError *error = nil;
// Select device
AVCaptureSession *session = [[AVCaptureSession alloc] init];
if ([[UIDevice currentDevice] userInterfaceIdiom] ==
UIUserInterfaceIdiomPhone) {
[session setSessionPreset:AVCaptureSessionPreset640x480];
} else {
[session setSessionPreset:AVCaptureSessionPresetPhoto];
}
AVCaptureDevice *device = [self findFrontCamera];
if (nil == device) {
self.isUsingFrontFacingCamera = NO;
device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
}
// get the input device
AVCaptureDeviceInput *deviceInput = [AVCaptureDeviceInput
deviceInputWithDevice:device error:&error];
if (error) {
session = nil;
[self teardownAVCapture];
if ([_delegate
respondsToSelector:@selector(FaceDetectionComponentError:error:)]) {
__weak typeof(self) weakSelf = self;
dispatch_async(dispatch_get_main_queue(), ^{
[weakSelf.delegate FaceDetectionComponentError:weakSelf
error:error];
});
}
return;
}
// add the input to the session
if ([session canAddInput:deviceInput]) {
[session addInput:deviceInput];
}
// Make a video data output
self.videoDataOutput = [[AVCaptureVideoDataOutput alloc] init];
// We want RGBA, both CoreGraphics and OpenGL work well with 'RGBA'
NSDictionary *rgbOutputSettings = [NSDictionary dictionaryWithObject:
[NSNumber
numberWithInt:kCMPixelFormat_32BGRA] forKey:
(id)kCVPixelBufferPixelFormatTypeKey];
[self.videoDataOutput setVideoSettings:rgbOutputSettings];
[self.videoDataOutput setAlwaysDiscardsLateVideoFrames:YES]; // discard if the data output queue is blocked
self.videoDataOutputQueue = dispatch_queue_create("VideoDataOutputQueue",
DISPATCH_QUEUE_SERIAL);
[self.videoDataOutput setSampleBufferDelegate:self
queue:self.videoDataOutputQueue];
if ([session canAddOutput:self.videoDataOutput]) {
[session addOutput:self.videoDataOutput];
}
[[self.videoDataOutput connectionWithMediaType:AVMediaTypeVideo]
setEnabled:YES];
self.previewLayer = [[AVCaptureVideoPreviewLayer alloc]
initWithSession:session];
self.previewLayer.backgroundColor = [[UIColor blackColor] CGColor];
self.previewLayer.videoGravity = AVLayerVideoGravityResizeAspect;
CALayer *rootLayer = [self.previewView layer];
[rootLayer setMasksToBounds:YES];
[self.previewLayer setFrame:[rootLayer bounds]];
[rootLayer addSublayer:self.previewLayer];
[session startRunning];
}
- (AVCaptureDevice *)findFrontCamera {
AVCaptureDevicePosition desiredPosition = AVCaptureDevicePositionFront;
for (AVCaptureDevice *d in [AVCaptureDevice
devicesWithMediaType:AVMediaTypeVideo]) {
if ([d position] == desiredPosition) {
self.isUsingFrontFacingCamera = YES;
return d;
}
}
return nil;
}
// AVCaptureVideoDataOutputSampleBufferDelegate
- (void)captureOutput:(AVCaptureOutput *)captureOutput
didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
fromConnection:(AVCaptureConnection *)connection {
}
关于IOS/objective-C : Display live camera preview on load without image picker controller,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52086086/
我有 ADT 版本 23.0.4 并安装了 Android 5.0 的 SDK 平台。 我读到 Android 5.0 Lolipop 的 API 级别为 21。但是在 Eclipse 的“新建应用程
视频,电子表格和文档支持在云端硬盘中预览其内容。我正在开发一个Google云端硬盘应用程序,我希望它支持预览其内容,因此Google云端硬盘中是否有任何api可以设置预览缩略图或将其嵌入其中?例如,在
似乎预览停止在Xcode 12上运行!尝试预览SwiftUI文件模板并出现以下错误。任何想法如何解决这一问题?试图清理构建文件夹,删除派生数据并重新启动Xcode无济于事! 在Catalina 10.
我有一个需要预览网络摄像头视频的 Directshow 应用程序,当用户单击“录制”时,它需要开始将视频捕获到文件中。 为此,我创建了一个 Capture Graph,PREVIEW 引脚连接到 RE
我构建了一个人脸检测应用程序,我从 onPreviewFrame 获取帧,进行人脸检测,然后在 surfaceView 上方的 Canvas 上绘制一个圆圈。问题是当 Camera.StartPrev
要遵循哪些准则才能在 CKAN 数据预览工具上很好地预览数据?我正在 CKAN 工作,一直在上传数据或将其链接到外部网站。有些可以很好地预览,有些则不能。我一直在网上研究机器可读性,但找不到任何与 C
我看到其他人在 Xcode 11 和 12 中使用 SwiftUI Previews 发布了问题,但在其他地方没有看到这个问题。 在 Xcode 11 中运行的旧项目在 Xcode 12 中加载,无论
从上一个 Android Studio 2.0 预览升级到 Preview 5 后,我在从 android.support.wearable 导入时遇到了问题> 包。 主应用和 Wear 应用的构建和
我正在使用 Visual Studio 2013 预览版,并且我正在尝试在我的应用程序中使用更少的文件。但是我在右 Pane 中收到编译错误。你可以看看它。有人可以帮我吗? 最佳答案 您必须使用“Un
我已经找到并阅读了这个 tutorial .确实很好!我故意使用“阅读”这个词。早知道就不来这里问了。 现在:我试图将我读过的内容插入到我的应用程序中。我需要带有静态图像和相机预览控件的不同叠加层。我
我正在分别在Jenkins-X的“预览”和“jx-staging”中使用“jx预览”和“jx升级”命令部署服务。 我想删除与使用jx命令部署的特定微服务关联的资源(如部署,服务,pv和pvc等)。 因
我正在 Visual Studio 11 Developer Preview 中编写应用程序,在应用程序与 reader 一起运行一段时间后出现此错误。InputStreamOptions = Inp
今天我对我的 AOSP 存储库执行了一个repo sync,然后我收到了一些错误。这些是我从终端收到的: From https://android.googlesource.com/platform/
我正在使用 IntelliJ IDEA 2021.2.3 和 JDK 17。我有 Java 17 中的代码片段 pom.xm 4.0.0 org.example funct
我正在使用 IntelliJ IDEA 2021.2.3 和 JDK 17。我有 Java 17 中的代码片段 pom.xm 4.0.0 org.example funct
我在网页上有一个dropzone.js实例,具有以下选项: autoProcessQueue:false uploadMultiple:true parallelUploads:20 maxFiles
有关PowerShell Copy-Item命令的快速问题。我想知道您是否具有目录结构,并且想要覆盖另一个目录结构,是否有一种方法可以在“预览”模式下运行Copy-Item命令。它会将覆盖的文件从目录
我正在尝试实现一个 REST 服务(或者甚至是单个 Servlet),它允许我快速“预览”传入文件(包含单个文件的多部分请求)。 这个想法是在数据库中解析并存储进入服务的潜在巨大文件的前几行。 我面临
如何创建这样的圆形/椭圆形或圆角相机预览(中间的圆应该是相机预览)? 伦敦图像代表带有按钮和 View 的其余 UI,因此它必须是可见的,这就是为什么我不能使用像添加 android:backgrou
我有一个 WPF 文本框,并执行以下操作 输入文本“12345” 在 3 和 4 之间移动光标(使用箭头或鼠标点击) 输入 0(因此文本现在为“123045”) 哪个事件/事件参数可以告诉我在位置 4
我是一名优秀的程序员,十分优秀!