Darren’s Blog

欢迎来到我的个人博客。

  • 我是一名 iOS / macOS 开发者,base 广州,喜欢捣鼓电子产品,擅长打羽毛球。
  • 我将在这里记录技术,记录生活。
  • Just for fun ~

历年 WWDC 音视频相关内容整理

WWDC16 照片和相机 iOS 摄影功能改进 人们喜欢用 iPhone 拍照。实际上,它是全世界广受欢迎的相机,而摄影类 app 能够强化这一体验。探索新的 AVFoundation Capture API,它们可以用来拍摄实况照片、从相机提取 RAW 图像数据以及拍摄广色域照片。 AVCapturePhotoOutput - 高级知识 本讲座是“讲座 501:iOS 摄影功能改进”的延续,将详细介绍 AVFoundation 中新增的强大 AVCapturePhotoOutput API 的场景监控和资源管理功能。 WWDC17 照片和相机 在 iPhone 摄影中获取景深 iPhone 7 Plus 上的人像模式展现了摄影中景深的力量。在 iOS 11 中,您的 app 现在也可以使用驱动这项功能的景深数据。了解如何利用景深来为创意图像带来新的可能。更深刻地理解高级景深概念,并学习如何从相机获取流媒体和静态图像景深数据。 WWDC19 照片和相机 iOS 多相机拍摄简介 现在可以通过 iOS 13 上的 AVCapture,从 iPhone XS、iPhone XS Max、iPhone XR 和最新的 iPad Pro 上的多个摄像头同时拍摄照片和视频。也可以配置设备上的多个麦克风来打造捕捉到的声音。了解如何利用这些强大的功能来为您的相机 app 增添富有创意的新功能,比如画中画和空间音频等。更深入地了解可能影响 app 设计的性能注意事项。 照片分割蒙版简介 iOS 12 上使用人像模式拍摄的照片包含一个嵌入式人像分割蒙版,这样可以轻松地打造背景替换等富有创意的视觉效果。iOS 13 利用设备端机器学习来为拍摄的所有照片提供新的分割蒙版。了解您可从 AVCapture 和 Core Image 获得的新语义分割蒙版,以便分离人物的头发、皮肤和牙齿。您的 app 现能通过单独使用其中任一蒙版或结合使用所有蒙版,提供大量的照片编辑控制功能。 ...

September 6, 2024 · Darren Ou

iOS Tweak 插件开发及非越狱安装

一、工具集 TrollStore TrollStore 利用了 iOS 的 AMFI/CoreTrust 漏洞,允许在非越狱的手机上安装自签名的 ipa,并使通过 TrollStore 安装的应用程序能获得更高的权限(如获取手机内的应用列表等)。 版本限制:14.0 beta 2 - 16.6.1, 16.7 RC (20H18), 17.0 根据指引在手机上安装 TrollStore:安装指引 TrollFools TrollFools 通过 TrollStore 安装手机上,可以对手机上的应用进行动态库注入和重签名。 关键逻辑在 Injector.swift 文件中,原理大致如下: 对所有的 MachO 文件(包含主程序和注入的动态库)使用 Idid 进行重签名、使用 ChOma 绕过 CoreTrust、使用 chown 修改权限; 使用 install_name_tool 注入依赖的系统框架,路径为@executable_path/Frameworks; 使用 insert_dylib 注入 LC_LOAD_DYLIB; 注入完成后对 MachO 文件再进行第 1 步。 Theos 和 Tweak Theos 是一个强大的开源开发工具链,广泛用于开发 iOS 越狱插件(tweaks)。这些插件可以修改和扩展应用程序的功能。 二、Theos 1、环境 // 项目安装 sudo git clone --recursive https://github.com/theos/theos.git /opt/theos // 配置环境变量 export THEOS=/opt/theos export PATH=/opt/theos/bin/:$PATH 环境变量添加到 ~/.zshrc 后需要执行 source ~/.zshrc或者新开终端窗口。 ...

September 2, 2024 · Darren Ou

iOS 虚拟摄像头设备调研

一、背景 iPhone 的大部分机器都提供了后置双摄像头,包含广角和超广角(某些机型上是广角和长焦),Pro 和 Pro Max 机型上提供了后置三摄像头,包含广角、超广角和长焦。 我们目前只用到了广角,了解虚拟摄像头设备挖掘更多的使用场景。 二、简介 1、采集设备类型 iOS 或 macOS 上提供的逻辑摄像头如下: AVCaptureDeviceTypeBuiltInWideAngleCamera:广角摄像头(默认,约 28mm 焦段)。 AVCaptureDeviceTypeBuiltInTelephotoCamera:长焦摄像头(2x 或 3x 光学变焦)。 AVCaptureDeviceTypeBuiltInUltraWideCamera:超广角摄像头(约 0.5x 视野扩展),iPhone 13 以上机器提供了微距能力。 AVCaptureDeviceTypeBuiltInDualCamera:双摄像头(广角 + 长焦,如 iPhone X)。 AVCaptureDeviceTypeBuiltInDualWideCamera:双摄像头(广角 + 超广角,如 iPhone 15)。 AVCaptureDeviceTypeBuiltInTripleCamera:三摄像头(超广角 + 广角 + 长焦,如 iPhone 15 Pro Max)。 AVCaptureDeviceTypeBuiltInTrueDepthCamera:前置原深感摄像头(支持 Face ID 的设备)。 AVCaptureDeviceTypeBuiltInLiDARDepthCamera:LiDAR 深度摄像头,用于增强现实和测量。 AVCaptureDeviceTypeContinuityCamera:连续互通相机,用于跨设备视频功能。 AVCaptureDeviceTypeDeskViewCamera:从超广角摄像头上剪下来的经过畸变校正的图像,使其近似于指向桌子的架空摄像机,用于演示和直播(只支持 macOS)。 以上类型只能通过 AVCaptureDeviceDiscoverySession 使用。 2、虚拟摄像头设备 虚拟摄像头设备(Virtual Device)提供了一种抽象层,代表一个包含多个物理摄像头的虚拟摄像头设备,使得开发者可以通过一个单一的 AVCaptureDevice 来访问和控制多个物理摄像头。 当在操作虚拟设备时,iOS 会在 constituentDevices 之间自动切换,以提供一致的用户体验。 iPhone 15 Pro 里,以下设备都属于虚拟设备: ...

August 27, 2024 · Darren Ou

iOS 双摄

一、背景 苹果在 iOS 13 支持了多摄,iPhone XS 以上设备支持。 https://developer.apple.com/videos/play/wwdc2019/225 二、TikTok 相关调研 1、相机 打开相机或关闭双摄 <<<< FigCaptureSession >>>> captureSession_commitInflightConfiguration: <0xe9aa2d480[1156][com.zhiliaoapp.musically]> committing configuration FigCaptureSessionConfiguration 0xe9ab39c10: ID 30, AVCaptureSessionPreset1280x720 multiCam: 0, appAudio: 1, autoConfig: 1, runWhileMultitasking: 0 VC 0xe9ab28390: <SRC:Wide back 420f/1280x720, 25-25(max:30), Z:1.00, ICM:0, (FD E:0 B:0 S:0), HR:1, FaceDrivenAEAFMode:3, FaceDrivenAEAFEnabledByDefault:1> -> <SINK 0xe9ab2c430:Iris movies:0, suspended:0, preserveSuspended:0, movieDur:nans, trim:0, 0fps, preparedID:12, (QHR ON) maxQuality:1, (maxPhotoDims 4224x2376)>, /0x0, E:1, VIS:0, M:0, O:Unspecified, DOC:0, RBC:0, CIM:0 VC 0xe9ab2c4f0: <SRC:Wide back 420f/1280x720, 25-25(max:30), Z:1.00, ICM:0, (FD E:0 B:0 S:0), HR:1, FaceDrivenAEAFMode:3, FaceDrivenAEAFEnabledByDefault:1> -> <SINK 0xe9ab7a070:VideoData discards:1, preview:0, stability:0>, 420f/720x1280, E:1, VIS:1, M:0, O:Portrait, DOC:0, RBC:12, CIM:0 第一个 VC 对应的是 AVCapturePhotoOutput。 ...

June 13, 2024 · Darren Ou

3D 打印入坑记

一、前言 一直梦想着能有一间充满极客范的书房,里面有简洁的电脑桌,墙上挂满各类工具,旁边的工作台上面放着 3D 打印机。 小孩差不多两岁了,经常给他买各种各样的玩具,想着如果有 3D 打印机,想要什么玩具都能打印出来。 其实就是给自己一个任性的理由买一台“不实用”的 3D 打印机哈哈。 二、选购 买之前大概做了下功课,消费级的 3D 打印机大致有两种,一种是 FDM 3D 打印机,另一种是光固化 3D 打印机。 光固化打印机打印出来的模型会比较精致,不会有明显的层纹,比较适合打印手办。入门门槛比较高,操作较为繁琐,关键是打印时会散发有毒气体,家有小孩就排除光固化打印机了。 所以只在 FDM 打印机里面挑选,其实 FDM 的原理就是把材料熔化后一层层地堆积成型,我主要在关注创想三维跟拓竹这两个国内的品牌。 可选的型号也不多,创想三维的 K1 跟拓竹的 P1S,两者相差接近一千块,所以我最后选择的是性价比较高的 K1。 三、打印 大家可以先看看 3D 打印的效果 随着对 3D 打印理解的深入,发现 3D 打印里面的学问非常多,我还只是懂点皮毛。 1. 温度 不同的材料对温度的要求不一样,比如: PLA 材料,喷嘴温度 190 – 230°C,热床温度 35 – 45°C; ABS 材料,喷嘴温度 220 – 250°C,热床温度 80 – 100°C。温度不对,容易出现翘边的情况。 2. 速度 速度会影响打印模型的最终效果,总体来说速度越慢精度越高,打印的效果越好。 特别是起始层的打印,起始层相当于整个模型的基础,我习惯使用一半的速度来打印起始层,比如速度我设置 150 mm/s,起始层的打印速度我会设置为 75 mm/s。 3. 平台附着 平台附着其实就是先在平台上打印一层,解决模型无法粘到平台上的问题,特别是一些跟平台接触面很小的模型,使用平台附着就非常必要。 ...

September 15, 2023 · Darren Ou

群晖 NAS - ChatGPT 部署

一、前言 我在平时工作生活中 ChatGPT 用得很频繁,但会有时候不方便设置代理使用。有时朋友需要用时教育成本也比较高。 如果可以直接访问使用就很好解决我的痛点了。 在上一篇文章「群晖 NAS - 代理设置」中,已经设置好了群晖的代理。 另外,本文不涉及 ChatGPT 账号注册、APIKey 申请等内存,下面只介绍 ChatGPT 的部署。 二、部署 网上有非常多优秀的 ChatGPT 开源项目,我这里使用的是 chatgpt-web。 1、镜像下载 # ssh登录到群晖 ssh user_name@ip_address # 获取超级权限 sudo -i # 拉取镜像 docker pull chenzhaoyu94/chatgpt-web 2、配置 设置访问 web 使用的端口即可 只需要关注两个环境变量: HTTPS_PROXY:这里填写上篇文章设置好的端口,要注意的是这个 IP 地址需要填写群晖的 IP 地址,不能使用 127.0.0.1; OPENAI_API_KEY:这个填写 API Key,教程网上一大堆。 3、测试

June 3, 2023 · Darren Ou

群晖 NAS - 代理设置

一、前言 因网络环境导致,在群晖中的 Docker 拉取镜像或者部分套件中的服务会经常失败,对我们来说有一个顺畅的网络环境能大大提高幸福感。 其实方案有非常多,例如前置软路由,或者使用 Tailscale 设置出口节点等。这里介绍一个相对简单的方法。 二、部署 1、镜像下载 我们使用 Docker 进行部署,方便后续管理。 此时直接使用群晖里的 Docker 图形界面拉取镜像会失败,我们通过 ssh 登录到群晖,使用 docker pull xxx 的方式会比较方便。 # ssh登录到群晖 ssh user_name@ip_address # 获取超级权限 sudo -i # 拉取镜像 docker pull dreamacro/clash docker pull haishanh/yacd 这里比较简单,只用到了 docker pull 命令,如果对 Docker 命令不是很熟悉,配置可以使用群晖内部的 Docker 图形界面。 2、Docker 配置 a. Clash 配置 首先需要从服务商那里获取配置文件,这里命名为config.yaml,然后存储到群晖 docker/clash/config.yaml; 配置文件映射到 /root/.config/clash/config.yaml; 设置端口,下面群晖配置时需要用到, 运行。 b. yacd 配置 yacd 是 clash 的仪表盘,yacd 配置非常简单,指定访问端口即可。 3、群晖配置 控制面板 - 网络 - 常规 - 代理服务器 - 填写刚设置的IP端口 - 应用 ...

May 26, 2023 · Darren Ou

群晖 NAS - frp 使用及实现 Mac 远程访问

frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。 一、服务端配置 1、安装及配置 这里以群晖 NAS 为例: 在 Docker 注册表里搜索 frps,安装 latest 版本(也可以安装指定版本); 在映像里创建容器,并进入高级设置; 在高级设置里启用自动重新启动; 在存储空间添加文件,装载路径为 /etc/frp/frps.ini; 网络里勾选使用与 Docker Host 相同的网络; 启动容器。 2、frps.ini 配置文件 [common] bind_port = 7000 token = your_token dashboard_port = 7500 dashboard_user = your_dashboard_user dashboard_pwd = your_dashboard_pwd vhost_http_port = 8000 vhost_https_port = 8001 二、客户端配置 1、安装及配置 同样以群晖 NAS 为例,安装及配置基本跟服务端相同,配置文件改为 frpc.ini 即可。 2、frpc.ini 配置文件 [common] server_addr = your_server_addr server_port = 7000 tls_enable = true token = your_token [ssh] type = tcp local_ip = 192.168.100.2 local_port = 22 remote_port = 8022 use_compression = true use_encryption = true [chevereto] type = tcp local_ip = 192.168.100.2 local_port = 8090 remote_port = 8090 use_compression = true use_encryption = true [WebDAV_https] type = tcp local_ip = 192.168.100.2 local_port = 5007 remote_port = 8007 use_compression = true use_encryption = true [WebDAV_http] type = tcp local_ip = 192.168.100.2 local_port = 5005 remote_port = 8005 use_compression = true use_encryption = true [dsm_http] type = tcp local_ip = 192.168.100.2 local_port = 5000 remote_port = 8000 use_compression = true use_encryption = true [http] type = http custom_domains = your_custom_domains local_port = 5000 use_compression = true use_encryption = true [https2http] type = https custom_domains = your_custom_domains local_port = 5000 plugin = https2http plugin_local_addr = 127.0.0.1:5000 plugin_crt_path = /etc/frp/cert/your_custom_domains.pem plugin_key_path = /etc/frp/cert/your_custom_domains.key plugin_host_header_rewrite = 127.0.0.1 plugin_header_X-From-Where = frp 三、Mac 远程访问 公司因安全原因,内网屏蔽了 TeamViewer、花生壳等远程桌面工具,而我时常需要在家里访问公司的 Mac 电脑。 ...

July 8, 2022 · Darren Ou

群晖 NAS - 阿里云盘挂载及数据同步

一、前言 阿里云盘即使不是会员也不会限速,获得广大好评。如果能把阿里云盘挂载到 NAS 上,相当于扩充了 NAS 的磁盘容量,也可以利用这一点实现在线播放视频、数据同步等功能。 aliyundrive-webdav 这个工具可以让阿里云盘成为支持 WebDAV 协议的文件服务器,下面简单介绍其安装及使用。 二、安装配置 1、aliyundrive-webdav 安装 在 Docker 注册表里搜索 aliyundrive-webdav,安装 latest 版本(也可以安装指定版本); 在映像里创建容器,并进入高级设置; 在高级设置里启用自动重新启动; 在存储空间添加文件夹,装载路径为 /etc/aliyundrive-webdav/; 添加 8080 端口; 添加 REFRESH_TOKEN、WEBDAV_AUTH_USER、WEBDAV_AUTH_PASSWORD 三个环境变量(REFRESH_TOKEN 在后面介绍如何获取); 启动容器。 2、refresh_token 获取 登录阿里云盘网页版,F12 进入开发者模式,然后在对应位置获取 refresh_token。 三、挂载 四、数据同步

June 8, 2022 · Darren Ou

群晖 NAS - 使用篇

一、前言 距离去年入坑 NAS 已经一年多了(群晖 NAS - 购置篇),这一年多里学习了很多 NAS 的玩法,感觉能够发挥了 NAS 应有的作用。 这里简单介绍一下我利用 NAS 做了什么事情,但不会介绍详细的实现方法,因为网上已经有大量的参考文章。 二、外网访问 能在外网访问家里的 NAS,会多很多玩法,所以怎么实现外网访问是我入坑 NAS 的第一课。 1、QuickConnect QuickConnect 是群晖官方提供的远程访问服务,使用起来最简单门槛最低,但存在几个缺点: 限速比较严重,只有 500k/s 左右下载速度; 数据会经过群晖服务器进行中转,且账号必须绑定手机号,让我觉得会有隐私问题; 只有白群晖能用,黑群晖无法激活。 基于这几个缺点,我需要找其它的替代方案。 2、公网 IP 最方便的公网访问方式就是家里的宽带有公网 IP,无需转发直接访问,但不是所有宽带都能开通公网 IP。 这里的公网 IP 特指 IPv4 的公网 IP,因为 IPv4 的公网 IP 的兼容性最好,所有运营商都支持访问;IPv6 的公网 IP 甚至每个网口都能分配一个 IP,但目前来说应用还不是很广泛,有些运营商有些路由器都还不支持访问。 不同运营商情况大概如下: 如果家里宽带用的是电信,那么可以打电话给客服免费开通公网 IP,很大概率可以开通,如果开通不了就多打几次电话。电信宽带还不支持分配和访问 IPv6 公网 IP。 移动宽带则是完全不向个人开放 IPv4 的公网 IP,但是默认支持 IPv6 IP。 联通的话据说申请难度比电信要高,但我还没用过没有发言权。 我在广州家里用的是移动宽带,默认分配了 IPv6 的公网 IP,所以是可以直接 IPv6 IP 来访问我家里的 NAS。 但是访问 IPv6 的公网 IP 存在两个问题: ...

May 7, 2022 · Darren Ou