UIKit-AVCapture(创建一个简单的摄像头demo)

AVCaptureVideoPreviewLayer

用于显示摄像头采集到的实时视频预览,可以直接添加到视图层次结构中。
AVCaptureVideoPreviewLayer可以嵌入

AVCaptureSession

处理摄像头捕获的数据封装后给屏幕

AVCaptureConnection

用于管理捕获会话中的数据流连接,包括视频、音频和元数据的连接。通过这个连接,你可以设置或查询与视频预览相关的属性,例如视频方向、视频镜像等。

最简单的demo

main.m

//
//  main.m
//  cameraTest
//
//  Created by Renkai Yang on 12/8/23.
//#import <UIKit/UIKit.h>
#import "AppDelegate.h"
#import "ViewController.h"
int main(int argc, char * argv[]) {NSString * appDelegateClassName;@autoreleasepool {// Setup code that might create autoreleased objects goes here.appDelegateClassName = NSStringFromClass([AppDelegate class]);CameraViewController *cameraViewController = [[CameraViewController alloc] init];[cameraViewController viewDidLoad];
//                [[NSRunLoop currentRunLoop] run];}return UIApplicationMain(argc, argv, nil, appDelegateClassName);
}

viewController.m

#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>@interface CameraViewController : UIViewController@property (nonatomic, strong) AVCaptureSession *captureSession;
@property (nonatomic, strong) AVCaptureVideoPreviewLayer *previewLayer;@end@implementation CameraViewController- (void)viewDidLoad {[super viewDidLoad];// 创建 AVCaptureSessionself.captureSession = [[AVCaptureSession alloc] init];// 设置摄像头为后置摄像头AVCaptureDevice *videoDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];if (videoDevice) {NSError *error;AVCaptureDeviceInput *videoInput = [AVCaptureDeviceInput deviceInputWithDevice:videoDevice error:&error];if (!error) {[self.captureSession addInput:videoInput];} else {NSLog(@"Error setting up video input: %@", error);}} else {NSLog(@"Video device not available");}// 创建 AVCaptureVideoPreviewLayerself.previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:self.captureSession];self.previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;self.previewLayer.frame = self.view.layer.bounds;[self.view.layer addSublayer:self.previewLayer];//    NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];
//    for (AVCaptureDevice *device in devices) {
//        NSLog(@"Device name: %@", [device localizedName]);
//        NSLog(@"Device position: %ld", (long)[device position]);
//    }// 启动 AVCaptureSessiondispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{[self.captureSession startRunning];});
}@end

ViewController.h

#import <UIKit/UIKit.h>@interface CameraViewController : UIViewController@end

在这里插入图片描述
info.plist
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/265145.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Cocos Creator:坐标系

Cocos Creator&#xff1a;坐标系 坐标系节点位置坐标转换锚点缩放和旋转总结 在 Cocos Creator 3.8 中&#xff0c;节点坐标系统是游戏开发中的关键概念。它帮助开发者定位和排列场景中的各种元素。以下是关于节点坐标的使用详解&#xff1a; 坐标系 Cocos Creator 使用两种…

【数据结构】栈和队列超详解!(Stack Queue)

文章目录 前言一、栈1、栈的基本概念2、栈的实现&#xff08;数组实现&#xff09;3、栈的基本操作3.1 栈的结构设计3.2 栈常见的基本函数接口 4、栈的实现4.1 初始化栈4.2 栈的销毁4.3 入栈4.4 出栈4.5 判空4.6 长度4.7 获取栈顶元素 完整代码Stack.hStack.cTest.c 二、队列1、…

iOS ApplePay 支付汇总一二

一、前端发起支付的参考例子&#xff1a; import UIKit import MMKV import StoreKit import Alamofire import SVProgressHUD/// ApplePay 工具类 class ApplePayUtils : NSObject {static let shareInstance ApplePayUtils.init()/// 丢单存储集Key,验证成功从集合中移除le…

建行账单导出的手工操作

文章目录 建行账单导出的手工操作概述笔记END 建行账单导出的手工操作 概述 自己的电商账单分析程序初步搞定. 支付宝/微信/京东导出的账单都是csv格式. 我开始做的时候, 建行的账单选的是xls(旧版excel)格式. 没注意看. 程序中用的excel库操作, 只能处理.xlsx格式(新版exce…

10--面向对象OOP--05

1、代码块 如果成员变量想要初始化的值不是一个硬编码的常量值&#xff0c;而是需要通过复杂的计算或读取文件、或读取运行环境信息等方式才能获取的一些值&#xff0c;该怎么办呢&#xff1f;此时&#xff0c;可以考虑代码块&#xff08;或初始化块&#xff09;。 代码块(或…

使用xshell连接虚拟机(服务器)

作者&#xff1a;余小小 Xshell Xshell [1] 是一个强大的安全终端模拟软件&#xff0c;它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。Xshell 通过互联网到远程主机的安全连接以及它创新性的设计和特色帮助用户在复杂的网络环境中享受他们的工作。 Xshell可以…

neuq-acm预备队训练week 8 P8794 [蓝桥杯 2022 国 A] 环境治理

题目描述 输入格式 输出格式 输出一行包含一个整数表示答案。 输入输出样例 解题思路 最短路二分 AC代码 #include<bits/stdc.h> using namespace std; long long temp,n, Q; long long f[105][105],min_f[105][105],cut[105],dis[105][105];//cut为减少多少&#x…

mapstruct个人学习记录

mapstruct核心技术学习 简介入门案例maven依赖 IDEA插件单一对象转换测试结果 mapping属性Spring注入的方式测试 集合的映射set类型的映射测试map类型的映射测试 MapMappingkeyDateFormatvalueDateFormat 枚举映射基础入门 简介 在工作中&#xff0c;我们经常要进行各种对象之…

Sql Server关于表的建立、修改、删除

表的创建&#xff1a; &#xff08;1&#xff09;在“对象资源管理器”面板中展开“数据库”节点&#xff0c;可以看到自己创建的数据库&#xff0c;比如Product。展开Product节点&#xff0c;右击“表”节点&#xff0c;在弹出的快捷菜单中选择“新建表”项&#xff0c;进入“…

JMS(Java Message Service)使用指南

介绍 JMS即Java消息服务&#xff08;Java Message Service&#xff09;应用程序接口&#xff0c;是一个Java平台中关于面向消息中间件&#xff08;MOM&#xff09;的API&#xff0c;用于在两个应用程序之间&#xff0c;或分布式系统中发送消息&#xff0c;进行异步通信。它是一…

SwinIR: Image Restoration Using Swin Transformer

SwinIR 简介 论文地址&#xff1a;SwinIR: Image Restoration Using Swin Transformer 代码&#xff1a;SwinIR ​ 本文提出了一个基于swin transformer的图像超分模型swinIR。其中SwinIR分为三部分&#xff1a;浅层特征提取、深层特征提取和高质量图像重建模块。 现阶段问…

【C++11(三)】智能指针详解--RAII思想循环引用问题

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:C从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习C   &#x1f51d;&#x1f51d; C11 1. 前言2. 为什么要有智能指针?3. RAII思想…